JSP相关知识三

    1.  JSP状态管理

    http协议的无状态性:简单来说就是服务器无法保存客户端的状态。Web服务器跟踪客户状态的四种方法:a. 建立含有跟踪数据的隐藏字段;b. 重写包含额外参数的URL;c. 使用持续的Cookie;d. 使用Session(会话)机制,安全性比Cookie高。

    Cookie:中文名称为“小甜饼” ,是Web服务器保存在客户端的一系列文本信息。Cookie的作用:对特定对象的追踪;保存用户网页浏览记录与习惯;简化登录;安全风险:容易泄漏用户信息。

    Cookie的创建与使用:

    创建Cookie对象
    Cookie newCookie = new Cookie(String key,Object value);
    写入Cookie对象
    response.addCookie(newCookie);
    读取Cookie对象
    Cookie[] cookies = request.getCookies();

    Cookie的类型:

    a. 持久性cookie:会被存储到客户端的硬盘上
    b. 会话cookie:不会存储到客户端的硬盘上,而是放在浏览器进程所处
的内存当中,当浏览器关闭则该会话cookie就销毁了。

    Cookie与Session的区别:

 

    2. JavaBean

    符合某种特定的规范的Java类。JavaBean是一种可重复使用、且跨平台的软件组件。使用javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性,Javabean既可以封装数据同时也可以封装业务逻辑。JavaBean分为两种:一种是有用户界面(UI,User Interface)的JavaBean;一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。

    Javabean的设计原则:公有类,无参的公有构造方法,属性私有,getter和setter方法。

    Javabean的四个作用域范围(从小到大):

    说明:使用useBeans的scope属性可以用来指定javabean的作用域范围
    page:仅在当前页面有效(默认值)
    request:共享同一个请求的网页,可以通过HttpRequest.getAttribute()方法取得javabean对象,请求范围
    session:可以通过HttpSession.getAttribute()方法取得javabean对象,会话范围
    application:用于整个web应用生命周期内,可以通过application.getAttribute()方法取得javabean对象,范围最大,全局

    在JSP页面中使用JSP动作标签来使用JavaBean:

1 <!--在jsp页面中实例化或者在指定范围内使用javabean-->
2 <jsp:useBean id="标识符" class="java类名" scope="作用范围" />
3 <!--给已经实例化的javabean对象的属性赋值,*表示javabean跟表单提交的信息进行匹配,匹配上则赋值,匹配所有值-->
4 <jsp:setProperty name="javabean实例名" property="*" />(跟表单关联)
5 <jsp:setProperty name="javabean实例名" property="javabean属性名" />(跟表单关联单个值)
6 <jsp:setProperty name="javabean实例名" property="javabean属性名" value="beanValue" />(手工设置)
7 <jsp:setProperty name="javabean实例名" property="propertyName" param="request对象中的参数名" />(跟request参数关联)
8 <!--获取指定javabean对象的属性值-->
9 <jsp:getProperty name="javabean实例名" property="属性名" />

    3. EL表达式   

    EL默认对象:

    pageContext -- pageContext对象;       pageScope -- 包含了页面属性和它们值的map;     requestScope -- 包含了request属性和它们值的map;

    sessionScope -- 包含了session属性和它们值的map;   applicationScope -- 包含了application属性和它们值的map;

    param 包含了request parameters属性和它们单一值的map;     paramValues -- 包含了request parameters属性和它们相应的字符串数组的值的map;    header

    headerValues    cookie

    EL数据运算符:+、-、 *、/或者div、 %或者mod;

    EL比较运算符:

描述 运算符
Equals == and eq
Not equals  != and ne
Less than < and lt
Greater than > and gt
Less than or equal <= and le
Greater than or equal >= and ge

    EL逻辑运算符:

描述 运算符
and && and and
or  || and or
not ! and not

    EL表达式举例:

1 <!--书写javaBean的属性-->
2 ${bean.attribute} 
3 <!--书写请求的参数-->
4 ${param.attribute_name} == request.getParameter("attribute_name") 
5 <!--书写session中的值-->
6 ${sessionScope.attribute_name} == session.getAttribute("attribute_name") 
7 ${sessionScope.person.attribute_name} == ${sessionScope.person["attribute_name"]}

    Warning:当要调用的属性名称中包含一些特殊字符,如.或-等并非字母或数字的符号,就一定要使用[],${username} 当我们没有指定范围时,它的默认值会先从Page范围找,找不到,再依次到Request、Session、Application范围。假如找到就直接回传,不再继续找,但是都没找到就回传null。

    4. 自定义标签

    自定义标签的创建步骤:

    a. 创建标签的处理类(必须继承以下两个类之一:javax.servlet.jsp.tagext.TagSupport或者javax.servlet.jsp.tagext.BodyTagSupport),重写doStartTag()方法或者doEndTag()方法

    b. 创建标签库描述文件,将文件存放在WEB-INF文件夹下;
   
c. 在JSP中使用<%@taglib uri = "" prefix="" %>引入标签库,在页面中插入标签,例如:<mm:hello/>
    Tips:prefix指代是标签库。

    创建自定义标签的处理类示例:

 1 import java.io.IOException;
 2 import javax.servlet.jsp.JspException;
 3 import javax.servlet.jsp.tagext.TagSupport;
 4 
 5 public class MyTag extends TagSupport
 6 {
 7     @Override
 8     public int doStartTag() throws JspException
 9     {
10         try
11         {
12             pageContext.getOut().println("hello world");
13         }
14         catch (IOException e)
15         {
16             e.printStackTrace();
17         }
18 
19         return EVAL_BODY_INCLUDE;
20     }
21 
22     @Override
23     public int doEndTag() throws JspException
24     {
25         try
26         {
27             pageContext.getOut().println("welcome");
28         }
29         catch (IOException e)
30         {
31             e.printStackTrace();
32         }
33 
34         return EVAL_PAGE;
35     }
36 
37 }
View Code

    创建标签库的描述文件(*.tld)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
 3 
 4 <taglib>
 5 
 6     <tlib-version>1.0</tlib-version>
 7     <jsp-version>1.1</jsp-version>
 8     <short-name>myTag</short-name>
 9     <uri>/myTag</uri>
10 
11     <tag>
12         <name>firstTag</name>
13         <tag-class>com.MyTag</tag-class>
14         <body-content>empty</body-content>
15     </tag>
16 </taglib>
View Code

    在JSP中引入标签库

1 <%@ taglib uri="/mytaglib" prefix="mm" %>

     在标签的处理类中,标签的处理方法是doStartTag()方法或者doEndTag()方法,下面来说说它们:

     当Servlet容器遇到自定义标签的起始标志,就会调用doStartTag()方法。 doStartTag()方法返回一个整数值,用来决定程序的后续流程。它有两个可选值: Tag.SKIP_BODY 或者Tag.EVAL_BODY_INCLUDE;Tag.SKIP_BODY表示标签之间的内容被忽略,Tag.EVAL_BODY_INCLUDE表示标签之间的内容被正常执行。

    当Servlet容器遇到自定义标签的结束标志,就会调用doEndTag()方法。doEndTag()方法也返回一个整数值,用来决定程序后续流程。它有两个可选值: Tag.SKIP_PAGE 或者Tag.EVAL_PAGE;Tag.SKIP_PAGE表示立刻停止执行JSP网页,网页上未处理的静态内容和JSP程序均被忽略,任何已有的输出内容立刻返回到客户的浏览器上。Tag.EVAL_PAGE表示按正常的流程继续执行JSP网页。

    用户自定义的标签还可以定义自己的属性:在标签处理类中应该将这个属性作为成员变量,并且分别提供设置和读取属性的方法。

    5. MVC模式

    M—Model模型,V—View视图,C—Controller控制器),View视图负责页面展现,Controller控制器(Servlet)负责控制该调用什么方法,Model模型(各种java类)负责处理事务逻辑。页面中的数据来自于模型。

mvc设计模式

 





posted @ 2017-07-04 15:30  守明  阅读(137)  评论(0编辑  收藏  举报