博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP相关知识三
阅读量:5811 次
发布时间:2019-06-18

本文共 4466 字,大约阅读时间需要 14 分钟。

    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 
2
3
4
(跟表单关联)5
(跟表单关联单个值)6
(手工设置)7
(跟request参数关联)8
9

    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 
2 ${bean.attribute} 3
4 ${param.attribute_name} == request.getParameter("attribute_name") 5
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         try11         {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     @Override23     public int doEndTag() throws JspException24     {25         try26         {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 
2 3 4
5 6
1.0
7
1.1
8
myTag
9
/myTag
10 11
12
firstTag
13
com.MyTag
14
empty
15
16
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设计模式

 

转载于:https://www.cnblogs.com/shouming/articles/7112677.html

你可能感兴趣的文章
如何迅速分析出系统CPU的瓶颈在哪里?
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
查看>>
Linux基础命令---rmdir
查看>>
优秀程序员共有的7种优秀编程习惯
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
开发者论坛一周精粹(第五十五期) 全站HTTPS之OSS教程 一次可以备案几个网站?...
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
C#字符串的不变性
查看>>
前端路由简介以及vue-router实现原理
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
分享15款很实用的 Sass 和 Compass 工具
查看>>