Servlet、Jsp学习小总结

时间:2022-06-13 21:05:35

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)
    }
}