jsp与el表达式

第一部分:jsp

1、jsp的简介

1.1 sun公司用于动态网站的开发技术,servlet jsp

 

1.2 jsp:java server pages,运行在服务器端的页面,jsp就是servlet,

最终jsp会被编译成servlet

 

1.3 jsp在访问时候编译成servlet,会编译到tomcat的work目录里面

 

1.4 jsp组成:html+java代码+jsp自身的一些东西

 

1.5 jsp嵌入java代码有三种方式

(1)<%!   %>:定义的变量是成员变量

(2)<%=   %>:向页面输出内容,代码生成到servlet里面service方法里面

(3)<%    %>:写java代码,代码生成到servlet里面service方法里面

 

2、jsp的注释

2.1 html的注释

(1)写法 <!--  -->

 

2.2 java的注释

(1)有三种注释

(2)单行注释  //

     多行注释  /*  *.

     文档注释  /**  */

(3)把java注释写到java代码

 

2.3 jsp自身的注释

(1)<%--  --%>

 

2.4 代码

    <!-- html的注释 -->

    

    <!-- java的注释 -->

    <%

// 单行注释

/* 多行注释 */

/**

   文档注释

*/

     %>

     

     <!-- jsp自身的注释  -->

     <%-- jsp自身的注释 --%>

2.5 jsp里面三种注释的作用范围

(1)jsp自身的注释存在jsp源代码阶段

(2)jsp编译成servlet之后,html的注释和java的注释存在

(3)通过浏览器看到(查看源文件)的内容,只有html的注释

 



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'jsp01.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- html的注释 -->
  9. <!-- java的注释 -->
  10. <%
  11. // 单行注释
  12. /* 多行注释 */
  13. /**
  14. 文档注释
  15. */
  16. %>
  17. <!-- jsp自身的注释 -->
  18. <%-- jsp自身的注释 --%>
  19. </body>
  20. </html>

 

3、jsp的指令

3.1 有三个指令 (page ; include ; taglib)

(1)写法: <%@ 指令名称  属性="属性值"%>

 

3.2 page指令

(1)设置jsp页面的一些信息

(2)写法: <%@ page 属性="属性值"%>

(3)属性

= language:jsp支持语言类型,目前支持是java语言

= extends:jsp会编译成servlet,继承的类,默认继承的是HttpJspBase

 

= session:在jsp中是否可以直接使用session对象,默认值true

== 代码

<!-- session属性:在jsp中是否可以直接使用session对象  -->

<%

//向session域设置值

//request.getSession().setAttribute("msg", "sessionValue");

session.setAttribute("msg", "sessionItcast");

%>

${msg }

= import:在jsp中导入包

== 可以分开写,也可以写在一起 <%@ page import="java.util.List,java.util.ArrayList"%>



 
  1. <%@ page import="java.util.List,java.util.ArrayList"%>
  2. <%@ page language="java" pageEncoding="utf-8"
  3. session="true" errorPage="error.jsp" isELIgnored="true"%>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <title>My JSP 'page01.jsp' starting page</title>
  8. </head>
  9. <body>
  10. <!-- session属性:在jsp中是否可以直接使用session对象 -->
  11. <%
  12. //向session域设置值
  13. //request.getSession().setAttribute("msg", "sessionValue");
  14. session.setAttribute("msg", "sessionItcast");
  15. %>
  16. ${msg }
  17. <!-- import属性的使用 -->
  18. <%
  19. List list = new ArrayList();
  20. %>
  21. <!-- errorPage属性 -->
  22. <%
  23. //出现异常
  24. // int m = 10/0;
  25. %>
  26. </body>
  27. </html>

 

= buffer:设置jsp对客户端输出的缓冲区的大小 8kb

= autoFlush:如果内容超出缓冲区是否会正确输出 默认值是true

= errorPage:如果jsp页面出现异常,设置跳转到错误页面

 

= isErrorPage:在错误页面中是否显示错误信息

java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

if (exception != null) {

response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

}

== 使用exception对象 <%=exception.getMessage() %>



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8" isErrorPage="true"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'error.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <h1>执行了非法操作!</h1>
  9. <%=exception.getMessage() %>
  10. </body>
  11. </html>

 

= contentType:设置打开的浏览器的编码

