java web 笔记二

来源:互联网 发布:c语言 实例 pdf 编辑:程序博客网 时间:2024/06/07 06:11

jsp全称: java server page

                                                                                                                                                

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字节码文件

加载到容器

由容器实例化

初始化阶段相关的方法是jspInit()

请求到达,调用服务器阶段相关的方法是_jspService()

销毁阶段相关的方法是jspDestroy()

 

 

JSP语法和语义:

1.      jsp网页主要由元素(element)和模版数据(TemplateData)两个部分组成

模版数据是jsp的静态部分,web容器不处理

元素则是必须由web容器解释

元素都是以xml作为语法基础,并且大小写要一致

 

2.      web容器支持两种不同格式的jsp语法

普通格式和xml兼容格式

普通jsp语法是设计给开发者用的

xml兼容jsp语法是设计用来容易被开发工具使用的

 

jsp的脚本元素:

声明:<%! %> 定义jsp类的成员变量、静态变量和方法

 

脚本:<%    %> 丰富_jspService()方法,在脚本中定义的变量全部是_jspService()方法内的局部变量。

 

表达式:<%=   %>  注意里面不能有分号; 丰富_jspService()方法,相当于out.print();向页面输出内容。

 

 

 

jsp注释:

1.      jsp注释: <%--   --%> 容器不翻译,只在源代码中可见,最为安全。

2.      html注释:<!--   -->  html注释会通过out.print 输出到客户端。客户端和服务器均可见,最不安全。

3.      java注释: // /* */ 给java代码书写的注释,只在服务器端可见。

 

jsp隐式对象:

jsp引擎翻译的jsp类中,在_jspService()中会定义九个变量,并将这些变量做初始化。由于脚本和表达式实在丰富_jspService()方法,所以可以直接使用这些变量。这些变量称为jsp的隐式对象。

 

jsp隐式对象有九个:

四个作用域:

1.      pageContext:只在当前JSP页面有效

2.      request:作用于请求

3.      session:作用于会话

4.      application:作用于全局

 

两个输出:

1.      response:响应对象

2.      out:打印输出流

 

page:当前对象

config:配置对象

exception:异常对象

 

 

 

jsp指令:

page: 页面指令,功能是设定整个jsp页面属性和相关功能

<%@page contentType="text/html;charset=utf-8" pageEncoding="utf-8"import="java.util.Date"%>

contenType:设置MIME类型和编码集

pageEncoding:设置编码集,mime类型默认为text/html

import:导入该JSP类中所用到的类,如果需要导入多个类,中间以逗号分开。

session:默认为true。表示访问该jsp页面时,会产生会话对象。

errorPage:表示当前jsp页面如果抛出了运行异常,则跳转指定出错页面

isErrorPage:表示该jsp页面为出错处理页面,定义了exception隐式对象,接收异常

 

 

 

include: 表示在JSP编译时插入一个包含文本或代码的文件

<%include file=””%> 叫做指令包含,也叫静态包含。将本身的jsp和包含的jsp放在一起编译,形成一个class文件,所以两个页面不能存在同名变量,指令包涵也只能包含文件

<jsp:include page=”” flush=’true’>

         <jsp:paramname = ‘aaa’ value=’fff’>//可以包含参数

 

</jsp:include>叫做动作包涵,在请求时发生,本身jsp包涵的是另一个jsp执行的结果。形成2个class文件,所以两个页面可以存在同名变量。动作包含可以包含文件,也可以包含servlet输出结果。同时可以传递参数

 

将客户端所发出来的请求,从一个jsp网页转发到另一个jsp页面:

<jsp:forward page=’relativeURL’>

 

 

taglib:

标签指令

建立标签库

文件名为 name.tld 注意后缀必须是tld 但是实质类型依旧是xml

<?xml version="1.0"encoding="utf-8"?>

<taglib>

         <tlib-version>1.2</tlib-version>//必须添加

         <jsp-version>1.2</jsp-version>//必须添加

         <uri>tagTest</uri>//表示别名,在导入的时候就不需要路径名了

         <tag>

                   <name>forward</name>

                   <tag-class>com.lovo.mark.ForWardTag</tag-class>

                   <attribute>//为标签中添加属性,可以传参

                            <name>page</name>

                            <required>true</required>//表示使用该标签必须添加该属性,否则报错

                   </attribute>

         </tag>

</taglib>

导入标签库:

tagTest

<%@taglib uri="/WEB-INF/myTag.tld"prefix="mm" %>

<%@taglib uri="tagTest "prefix="mm" %>

 

标准标记库:JSTL

 

 

 

 

 

 

 

 

 

 

过滤器:

一个中间组件,用于拦截源数据和目的数据之间的消息

过滤二者之间传递的数据

所有匹配到该URL定义的请求,都要被filter-Name中定义的过滤器过滤。

url-pattern可以替换为servlet-name 表示对该servlet的访问都要被filter-name中定义的过滤器过滤

在<filter-mapping>标签中的<url-pattern>子标签,可以加入<url-pattern>标签,也可以加入<servlet-name>标签,表示针对某个指定名称的servlet过滤。

<filter>

   <filter-name>index</filter-name>

   <filter-class>com.lovo.util.IndexFilter</filter-class>

 </filter>

 <filter-mapping>

   <filter-name>index</filter-name>

   <url-pattern>/jsp/index.jsp</url-pattern>

 </filter-mapping>

用注解方式@webfilter(路径名)

 

 

过滤器类型:

REQUEST:表示直接请求,按请求路径进行过滤。默认方式

FORWARD:表示通过内部转发到达目标资源之前进行过滤。

INCLUDE:表示包含指定资源时,进行过滤

ERROR:表示发生异常时,进行过滤

在<filter-mapping>标签中加入子标签<dispatcher></ dispatcher >来选择过滤类型

 

 

配置过滤器链:

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

        

 

 

 

EL表达式:

${parameterName}

取值优先从小范围开始,如果要取出发范围的需要如 ${sessionScope.Name}

${键名}  先从小作用域中查找,如果小作用域中有改建对应的值,则取出,并忽略其他作用域。如果小作用域中没有该键,那么再去大作用域中查找。

所以,可以通过作用域,指定需要查找绑定对象。

${requestScope.keyName}

${sessionScope.keyName}:表示在session会话范围中查找对象,如果没有找到。也不会去其他作用域查找

 

也能做运算

${3+2} 输出5

${3>5} 输出false

 

<%    UserBeanbean = new UserBean("张三",Date.valueOf("1988-01-01"));

                   request.setAttribute("us",bean);

         %>

         ${us}<br>

         ${us.userName}

${bean.dog.name} //bean里面有其他的实体bean

取出实体bean的属性实际上也是调用 get方法所以实体bean需要规范,因为是调用get方法,所以属性首字母是大写的话,用el调用需要把大写改为小写。

通过el表达式,从作用域对象中,取出属性时,是调用get方法完成的。所以就算该实体类没有属性,但是提供了get方法,同样可以通过EL表达式取出属性值。另外,实体类的属性,必须规范,一般来说,属性名前两个字母都不能是大写字母。

 

 

<welcome-file-list>

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

<welcome-file-list>

   <welcome-file>index.html</welcome-file>

   <welcome-file>index.htm</welcome-file>

   <welcome-file>index.jsp</welcome-file>

   <welcome-file>default.html</welcome-file>

   <welcome-file>default.htm</welcome-file>

   <welcome-file>default.jsp</welcome-file>

 </welcome-file-list>

0 0
原创粉丝点击