欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet、Jsp学习小总结

程序员文章站 2022-05-19 16:02:26
...

Servlet、Jsp学习笔记

jsp 转化流程

JSP页面本质上是一个Servlet。然而,用JSP页面开发比使用Servlet更容易,JSP页面在JSP容器中运行,一个Servlet容器通常也是JSP容器。例如,Tomcat就是一个Servlet/JSP容器。当一个JSP页面第一次被请求时,Servlet/JSP容器主要做以下两件事情:

jsp文本文件–》jsp页面实现类 -》编译该servlet实现类-》处理客户请求

  1. 转换JSP页面到JSP页面实现类,该实现类是一个实现javax.servlet.jsp.JspPage接口或子接口
    javax.servlet.jsp.HttpJspPage的Java类。JspPage是
    javax.servlet.Servlet的子接口,这使得每一个JSP页面都是一个Servlet。该实现类的类名由Servlet/JSP容器生
    成。一般来说xx.jsp转换的servlet 名称会变为 xx_jsp

  2. 如果转换成功,Servlet/JSP容器随后编译该Servlet类,并装载和实例化该类,像其他正常的Servlet一样执行生命周期操作。每个servlet 在容器内都是单例

EL表达式

主要的两种表达形式:

${object["propertyName"]}
${object.propertyName}

限制在JSP页面中编写脚本和 EL 表达式

(限制在jsp页面中写java代码)在web.xml中只能有一个标签

<jsp-config>
    <!-- 限制在页面中编写java语句 -->
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>            
        <scripting-invalid>true</scripting-invalid>            
    </jsp-property-group>

        <!-- 限制页面使用EL语言 -->
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>        
    </jsp-property-group>
</jsp-config>

include动作 和 include指令的区别

这里,理解include指令和include动作非常重要。对于include指令,资源引入发生在页面转换时,即当JSP容器将页面转换为生成的Servlet时。而对于include动作,资源引入发生在请求页面时。因此,使用include动作是可以传递参数的,而include指令不支持。

jsp文本文件—-(b)–》jsp页面实现类 —(a)—》编译该servlet实现类-》处理客户请求

<jsp:include page="jspf/menu.jsp">
  <jsp:param name="text" value="How are you?"/>
 </jsp:include>
这是发生在A处


<%@ include file="url"%> 发生在b处

监听器分类

  • javax.servlet.ServletContextListener:它能够响应ServletContext生命周期事件,它提供了ServletContext创建之后和ServletContext关闭之前的会被调用的方法。

  • javax.servlet.ServletContextAttributeListener:它能够响应ServletContext范围的属性添加、删除、替换事件。

  • javax.servlet.http.HttpSessionListener:它能够响应HttpSession的创建、超时和失效事件。
  • javax.servlet.http.HttpSessionAttributeListener:它能响应HttpSession范围的属性添加、删除、替换事件。
  • javax.servlet.http.HttpSessionActivationListener:它在一个HttpSession**或者失效时被调用。
  • javax.servlet.http.HttpSessionBindingListener:可以实现这个接口来保存HttpSession范围的属性。当有属性从HttpSession添加或删除时,HttpSessionBindingListener 接口能够做出响应。
  • javax.servlet.ServletRequestListener:它能够响应一个ServletRequest的创建或删除。
  • javax.servlet.ServletRequestAttributeListener:它能响应ServletRequest范围的属性值添加、删除、修改事件。
  • javax.servlet.AsyncListener:一个用于异步操作的监听器

Decorator模式

Decorator模式或者Wrapper模式允许修饰或者封装
(在字面意义中,即修改行为)一个对象,即使你没有该对象的源代码或者该对象标识为final。
Decorator模式适用于无法继承该类(例如,对象的实现类使用final标识)或者无法创建该类的实例,但可以从另外的系统中可以取得该类的实现时。例如,
Servlet容器方法。只有一种方法可以修改ServletRequest或者ServletResponse行为,即在另外的对象中封装该实例。**唯一的限制是,修饰对象必须继承一个接口,然后
实现接口以封装这些方法。**
Servlet、Jsp学习小总结

public class Decorator implements Component {
    private Component decorated;//被包装的对象
    // constructor takes a Component implementation public Decorator(Component component) {
    this.decorated = component;
    }
    // undecorated method
    @Override
    public void methodA(args) {
    decorated.methodA(args);
    }
    // decorated method
    @Override
    public void methodB(args) {
    decorated.methodB(args)
    }
}