= pageEncoding:jsp编译成servlet,使用编码方式的设置,优先权大于contentType

 

= isELIgnored:是否忽略el表达式,默认不忽略false;如果设置成true之后,把el表达式作为普通文本

 

重点掌握的属性:session、import、errorPage、contentType、pageEncoding

 

3.3 include指令

(1)在一个页面中包含其他页面内容

(2)写法: <%@ include 属性="属性值"%>

(3)规范:

第一:在被包含的页面中,直接写内容

第二:被包含的页面不能使用变量传递

第三:包含的页面路径后面不能加参数

 

(4)include包含也称为静态包含

多个jsp页面,最终会编译成几个servlet?

多个jsp页面,最终编译成一个servlet,合并输出



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'body.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <%@ include file="head.jsp" %>
  9. <h1>body..............</h1>
  10. <%@ include file="foot.jsp" %>
  11. </body>
  12. </html>


 
  1. <h2>foot.............</h2>


 
  1. <h2>head..................</h2>

 

3.4 taglib指令

(1)经常和jstl标签库一起使用,替代页面中的<%%>

(2)写法:<%@ taglib uri="jstl标签库的路径" prefix="jstl标签库的别名"%>

 

jsp中有几个指令?

三个指令分别是什么?

三个指令分别可以做什么?

 

 

4、jsp的内置对象

4.1 在jsp中有9个内置对象,在jsp不需要创建,可以使用的对象    

request:相当于servlet里面的HttpServletRequest,获取请求的信息,是一个域对象可以存值和取值

response:相当于servlet里面HttpServletResponse,向页面输出内容,把cookie回写到浏览器

session:相当于servlet里面HttpSession,是一个域对象,存值和取值

config:相当于servlet里面ServletConfig,获取servlet名称,获取初始化参数

application:相当于servlet里面ServletContext,是一个域对象存值和取值,获取web项目中文件

 

exception:相当于Servlet对应属性Throwable,page指令属性isErrorPage,把这个属性值设置成true之后,才可以使用这个对象

    java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

    if (exception != null) {

      response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

    }

 

page:当前对象Object

 

out:输出的对象JspWriter

out和response.getWriter()使用的是不是一个对象

= out使用的是JspWriter

= response.getWriter()使用的是PrintWriter

 

= 现在分别使用out输出和response.getWriter()输出



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'out.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <%="AAAA"%>
  9. <%
  10. response.getWriter().write("BBBB");
  11. %>
  12. <%="CCCC"%>
  13. <%="DDDD"%>
  14. </body>
  15. </html>

 

= out的输出机制:

== 会产生两个缓冲区,out缓冲区和response缓冲区

== out输出会把内容放到out缓冲区,response输出会把内容放到response缓冲区

== out缓冲区不能直接向页面输出,把内容先放到response缓冲区里面,通过response缓冲区才能向页面输出

jsp与el表达式jsp与el表达式

 

pageContext:

(1)是一个域对象

= pageContext范围是当前页面,不能在servlet里面,只能使用在jsp中

= 向pageContext域里面设置值:setAttribute(java.lang.String name, java.lang.Object value)

= 从pageContext域里面获取值:getAttribute(java.lang.String name) 

= 代码

<%

  //设置值

  pageContext.setAttribute("page", "pageValue");

%>

<!-- 从pageContext域里面获取值 -->

<%=pageContext.getAttribute("page") %>

= 范围比较

            application > session > request > pageContext



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'pageContext01.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- pageContext域对象使用 -->
  9. <%
  10. //设置值
  11. pageContext.setAttribute("page", "pageValue");
  12. %>
  13. <!-- 从pageContext域里面获取值 -->
  14. <%=pageContext.getAttribute("page") %>
  15. <hr/>
  16. ${page }
  17. </body>
  18. </html>

 

(2)向其他的域对象里面设置值

= 使用传统方式向四个域对象设置值

        <!-- 使用传统方式向四个域对象里面设置值 -->

<%

//向application里面设置值(servletContext)

application.setAttribute("app", "appvalue");

//向session里面设置值

session.setAttribute("session", "sessionvalue");

//向request里面设置值

request.setAttribute("request", "requestvalue");

//向pageContext里面设置值

pageContext.setAttribute("page", "pagevalue");

