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的区别:

JSP相关知识三

 

    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

-、 *、/或者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()方法

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

相关文章: