jsp



JSP --java server page(服务器脚本语言)
servlet的缺陷
servlet编码,部署和调试任务繁琐。
生成动态网页频繁,不利于项目分工。

jsp页面要被WEB容器翻译成java类,按照servlet规范,所有jsp翻译生成的类,必须实现HttpJspPage
接口。二HttpJspPage是Servlet的子接口。也意味着所有的jsp翻译生产类也会实现Servlet。所以,
从这个意义说,Jsp本质是Servlet。jsp重在于页面显示,而servlet重在于逻辑处理。

JSP引擎:
    jsp引擎是WEB容器编写的类,负责将jsp页面翻译成java类。在web容器/conf/web.xml中进行注册。
JSP生命周期:
     由JSP引擎将JSP页面翻译成JAVA代码
     将JAVA代码编译成class字节码文件
     加载到容器
     由容器实例化成对象
     初始化阶段相关的方法是jspLinit()
     请求到达,调用服务阶段相关的方法是_jspService() 
     销毁阶段相关的方法是jspDestroy()

JSP网页主要由元素(Elemet)和模板数据(TemplateData)两部分组成:
      模板数据是JSP的静态部分
      web容器不处理
      元素则是必须经由web容器解释
      元素都是以xml作为语法基础

WEB容器支持两种不同格式的JSP语法
      普通格式和XML兼容格式
      普通JSP语法是设计给开发者使用的
      XML兼容语法是给设计用来容易被开发工具使用的

jsp的脚本元素:
      声明:<%!int y=8;%>定义jsp类的成员变量,静态变量和方法
      脚本:<%  %>丰富_jspService(),在脚本中定义的变量,全部是_jspService()的局部变量。
      表达式:<%= %>丰富_jspService(),相当于out.print()向页面输出内容。注意,后面不能加分号。

jsp注释:
      <%--jsp--%>容器不翻译,只在源代码中不可见,最为安全。
html注释:
       <!--jsp-->html注释会通过out.print输出到客户端,客户端和服务器均可见,最不安全。
java注释:
       // /* */ 给java代码书写注释,只在服务器端显示,只用于java代码
jsp隐式对象:jsp引擎翻译的jsp类中,在jspService()中会定义九个变量,并将这些变量做初始化。由于脚本和表达式是在丰富_jspService()方法。
所以可以直接使用这些变量。这些变量称为jsp隐式对象。

jsp隐式对象九个:
四个作用域:
      pageContext:只在当前jsp页面有效
      request:作用于请求
      session:作用于会话
      application:作用于全局
两个输出:
       response:响应对象
       out:打印输出流

        page:当前对象
        config:配置对象
        exception:异常对象

import=""导包,导入多个类,中加以逗号分隔
info="aa"是一个方法,返回aa

page指令:
  contentType:设置MIME类型和编码集
   pageEncoding:设置编码集,MIME类型默认text/html;
   import:导入该jsp类中所用到的类。如果需要导入多个类,中间以逗号分开。
   session:访问该jsp页面时是否创建会话对象,默认为true。
   errorPage:表示当前jsp页面如果抛出了运行异常,则跳转指定出错页面。
   isErrorPage:表示该jsp页面为出错处理页面。定义了exception隐式对象,接受异常对象。


jsp指令包含和动作包含的区别。
答:

指令包含是将本身jsp和包含的jsp放在一起编译,形成一个class文件。所有两个页面不能存放同名变量,指令包含也只能包含文件。


动作包含是本身jsp包含的是另一个jsp执行的结果。形成两个jsp文件,所以两个页面可以存在同名变量。
动作包含可以包含文件,也可以包含servlet输出结果。同时,可以传递参数。
<jsp:include page="URL" flush="true">
<jsp:param value="aaa" name="bbb">
</jsp:include>
<jsp:forward page="relativeURL"/>内部转发至某个页面,相当于内部转发。

过滤器:
一个中间组件,用来拦截源数据和目的数据之间的消息。
过滤二者之间传递的数据
--------------------------------------------------------------------------------------
EL表达式
<%request.setAttribute("aaa", "fff");
   session.setAttribute("aaa", "bbb");
%>

${aaa}<br>

<welcome-file-list>
表示欢迎页面集合。表示如果在访问web应用程序时,不输入任何路径,默认所访问的页面列表。

作用范围:先从小作业域中查找,如果小作业域中有该键对应的值,则取出,并忽略其他作业域。如果小作用域中没有改键,那么再去大作用域中查找。
所以,可以通过作用域指定需要查找绑定对象  ${sessionScope.aaa }表示在session会话范围中查找对象,如果没有找到。也不会去其他作用域查找。
同样,支持运算${3+5} ${4>3}
通过EL表达式,从作用域对象中取出属性时,是调用get方法完成的。所以就是该实体类没有属性,但是提供了get方法,同样可以通过EL表达式取出属性值。
另外,实体类的属性必须规范,一般来说,属性名前两个字母都不能是大写字母。
------------------------------------------------------------------------------------
在<filter-mapping>标签中的<url-pattern>子标签,可以加入<url-pattern>标签,表示针对请求路径进行过滤。也可以加入<servlet-name>标签,表示针对某个指定名称的servlet过滤。
过滤器类型:
request:表示直接请求,按请求路径进行过滤。默认方式。
forward:表示通过内部转发到目标资源之前,进行过滤。
include:表示包含指定资源时,进行过滤。
error:表示发生异常时,进行过滤。

过滤器链:
当一个请求到达目标资源时,可能会经过多个过滤器。这就形成了过滤器链。过滤器链执行的顺序是:先经过<url-pattren>标签,在经过<servlet-name>标签。如果一个请求经过多个
<url-pattren>标签,按部署顺序执行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值