%>

<%=application.getAttribute("app") %>

<%=session.getAttribute("session") %>

<%=request.getAttribute("request") %>

<%=pageContext.getAttribute("page") %>

 

= 使用pageContext内置对象向application、session、request域里面设置

== 使用setAttribute(java.lang.String name, java.lang.Object value, int scope) 

== 有三个参数:第一个参数是名称;第二个参数设置的值;第三个参数哪个域(PageContext里面的常量表示不同的域)

== 代码

<!-- 使用pageContext内置对象向四个域对象里面设置值 -->

<%

//向application

pageContext.setAttribute("app100", "app100value", PageContext.APPLICATION_SCOPE);

//向session

pageContext.setAttribute("session100", "session100value", PageContext.SESSION_SCOPE);

//向request

pageContext.setAttribute("request100", "request100value", PageContext.REQUEST_SCOPE);

//向pageContext

pageContext.setAttribute("page100", "page100value", PageContext.PAGE_SCOPE);

%>



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'pageContext02.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用传统方式向四个域对象里面设置值 -->
  9. <%
  10. //向application里面设置值(servletContext)
  11. application.setAttribute("app", "appvalue");
  12. //向session里面设置值
  13. session.setAttribute("session", "sessionvalue");
  14. //向request里面设置值
  15. request.setAttribute("request", "requestvalue");
  16. //向pageContext里面设置值
  17. pageContext.setAttribute("page", "pagevalue");
  18. %>
  19. <%=application.getAttribute("app") %>
  20. <%=session.getAttribute("session") %>
  21. <%=request.getAttribute("request") %>
  22. <%=pageContext.getAttribute("page") %>
  23. <hr/>
  24. <!-- 使用pageContext内置对象向四个域对象里面设置值 -->
  25. <%
  26. //向application
  27. pageContext.setAttribute("app100", "app100value", PageContext.APPLICATION_SCOPE);
  28. //向session
  29. pageContext.setAttribute("session100", "session100value", PageContext.SESSION_SCOPE);
  30. //向request
  31. pageContext.setAttribute("request100", "request100value", PageContext.REQUEST_SCOPE);
  32. //向pageContext
  33. pageContext.setAttribute("page100", "page100value", PageContext.PAGE_SCOPE);
  34. %>
  35. <%=application.getAttribute("app100") %>
  36. <%=session.getAttribute("session100") %>
  37. <%=request.getAttribute("request100") %>
  38. <%=pageContext.getAttribute("page100") %>
  39. </body>
  40. </html>

 

(3)从其他的域对象里面获取值

= 获取四个域对象里面的值:getAttribute(java.lang.String name, int scope) 

== 两个参数:第一个参数域名称;第二个参数是哪个域(PageContext里面的常量表示不同的域)

= 代码

<!-- 使用pageContext内置对象获取四个域对象里面的值 -->

<!-- 获取application里面的值 -->

<%=pageContext.getAttribute("app", PageContext.APPLICATION_SCOPE) %>

<!-- 获取session里面的值 -->

<%=pageContext.getAttribute("session", PageContext.SESSION_SCOPE) %>

<!-- 获取request里面的值 -->

<%=pageContext.getAttribute("request", PageContext.REQUEST_SCOPE) %>

<!-- 获取pageContext域里面的值 -->

<%=pageContext.getAttribute("page",PageContext.PAGE_SCOPE) %>



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'pageContext02.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用传统方式向四个域对象里面设置值 -->
  9. <%
  10. //向application里面设置值(servletContext)
  11. application.setAttribute("app", "appvalue");
  12. //向session里面设置值
  13. session.setAttribute("session", "sessionvalue");
  14. //向request里面设置值
  15. request.setAttribute("request", "requestvalue");
  16. //向pageContext里面设置值
  17. pageContext.setAttribute("page", "pagevalue");
  18. %>
  19. <!-- 使用pageContext内置对象获取四个域对象里面的值 -->
  20. <!-- 获取application里面的值 -->
  21. <%=pageContext.getAttribute("app", PageContext.APPLICATION_SCOPE) %>
  22. <!-- 获取session里面的值 -->
  23. <%=pageContext.getAttribute("session", PageContext.SESSION_SCOPE) %>
  24. <!-- 获取request里面的值 -->
  25. <%=pageContext.getAttribute("request", PageContext.REQUEST_SCOPE) %>
  26. <!-- 获取pageContext域里面的值 -->
  27. <%=pageContext.getAttribute("page",PageContext.PAGE_SCOPE) %>
  28. <hr/>
  29. <!-- 使用pageContext内置对象获取其他八个内置对象 -->
  30. <%
  31. //获取request内置对象
  32. pageContext.getRequest();
  33. //获取response内置对象
  34. pageContext.getResponse();
  35. //获取session内置对象
  36. pageContext.getSession();
  37. %>
  38. </body>
  39. </html>

 

