本文查阅方法:
一、查阅目录 —— 查阅本文目录,肯定想要查阅的目录标题
二、快捷“查找” —— 在当前浏览器页面,按键 “Ctrl+F” 按键组合,开启浏览器的查找功能,
在查找搜索框中 输入须要查阅的 目录标题,即可以直接到达 标题内容 的位置。
三、学习小结 —— 文中的学习小结内容,是笔者在学习以后总结出的,开发时可直接参考其进行应用开发的内容, 进一步加快了本文的查阅 速度。(水平有限,仅供参考。)
html
本文目录 java
学习小结web
一、JSP技术 概述 express
二、JSP最佳实践编程
三、JSP语法-- JSP模版元素 浏览器
四、JSP语法-- JSP脚本表达式 缓存
五、JSP语法-- JSP脚本片段安全
六、JSP语法-- JSP声明 服务器
七、JSP语法-- JSP注释 session
八、JSP语法-- JSP指令
九、JSP指令-- Page指令
十、使用page指令解决JSP中文乱码
十一、JSP指令-- Include指令
十二、JSP指令-- taglib指令
1三、JSP运行原理和九大隐式对象
1四、JSP九大隐式对象-- out隐式对象
1五、out隐式对象的工做原理 图解
1六、用JSP实现文件下载。
1七、JSP九大隐式对象-- pageContext对象
1八、pageContext做为域对象 所具备的方法
1九、pageContext对象-- 引入和跳转到其余资源
20、JSP标签 介绍
2一、JSP标签-- <jsp:include>标签
2二、<jsp:include>与include指令的比较
2三、JSP标签-- <jsp:forward>标签
2四、JSP标签-- <jsp:param>标签
2五、在web.xml中 映射JSP
2六、如何查找JSP页面中的错误
2七、JSP中的4个域对象 的总结
2八、JavaBean与JSP
2九、JavaBean的属性
30、在JSP中使用JSP标签来操做JavaBean
3一、JSP标签-- <jsp:useBean>标签
3二、<jsp:useBean>标签 执行原理
3三、带标签体的<jsp:useBean>标签
3四、JSP标签-- <jsp:setProperty>标签
3五、JSP标签-- <jsp:getProperty>标签
3六、结合使用 <jsp:setProperty>标签 和 <jsp:getProperty>标签 的综合案例
3七、JSP开发模式
学习小结
(1)JSP运行原理和九大隐式对象
request、response、config、application、exception、Session、page(至关于this)、out、pageContext
(2)经常使用JSP指令-- Page指令
<%@ page errorPage="relative_url" isErrorPage="true|false" %>
(3)使用page指令解决JSP中文乱码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
(4)JSP指令-- Include指令 —— <%@ include file="relativeURL"%>
Demo样例: <%@include file="/public/head.jsp" %>
aaaaaaaaaaaaaaaa<br/>
<%@include file="/public/foot.jsp" %>
(5)JSP标签-- <jsp:forward>标签
<jsp:forward page="relativeURL | <%=expression%>" />
(6)JSP标签-- <jsp:param>标签
当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可使用<jsp:param>标签向这个资源传递参数。
语法1:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
语法2:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可使用多个<jsp:param>标签来传递多个参数。
一、JSP技术 概述
什么是JSP?
JSP全称是Java Server Pages,它和Servlet技术同样,都是SUN公司定义的一种用于开发动态web资源的技术。
为何JSP也是一种动态web资源的开发技术呢?
写JSP虽然就像是在写html,但Jsp技术容许在页面中嵌套java代码,而且容许开发人员在页面中获取request、response等web开发经常使用对象,实现与浏览器的交互,因此jsp也是一种动态web资源的开发技术。
二、JSP最佳实践
无论是JSP仍是Servlet,虽然均可以用于开发动态web资源。但因为这2门技术各自的特色,在长期的软件实践中,人们逐渐把servlet做为web应用中的控制器组件来使用,而把JSP技术做为数据显示模板来使用。
其缘由为,程序的数据一般要美化后再输出:
a.让jsp既用java代码产生动态数据,又作美化会致使页面难以维护。
b.让servlet既产生数据,又在里面嵌套html代码美化数据,一样也会致使程序可读性差,难以维护。
所以最好的办法就是根据这两门技术的特色,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据经过转发技术带给jsp,数据的显示jsp来作。
JSP语法
JSP模版元素
JSP表达式
JSP脚本片段
JSP注释
JSP指令
JSP标签
JSP内置对象
如何查找JSP页面中的错误
三、JSP语法-- JSP模版元素
JSP页面中的HTML内容称之为JSP模版元素。
JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。
四、JSP语法-- JSP脚本表达式
JSP脚本表达式(expression)用于将程序数据输出到客户端
语法:<%= 变量或表达式 %>
举例:当前时间:<%= new java.util.Date() %>
JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,而后在相应位置用out.print(…) 将数据输给客户端。
注意:JSP脚本表达式中的变量或表达式后面不能有分号(;)。
五、JSP语法-- JSP脚本片段
(1)JSP脚本片段(scriptlet)用于在JSP页面中编写多行Java代码。
语法:
<%
多行java代码
%>
注意:JSP脚本片段中只能出现java代码,不能出现其它模板元素, JSP引擎在翻译JSP页面中,会将JSP脚本片段中的Java代码将被原封不动地放到Servlet的_jspService方法中。
(2)JSP脚本片段中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。
(3)在一个JSP页面中能够有多个脚本片段,在两个或多个脚本片段之间能够嵌入文本、HTML标记和其余JSP元素。
举例:
<%
int x = 10;
out.println(x);
%>
<p>这是JSP页面文本</p>
<%
int y = 20;
out.println(x);
%>
(4)多个脚本片段中的代码能够相互访问,犹如将全部的代码放在一对<% %>之中的状况。如:out.println(x);
(5)单个脚本片段中的Java语句能够是不完整的,可是,多个脚本片段组合后的结果必须是完整的Java语句,
例如:
<%
for (int i=1; i<5; i++)
{
%>
<H1>www.sina.com</H1>
<%
}
%>
六、JSP语法-- JSP声明
(1)JSP页面中编写的全部代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码则被翻译到_jspService方法的外面。
语法: <%!
java代码
%>
(2)JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。
(3)多个静态代码块、变量和函数能够定义在一个JSP声明中,也能够分别单独定义在多个JSP声明中。
(4)JSP隐式对象的做用范围仅限于Servlet的_jspService方法,因此在JSP声明中不能使用这些隐式对象。
Demo样例:
<%!
static
{
System.out.println("loading Servlet!");
}
private int globalVar = 0;
public void jspInit()
{
System.out.println("initializing jsp!");
}
%>
<%!
public void jspDestroy()
{
System.out.println("destroying jsp!");
}
%>
七、JSP语法-- JSP注释
JSP注释的格式:
<%-- 注释信息 --%>
JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。
八、JSP语法-- JSP指令
(1)JSP指令简介
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其他部分。在JSP 2.0规范中共定义了三个指令:
page指令
Include指令
taglib指令
(2)JSP指令的基本语法格式:
<%@ 指令 属性名="值" %>
举例:<%@ page contentType="text/html;charset=gb2312"%>
若是一个指令有多个属性,这多个属性能够写在一个指令中,也能够分开写。
例如:<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date"%>
也能够写做:
<%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>
【小知识:修改Jsp的模版:在安装目录里面搜索:“.vtl” 。】
九、JSP指令-- Page指令
page指令用于定义JSP页面的各类属性,不管page指令出如今JSP页面中的什么地方,它做用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
JSP 2.0规范中定义的page指令的完整语法:
<%@ page
(1) [ language="java" ]
(2) [ extends="package.class" ]
(3) [ import="{package.class | package.*}, ..." ]
详解:JSP 引擎自动导入下面的包:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
(4) [ session="true | false" ] :默认值 (true )
详解:当设置为true时,JSP引擎在将jsp文件翻译成Servlet时,会自动建立Session对象;若设为false则不建立。意味着:当设置为true时能够在jsp页面使用session进行编程。若为false则不能使用其编程,由于翻译后的Servlet没有为其建立对象。因为session对象会影响服务器的性能,因此要慎重使用,能够手动进行关闭。可是通常建议使用其默认值(true)。
(5) [ buffer="none | 8kb | sizekb" ] :默认值 ( 8kb)
详解: jsp页面中使用out.write()写数据,首先是要写在jsp页面的缓冲区中,等待缓冲区满了以后再写到Response缓冲区中。
(6) [ autoFlush="true | false" ] :默认值 (true )
(7) [ isThreadSafe="true | false" ] :默认值 (true )
详解: 决定该jsp翻译后的servlet是不是线程安全的:true是不安全;false是线程安全的:底层原理是使翻译后servlet实现了SingleThreadModel这个接口。
(8) [ info="text" ]
详解:当前JSP页面的备注信息。
(9) [ errorPage="relative_url" ] 重点学习
详解: 局部错误页面:当jsp页面程序发生异常时,跳转到哪一个显示友好信息的页面的路径。并且“友好错误页面”的大小必须超过1kb,不然不会被显示。errorPage属性的设置值必须使用相对路径,若是以“/ ”开头,表示相对于当前Web应用的根目录(注意不是站点根目录),不然标识相对于当前页面。
全局错误页面:能够在web.xml文件中使用<error-page>元素为整个Web应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的彻底限定名,<location>元素指定以“/”开头的错误处理页面的路径。
若是设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起做用。
Demo: <web-app ...>
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/errors/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/errors/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errors/500.jsp</location>
</error-page>
</web-app>
(10) [ isErrorPage="true | false" ] :默认值 ( false)
详解: 若设置为true,即显示声明当前页面是错误处理页面,则在将jsp页面翻译成的Servlet时,会传入一个“ 封装了错误信息的 Exception 对象”,以方便在错误处理页面编码:将错误发生的详细信息写入到后台处理日志中。(九大隐式对象之一: Throwable exception ; )
(11) [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]
详解:JSP引擎会根据page指令的contentType属性生成相应的调用ServletResponse.setContentType()方法的语句。同时该属性还具备说明JSP源文件的字符编码的做用。
(12) [ pageEncoding="characterSet | ISO-8859-1" ]
(13) [ isELIgnored="true | false" ] :默认值 (false )
详解: 当前页面是否忽略EL表达式。JSP2.0就默认支持EL表达式了。若发现所编辑的jsp页面不识别EL表达式,则能够显示的声明该属性为false。
%>
十、使用page指令解决JSP中文乱码
(1)JSP程序存在有与Servlet程序彻底相同的中文乱码问题
a.输出响应正文时出现的中文乱码问题
b.读取浏览器传递的参数信息时出现的中文乱码问题
c.JSP引擎将JSP页面翻译成Servlet源文件时也可能致使中文乱码问题
(2)中文乱码问题产生的缘由:
a.JSP引擎将JSP源文件翻译成的Servlet源文件默认采用UTF-8编码,而JSP开发人员能够采用各类字符集编码来编写JSP源文件,所以,JSP引擎将JSP源文件翻译成Servlet源文件时,须要进行字符编码转换。
b.若是JSP文件中没有说明它采用的字符集编码,JSP引擎将把它看成默认的ISO8859-1字符集编码处理。
(3)如何解决JSP引擎翻译JSP页面时的中文乱码问题
a.经过page指令的contentType属性说明JSP源文件的字符集编码
b.page指令的pageEncoding属性说明JSP源文件的字符集编码
c.若使用Eclipse开发Jsp,则仅使用这一个属性就能够了。Eclpise会自动参照该属性值,为Servlet生成contentType的属性值的。
Demo样例:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
十一、JSP指令-- Include指令
include指令用于引入其它JSP页面,若是使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。因此include指令引入一般也称之为静态引入。静态引入的性能要比动态引入好不少。
语法:
<%@ include file="relativeURL"%>
其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示表明当前web应用。
细节:
被引入的文件必须遵循JSP语法。
被引入的文件可使用任意的扩展名,即便其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见名知意,JSP规范建议使用.jspf(JSP fragments[ˈfræɡmənt]:n.碎片;片断)做为静态引入文件的扩展名。
因为使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,因此这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。
静态包含:include指令(静态包含(编译时包含),它包含的全部jsp会编译成一个servlet,性能好。
<body>
<%@include file="/public/head.jsp" %>
aaaaaaaaaaaaaaaa<br/>
<%@include file="/public/foot.jsp" %>
</body>
动态包含:这种状况是运行时包含,三个文件将被分别翻译成三个Servlet文件,在运行的时候才合并到一块儿,因此性能比静态包含要差不少!
<body>
<%
request.getRequestDispatcher("/public/head.jsp").include(request,response);
%>
<%
response.getWriter().write("aaaaaaaaaaaaa<br/>");
%>
<%
request.getRequestDispatcher("/public/foot.jsp").include(request,response);
%>
</body>
十二、JSP指令-- taglib指令
Taglib指令用于在JSP页面中导入标签库,详见《自定义标签技术 学习笔记》一文。
1三、JSP运行原理和九大隐式对象
运行原理:每一个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,而后按照servlet的调用方式进行调用。因为JSP第一次访问时会翻译成servlet,因此第一次访问一般会比较慢,但第二次访问,JSP引擎若是发现JSP没有变化,就再也不翻译,而是直接调用,因此程序的执行效率不会受到影响。
九大隐式对象:JSP引擎在调用JSP对应的_jspServlet时,会传递或建立9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时得到这些web对象的引用,特地定义了9个相应的变量,开发人员在JSP页面中经过这些变量就能够快速得到这9大对象的引用。
JSP九大隐式对象:
request
response
config
application
exception
Session
page(至关于this )
out
pageContext
1四、JSP九大隐式对象-- out隐式对象
out隐式对象用于向客户端发送文本数据。
out对象是经过调用pageContext对象的getOut方法返回的,其做用和用法与ServletResponse.getWriter方法返回的PrintWriter对象很是类似。
JSP页面中的out隐式对象的类型为JspWriter,JspWriter至关于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性能够调整它的缓存大小,甚相当闭它的缓存。
只有向out对象中写入了内容,且知足以下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并经过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
a. 设置page指令的buffer属性关闭了out对象的缓存功能
b. out对象的缓冲区已满
c. 整个JSP页面结束
out隐式对象的注意事项
同时使用out和response.getwriter()输出数据。可能会形成输出的内容顺序颠倒。
1五、out隐式对象的工做原理 图解
1六、用JSP实现文件下载。
备注:当jsp页面有文本内容时(包括空格符、回车换行符等等),out对象就会调用getWriter()方法。如果一个文本字符都没有的话,就不会调用该方法,因此咱们在JSP页面中使用response.getOutputStream()方法时,就不会发生异常:“getOutputStream() has already been called for this response ”了。如果发生该异常但没法肯定是哪一个字符时,能够到该Jsp翻译成Servlet中查看,就能够看到都写了哪些文本字符。【注意:连空格符和回车符】
Demo样例:
代码全文:注意JSP片断以前是没有空格和回车符的。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page import="java.io.FileInputStream"%><%
String path = application.getRealPath("/download/1.jpg"); //c:\\
String filename = path.substring(path.lastIndexOf("\\")+1);
response.setHeader("content-disposition","attachment;filename=" + filename);
FileInputStream in = new FileInputStream(path);
byte buffer[] = new byte[1024];
int len = 0;
while((len=in.read(buffer))>0){
response.getOutputStream().write(buffer,0,len);
}
in.close();
%>
1七、JSP九大隐式对象-- pageContext对象
pageContext对象是JSP技术中最重要的一个对象,它表明JSP页面的运行环境.
这个对象不只封装了对其它8大隐式对象的引用,它自身仍是一个域对象,能够用来保存数据,而且你还能够经过pageContext操做其余三个域。而且,这个对象还封装了web开发中常常涉及到的一些经常使用操做,例如引入和跳转其它资源、检索其它域对象中的属性等。
经过pageContext得到其余对象
getException方法返回exception隐式对象
getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象
pageContext封装其它8大内置对象的意义,思考:若是在编程过程当中,把pageContext对象传递给一个普通java对象,那么这个java对象将具备什么功能?
1八、pageContext做为域对象 所具备的方法
pageContext对象的方法
public void setAttribute(java.lang.String name,java.lang.Object value)
public java.lang.Object getAttribute(java.lang.String name)
public void removeAttribute(java.lang.String name)
pageContext对象中还封装了访问其它域的方法
public java.lang.Object getAttribute(java.lang.String name,int scope)
public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
public void removeAttribute(java.lang.String name,int scope)
表明各个域的常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
findAttribute方法(*重点,查找各个域中的属性,顺序为:page-->request-->session-->application)
1九、pageContext对象-- 引入和跳转到其余资源
PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。
方法接收的资源若是以“/”开头, “/”表明当前web应用。
20、JSP标签 介绍
JSP标签也称之为Jsp Action(JSP动做)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,形成jsp页面难以维护。
JSP经常使用标签
<jsp:include>标签
<jsp:forward>标签
<jsp:param>标签
2一、JSP标签-- <jsp:include>标签
<jsp:include>标签用于把另一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
语法:
<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
page属性用于指定被引入资源的相对路径,它也能够经过执行一个表达式来得到。
flush属性指定在插入其余资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。
2二、<jsp:include>与include指令的比较
<jsp:include>标签是动态引入,<jsp:include>标签涉及到的多个JSP页面会被分别翻译成多个servlet,这多2个servlet的内容在执行时进行合并。而include指令是静态引入,涉及到的多个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
注意:无论是<jsp:include>标签,仍是include指令,它们都会把两个JSP页面内容合并输出,因此这两个页面不要出现重复的HTML全局架构标签,不然输出给客户端的内容将会是一个格式混乱的HTML文档。
2三、JSP标签-- <jsp:forward>标签
<jsp:forward>标签用于把请求转发给另一个资源。
语法:<jsp:forward page="relativeURL | <%=expression%>" />
page属性用于指定请求转发到的资源的相对路径,它也能够经过执行一个表达式来得到。
2四、JSP标签-- <jsp:param>标签
当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可使用<jsp:param>标签向这个资源传递参数。
语法1:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
语法2:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可使用多个<jsp:param>标签来传递多个参数。
2五、在web.xml中 映射JSP
JSP 实际上就是一个特殊的Servlet,因此咱们显性地映射JSP页面。也能够不去映射,而是使用服务器默认的缺省DefaultServlet去调用它。
<servlet>
<servlet-name>SimpleJspServlet</servlet-name>
<jsp-file>/jsp/simple.jsp</jsp-file>
<load-on-startup>1</load-on-startup >
</servlet>
……
<servlet-mapping>
<servlet-name>SimpleJspServlet</servlet-name>
<url-pattern>/xxx/yyy.html</url-pattern>
</servlet-mapping>
2六、如何查找JSP页面中的错误
JSP页面中的JSP语法格式有问题,致使其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。
JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了Java语法问题,致使JSP页面翻译成的Servlet源文件不能经过编译,JSP引擎也将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。
JSP页面翻译成的Servlet程序在运行时出现异常,这与普通Java程序的运行时错误彻底同样,Java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。
2七、JSP中的4个域对象 的总结
到此为止,web开发接触到了4个域对象,这4个域对象是学习web的重点,也是笔试常常考察的知识点
pageContext(称之为page域)
request(称之为request域)
session(称之为session域)
servletContext(称之为application域)
2八、JavaBean与JSP
什么是JavaBean?
JavaBean是一个遵循特定写法的Java类,它一般具备以下特色:
a.这个Java类必须具备一个无参的构造函数
b.属性必须私有化。
c.私有化的属性必须经过public类型的方法暴露给其它程序,而且方法的命名也必须遵照必定命名规范。
JavaBean在J2EE开发中,一般用于封装数据,对于遵循以上写法的JavaBean组件,其它程序能够经过反射技术实例化JavaBean对象,而且经过反射那些遵照命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
2九、JavaBean的属性
JavaBean的属性能够是任意类型,而且一个JavaBean能够有多个属性。每一个属性一般都须要具备相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改成大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
属性访问器一般以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改成大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。
一个JavaBean的某个属性也能够只有set方法或get方法,这样的属性一般也称之为只写、只读属性。
30、在JSP中使用JSP标签来操做JavaBean
JSP技术提供了三个关于JavaBean组件的动做元素,即JSP标签,它们分别为:
a. <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
b. <jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
c. <jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
3一、JSP标签-- <jsp:useBean>标签
<jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象:
若是存在则直接返回该JavaBean对象的引用。
若是不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。
经常使用语法:
<jsp:useBean id="beanName" class="package.class"
scope="page|request|session|application"/>
id属性用于指定“JavaBean实例对象的引用名称”和其“存储在域范围中的名称”。
class属性用于指定JavaBean的完整类名(即必须带有包名)。
scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application等四个值中的一个,其默认值是page。
3二、<jsp:useBean>标签 执行原理
<jsp:useBean id="currentDate" class="java.util.Date"/>
翻译成的Servlet源码:
java.util.Date currentDate = null;
synchronized (_jspx_page_context) {
currentDate = (java.util.Date)_jspx_page_context.getAttribute(
"currentDate", PageContext.PAGE_SCOPE );
if (currentDate == null){
currentDate = new java.util.Date();
_jspx_page_context.setAttribute("currentDate",currentDate, PageContext.PAGE_SCOPE);
}
}
3三、带标签体的<jsp:useBean>标签
语法:
<jsp:useBean ...>
Body
</jsp:useBean>
功能:
Body部分的内容只在<jsp:useBean>标签建立JavaBean实例对象时才执行,取出已有对象不执行。
注意:默认采用page域,每次都是没有的,因此执行,而若是是session域,第一次有,之后都没有,除非session过时,application类推…
Demo样例:
<body>
<!-- userbean标签的标签体只在userbean标签实例化bean时才执行 -->
<jsp:useBean id="person" class="cn.itcast.domain.Person" scope="session">
bbbb
</jsp:useBean>
<%=person.getName() %>
</body>
3四、JSP标签-- <jsp:setProperty>标签
<jsp:setProperty>标签用于设置和访问JavaBean对象的属性。
语法格式:
<jsp:setProperty name="beanName"
{
property="propertyName" value="{string | <%= expression %>}" | //手动赋值
property="propertyName" [ param="parameterName" ] | //经过请求参数赋值
property= "*" //为全部属性赋值。
}/>
name属性用于指定JavaBean对象的名称。
property属性用于指定JavaBean实例对象的属性名。
value属性用于指定JavaBean对象的某个属性的值,value的值能够是字符串,也能够是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,若是value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。
param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值一样会自动转换成要设置的JavaBean属性的类型。
注意
一、在经过该标签设置Bean的属性值时对于八种基本类型,该标签能够将字符串自动转换,而其余类型没法转换。好比Date,value=“<%=new Date()%>”
二、param和*设置
3五、JSP标签-- <jsp:getProperty>标签
<jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,而后将读取的属性值转换成字符串后插入进输出的响应正文中。
语法: <jsp:getProperty name="beanInstanceName" property="PropertyName" />
name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。
property属性用于指定JavaBean实例对象的属性名。
若是一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。
3六、结合使用 <jsp:setProperty>标签 和 <jsp:getProperty>标签 的综合案例
Demo样例:
<body>
<jsp:useBean id="person" class="cn.itcast.domain.Person"/>
<!-- 手工为bean属性赋值 -->
<jsp:setProperty name="person" property="name" value="xxxx"/>
<%=person.getName() %><br/>
<!-- 用请求参数给bean的属性赋值 http://localhost:8080/day09/2.jsp?name=uuuuuuuuuuuuu -->
<jsp:setProperty name="person" property="name" param="name"/>
<!-- http://localhost:8080/day09/2.jsp?name=uuuuuuuu&age=12 -->
<jsp:setProperty name="person" property="age" param="age"/> <!-- 支持8种基本数据类型的转换(把客户机提交的字符串,转成相应的8种基本类型,赋到bean的属性上) -->
<!-- http://localhost:8080/day09/2.jsp?name=uuuuuuuu&age=12&birthday=1980-09-09 -->
<%--
<jsp:setProperty name="person" property="birthday" value="<%=new Date() %>"/>
--%>
<%=person.getName() %><br/>
<%=person.getAge() %><br/>
<%=person.getBirthday() %><br/>
<br/>----------------------------------------------------<br/>
<!-- 用全部的请求参数为bean赋值 -->
<jsp:setProperty name="person" property="*"/>
<%=person.getName() %><br/>
<%=person.getAge() %><br/>
<jsp:getProperty name="person" property="name"/>
<jsp:getProperty name="person" property="age"/>
<jsp:getProperty name="person" property="birthday"/>
</body>
3七、JSP开发模式
SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式。
JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据。
Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP、JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式。
敬请评论(1)若您以为本文 有用处 —— 请留言评论,以坚决其余 IT童鞋 阅读本文的信心。(2)若您以为本文 没用处 —— 请留言评论,笔者将会改进不足,以便为你们整理更加好用的笔记。