(4)获取到其他的八个内置对象

= 代码

<!-- 使用pageContext内置对象获取其他八个内置对象 -->

<%

//获取request内置对象

pageContext.getRequest();

 

//获取response内置对象

pageContext.getResponse();

 

//获取session内置对象

pageContext.getSession();

.......

%>

 

(5)findAttribute(java.lang.String name)方法的使用

= 分别向四个域对象里面设置值,名称相同

= 获取到域范围最小的里面的值

== <%=pageContext.findAttribute("itcast") %>

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'pageContext02.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用传统方式向四个域对象里面设置值 -->
  9. <%
  10. //向application里面设置值(servletContext)
  11. application.setAttribute("itcast", "appvalue");
  12. //向session里面设置值
  13. session.setAttribute("itcast", "sessionvalue");
  14. //向request里面设置值
  15. //request.setAttribute("itcast", "requestvalue");
  16. //向pageContext里面设置值
  17. //pageContext.setAttribute("itcast", "pagevalue");
  18. %>
  19. ${itcast }
  20. <hr/>
  21. <!-- 使用findAttribute方法操作 -->
  22. <%=pageContext.findAttribute("itcast") %>
  23. </body>
  24. </html>

 

4.2 四个域对象

= 范围比较

            application > session > request > pageContext

servletContext(application):范围是整个web项目

session:范围是一次会话

request:范围是一次请求

pageContext:范围是当前页面

 

4.3 在jsp中有几个内置对象?

 

    jsp中九个内置对象分别是什么?

 

    jsp中九个内置对象分别做什么?

 

    out内置对象的输出机制?

                1.有两个缓冲区:out缓冲区和response缓冲区

                2.out缓冲区不能直接输出,需放到response换能够输出

 

    pageContext内置对象的四个用途?

                1.本身是域对象

                2.向其他三个域存值:setArrtribute(String key, Object obj, int scope);

                3.获取其他域对象的值:Object obj = 

                4.获取其他八个内置对象

 

5、jsp的动作标签(了解即可)

5.1 什么是动作标签,在jsp使用动作标签可以完成功能

 

5.2 写法: 在jsp中使用 <jsp:动作标签名称 属性="属性值"></jsp:动作标签名称>

 

5.3 常用的动作标签

(1)<jsp:forward> :转发

= <jsp:forward page="/forward/hello.jsp"></jsp:forward>



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'forward.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <jsp:forward page="/forward/hello.jsp">
  9. <jsp:param value="itcast100" name="id11"></jsp:param>
  10. </jsp:forward>
  11. </body>
  12. </html>

 

(2)<jsp:include> :页面包含(动态包含)

= <jsp:include page="head.jsp"></jsp:include>

= 有多个jsp文件,最终会编译成几个servlet?

== 多个jsp文件会编译成多个servlet

jsp与el表达式

jsp与el表达式

(3)<jsp:param>   :传递参数

= 在带路径的动作标签里面使用

= 代码

    <jsp:forward page="/forward/hello.jsp">

<jsp:param value="itcast100" name="id11"></jsp:param>

    </jsp:forward>

 

5.4 下面的三个动作标签用于操作javabean

(4)<jsp:userBean>

(5)<jsp:setProperty>

(6)<jsp:getProperty>

 

 

第二部分:javabean

1、什么是javabean

1.1 javabean就是一个java类,遵循一定书写规范

第一个规范:在javabean里面有一个公开的空参构造方法

第二个规范:在javabean里面属性是私有的

第三个规范:在javabean里面私有的属性通过公开的方法暴露出来

 

(1)代码

//私有的属性

private String id;

private String username;

private String password;

//公开方法暴露私有的属性

public String getId() {

return id;

}

......

1.2 javabean主要的用途是 封装数据

(1)使用set方法设置值

(2)使用get方法获取值

 



 
  1. package cn.itcast.bean;
  2. public class User {
  3. //私有的属性
  4. private String id;
  5. private String username;
  6. private String password;
  7. //公开方法暴露私有的属性
  8. public String getId() {
  9. return id;
  10. }
  11. public void setId(String id) {
  12. this.id = id;
  13. }
  14. public String getUsername() {
  15. return username;
  16. }
  17. public void setUsername(String username) {
  18. this.username = username;
  19. }
  20. public String getPassword() {
  21. return password;
  22. }
  23. public void setPassword(String password) {
  24. this.password = password;
  25. }
  26. }

 

2、封装数据到javabean

2.0 创建jsp页面,在页面中写表单,提交到servlet中,在servlet进行数据封装到javabean的操作

 

2.1 使用传统方式进行封装

(1)实现的步骤

 * 1、得到表单提交的数据 : requset.getParameter();

 * 2、创建User的对象 : new User();

 * 3、使用user里面的set方法进行封装

(2)代码

//获取表单提交的数据

//处理中文乱码问题

request.setCharacterEncoding("utf-8");

String id = request.getParameter("id");

String username = request.getParameter("username");

String password = request.getParameter("password");

//创建user对象

User user = new User();

//使用user里面的set方法进行封装

user.setId(id);

user.setUsername(username);

user.setPassword(password);

System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());

  1. import java.io.IOException;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import cn.itcast.bean.User;
  7. public class Form01Servlet extends HttpServlet {
  8. /**
  9. * 使用传统方式封装数据到javabean
  10. * 1、得到表单提交的数据
  11. * 2、创建User的对象
  12. * 3、使用user里面的set方法进行封装
  13. */
  14. public void doGet(HttpServletRequest request, HttpServletResponse response)
  15. throws ServletException, IOException {
  16. //获取表单提交的数据
  17. //处理中文乱码问题
  18. request.setCharacterEncoding("utf-8");
  19. String id = request.getParameter("id");
  20. String username = request.getParameter("username");
  21. String password = request.getParameter("password");
  22. //创建user对象
  23. User user = new User();
  24. //使用user里面的set方法进行封装
  25. user.setId(id);
  26. user.setUsername(username);
  27. user.setPassword(password);
  28. System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());
  29. }
  30. /**
  31. *
  32. */
  33. public void doPost(HttpServletRequest request, HttpServletResponse response)
  34. throws ServletException, IOException {
  35. doGet(request, response);
  36. }
  37. }

 

2.2 使用jsp的动作标签进行封装(一般不用)

(0)表单输入项里面的 name属性值 和 javabean里面的属性值一样

(1)使用到jsp中三个动作标签

第一个:<jsp:useBean> :设置要封装数据到的是哪一个javabean

第二个:<jsp:setProperty>:向哪个属性里面设置值

第三个:<jsp:getProperty>:从哪个属性里面或者值

(2)代码

<!-- 使用动作标签封装数据到javabean -->

<!-- 创建封装的javabean的对象 -->

<jsp:useBean id="user" class="cn.itcast.bean.User"></jsp:useBean>

 

<!-- 设置值到javabean里面 -->

<%--     <jsp:setProperty property="id" name="user"></jsp:setProperty>

<jsp:setProperty property="username" name="user"></jsp:setProperty>

<jsp:setProperty property="password" name="user"></jsp:setProperty> --%>

 

<!-- 设置值到javabean的简写的方式 -->

<!-- 表单输入项里面的 name属性值 和 javabean里面的属性值一样 -->

<jsp:setProperty property="*" name="user"></jsp:setProperty>

 

<!-- 获取javabean里面值,显示到页面上 -->

<jsp:getProperty property="id" name="user"></jsp:getProperty>

<jsp:getProperty property="username" name="user"></jsp:getProperty>

<jsp:getProperty property="password" name="user"></jsp:getProperty>



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'bean.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用动作标签封装数据到javabean -->
  9. <!-- 创建封装的javabean的对象 -->
  10. <jsp:useBean id="user" class="cn.itcast.bean.User"></jsp:useBean>
  11. <!-- 设置值到javabean里面 -->
  12. <%-- <jsp:setProperty property="id" name="user"></jsp:setProperty>
  13. <jsp:setProperty property="username" name="user"></jsp:setProperty>
  14. <jsp:setProperty property="password" name="user"></jsp:setProperty> --%>
  15. <!-- 设置值到javabean的简写的方式 -->
  16. <!-- 表单输入项里面的 name属性值 和 javabean里面的属性值一样 -->
  17. <jsp:setProperty property="*" name="user"></jsp:setProperty>
  18. <!-- 获取javabean里面值,显示到页面上 -->
  19. <jsp:getProperty property="id" name="user"></jsp:getProperty>
  20. <jsp:getProperty property="username" name="user"></jsp:getProperty>
  21. <jsp:getProperty property="password" name="user"></jsp:getProperty>
  22. </body>
  23. </html>

 

2.3 使用beanutils框架进行封装(开发常用,重点之重点)

(1)beanutils框架是apache组织开发的,用于封装数据到javabean的操作

(2)如果要想使用beanutils框架,首先导入jar包

(3)使用框架里面 BeanUtils类里面方法 populate(Object bean, Map properties) 

= 要求:表单输入项的name的属性值,必须和javabean里面的属性值一样

= populate(Object bean, Map properties) 方法里面有两个参数

== 第一个参数是封装的javabean对象;

== 第二个参数是要封装数据的map集合(map结构是key-value,key是属性的名称,value是值)

=== 在request里面方法getParameterMap(),返回map集合,key是表单输入项name属性的值,value是输入值

(4)代码

//创建user对象

User user = new User();

//进行封装数据到javabean

try {

BeanUtils.populate(user, request.getParameterMap());

} catch (Exception e) {

e.printStackTrace();

System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());

  1. import java.io.IOException;
  2. import java.lang.reflect.InvocationTargetException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import org.apache.commons.beanutils.BeanUtils;
  8. import cn.itcast.bean.User;
  9. public class Form02Servlet extends HttpServlet {
  10. /**
  11. * 使用beanutils框架进行封装数据到javabean
  12. * 1、创建javabean对象(user对象)
  13. * 2、获取表单提交的数据,得到map集合(使用request里面getParameterMap方法)
  14. * 3、使用beanutils里面方法
  15. */
  16. public void doGet(HttpServletRequest request, HttpServletResponse response)
  17. throws ServletException, IOException {
  18. request.setCharacterEncoding("utf-8");
  19. //创建user对象
  20. User user = new User();
  21. //进行封装数据到javabean
  22. try {
  23. BeanUtils.populate(user, request.getParameterMap());
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());
  28. }
  29. /**
  30. *
  31. */
  32. public void doPost(HttpServletRequest request, HttpServletResponse response)
  33. throws ServletException, IOException {
  34. doGet(request, response);
  35. }
  36. }

 

 

第三部分:el表达式

1、使用el表达式获取域对象里面的值

(1)el表达式使用在jsp页面中,不能在html中使用

(2)写法: ${域对象名称}

(3)使用el表达式获取四个域对象里面的值

= 代码

    <!-- 向四个域对象里面设置值 -->

    <%

//向application里面设置

application.setAttribute("itcast", "appvalue");

//向session域里面设置值

session.setAttribute("itcast", "sessionvalue");

//向request域里面设置值

request.setAttribute("itcast", "requestvalue");

//向pageContext域里面设置值

pageContext.setAttribute("itcast", "pagevalue");

     %>

     <!-- 使用el表达式获取四个域对象里面的值 -->

     <!-- 获取application里面的值 -->

     ${applicationScope.itcast }

     <!-- 获取session里面的值 -->

     ${sessionScope.itcast }

     <!-- 获取request里面的值 -->

     ${requestScope.itcast }

     <!-- 获取pageContext里面的值 -->

     ${pageScope.itcast }

        (4)如果使用el表达式获取的名称不存在,返回空字符串 "",不会出现空指针异常

     如果使用传统方式getAttribute获取名称不存在,返回null,容易出现空指针异常

 

(5)使用el表达式获取域对象名称相同的,获取的是域范围最小的里面的值

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'eltest01.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用el表达式获取四个域对象里面的值 -->
  9. <!-- 向四个域对象里面设置值 -->
  10. <%
  11. //向application里面设置
  12. application.setAttribute("itcast", "appvalue");
  13. //向session域里面设置值
  14. session.setAttribute("itcast", "sessionvalue");
  15. //向request域里面设置值
  16. request.setAttribute("itcast", "requestvalue");
  17. //向pageContext域里面设置值
  18. pageContext.setAttribute("itcast", "pagevalue");
  19. %>
  20. <!-- 使用el表达式获取四个域对象里面的值 -->
  21. <!-- 获取application里面的值 -->
  22. ${applicationScope.itcast }
  23. <!-- 获取session里面的值 -->
  24. ${sessionScope.itcast }
  25. <!-- 获取request里面的值 -->
  26. ${requestScope.itcast }
  27. <!-- 获取pageContext里面的值 -->
  28. ${pageScope.itcast }
  29. <hr/>
  30. ${aa }
  31. <hr/>
  32. <%=pageContext.getAttribute("aa") %>
  33. </body>
  34. </html>

 

2、使用el表达式获取域对象里面数组、集合(list、map)、对象属性的值

(1)使用el表达式获取域对象里面的数组的值

= 使用数组的下标得到里面的值,数组下标从0开始

= ${域对象名称[数组的下标] }

= 代码

<!-- 使用el表达式获取域对象里面的数组的值 -->

<%

//创建数组

String[] arr = {"lucy","mary","jack"};

//把数组放到域对象里面

request.setAttribute("arr100", arr);

%>

<!-- el表达式获取值 -->

<!-- 使用传统方式:遍历数组,根据数组的下标得到数组里面的值,数组下标从0开始 -->

${arr100[2] }

 

= 如果获取的数组的下标不存在,返回是空字符串 ""

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'eltest02.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用el表达式获取域对象里面的数组的值 -->
  9. <%
  10. //创建数组
  11. String[] arr = {"lucy","mary","jack"};
  12. //把数组放到域对象里面
  13. request.setAttribute("arr100", arr);
  14. %>
  15. <!-- el表达式获取值 -->
  16. <!-- 使用传统方式:遍历数组,根据数组的下标得到数组里面的值,数组下标从0开始 -->
  17. ${arr100[2] }
  18. </body>
  19. </html>

(2)使用el表达式获取域对象里面list集合的值

= 使用list集合的下标获取里面的值,list下标从0开始的

= ${域对象名称[list集合的下标]}

= 代码

<!-- 使用el表达式获取域对象里面的list集合的值  -->

<%

//创建list集合

List<String> list = new ArrayList<String>();

//向list集合里面放数据

list.add("AAAA");

list.add("BBBB");

list.add("CCCC");

//把list集合放到域对象里面

request.setAttribute("list100", list);

%>

<!-- el表达式获取值 -->

<!-- 使用传统方式遍历list,有四种方式 

普通for:根据下标得到,下标从0开始

迭代器

增强for

list迭代器

-->

${list100[2] }

= 如果获取list集合的下标不存在,返回是空字符串 ""

 

= 向域对象里面放set集合,使用el表达式不可以获取域对象里面set集合的值

== list和set的区别:list是有序的,set是无序的

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'eltest03.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用el表达式获取域对象里面的list集合的值 -->
  9. <%
  10. //创建list集合
  11. List<String> list = new ArrayList<String>();
  12. //向list集合里面放数据
  13. list.add("AAAA");
  14. list.add("BBBB");
  15. list.add("CCCC");
  16. //把list集合放到域对象里面
  17. request.setAttribute("list100", list);
  18. %>
  19. <!-- el表达式获取值 -->
  20. <!-- 使用传统方式遍历list,有四种方式
  21. 普通for:根据下标得到,下标从0开始
  22. 迭代器
  23. 增强for
  24. list迭代器
  25. -->
  26. ${list100[2] }
  27. </body>
  28. </html>

 

 

(3)使用el表达式获取域对象里面map集合的值

= 根据map的key名称得到对应的value值

= 写法:${域名称.key名称}

= 另外写法:${域名称["key名称"]}

= 代码

    <!-- 使用el表达式获取域对象里面map集合的值 -->

    <%

//创建map集合

Map<String,String> map = new HashMap<String,String>();

map.put("aa", "AA");

map.put("bb", "BB");

map.put("cc", "CC");

//把map集合放到域对象里面

request.setAttribute("map100", map);

     %>

     <!-- el表达式获取值 -->

     <!-- 使用传统方式遍历map,有两种方式

第一种:得到所有的key,根据key得到value

第二种:得到key-value关系

      -->

     ${map100.aa }

= 如果key的名称不存在,返回是空字符串 ""

 

= 如果map集合的key的类型是int类型,使用el表达式不能获取里面的值,报错【500】



 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>My JSP 'eltest04.jsp' starting page</title>
  6. </head>
  7. <body>
  8. <!-- 使用el表达式获取域对象里面map集合的值 -->
  9. <%
  10. //创建map集合
  11. Map<String,String> map = new HashMap<String,String>();
  12. map.put("aa", "AA");
  13. map.put("bb", "BB");
  14. map.put("cc", "CC");
  15. //把map集合放到域对象里面
  16. request.setAttribute("map100", map);
  17. %>
  18. <!-- el表达式获取值 -->
  19. <!-- 使用传统方式遍历map,有两种方式
  20. 第一种:得到所有的key,根据key得到value
  21. 第二种:得到key-value关系
  22. -->
  23. ${map100.aa }
  24. ${map100["aa"] }
  25. <hr/>
  26. <%
  27. //创建map集合
  28. Map<Integer,String> m = new HashMap<Integer,String>();
  29. m.put(1, "AA");
  30. m.put(2, "BB");
  31. m.put(3, "CC");
  32. //把map集合放到域对象里面
  33. request.setAttribute("m", map);
  34. %>
  35. <%-- ${m.1 } --%>
  36. </body>
  37. </html>

 

 

(4)使用el表达式获取域对象里面的对象的属性值

= 使用名称.对象里面的属性的名称得到值

= ${域对象名称.属性的名称}

= 代码

    <!-- 使用el表达式获取域对象里面对象的属性的值 -->

    <%

//创建对象

User user = new User();

user.setUsername("东方不败");

user.setPassword("999");

//把user对象放到域对象里面

request.setAttribute("user100", user);

     %>

     <!-- el表达式获取值 -->

     ${user100.username }

     <br/>

     ${user100.password }

= 如果获取的域对象里面的对象的属性名称不存在,报错



 
  1. <%@page import="cn.itcast.bean.User"%>
  2. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. <title>My JSP 'eltest05.jsp' starting page</title>
  7. </head>
  8. <body>
  9. <!-- 使用el表达式获取域对象里面对象的属性的值 -->
  10. <%
  11. //创建对象
  12. User user = new User();
  13. user.setUsername("东方不败");
  14. user.setPassword("999");
  15. //把user对象放到域对象里面
  16. request.setAttribute("user100", user);
  17. %>
  18. <!-- el表达式获取值 -->
  19. ${user100.username }
  20. <br/>
  21. ${user100.password }
  22. </body>
  23. </html>
  1. public class User {
  2. // 私有的属性
  3. private String username;
  4. private String password;
  5. public User() {
  6. }
  7. public User(String username, String password) {
  8. this.username = username;
  9. this.password = password;
  10. }
  11. // 公开方法暴露私有的属性
  12. public String getUsername() {
  13. return username;
  14. }
  15. public void setUsername(String username) {
  16. this.username = username;
  17. }
  18. public String getPassword() {
  19. return password;
  20. }
  21. public void setPassword(String password) {
  22. this.password = password;
  23. }
  24. }

 

3、el表达式的其他操作(了解即可)

3.1 运算的操作

(1)算术的运算 + - ......

(2)关系的运算 < > <= >=.....

(3)逻辑的运算 && ||....

 

3.2 empty运算符

(1)判断对象是否为空

= ${user == null}

= ${empty user}

 

= ${user != null}

= ${not empty user}

 

3.3 三元表达式

(1)${user != null ? user.name : ""}

= 如果user对象不为空,获取user的name值,否则返回空字符串

= ${ not empty user ? user.name : ""}

 

3.4 在el表达式中有11个隐含对象

(1)pageContext隐含对象:对应于jsp中pageContext内置对象,获取其他的八个内置对象