JSP入门

xiaoxiao2021-02-28  135

JSP


JSP JSP概念 JSP处理JSP生命周期JSP编译JSP初始化JSP执行JSP清理 JSP语法 脚本程序JSP声明JSP表达式JSP指令JSP常量JSP隐式对象 JSP请求 JSP post方法JSP 读取表单数据JSP过滤器 Servlet过滤器方法webxml文件中的JSP过滤器映射webxml配置各节点说明 JSP Cookie Servlet Cookies方法使用JSP设置Cookies使用JSP读取Cookies使用JSP删除Cookies JSP Session JSP Session方法删除Session数据


JSP概念

JSP处理

就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。

JSP生命周期

编译阶段: servlet容器编译servlet源文件,生成servlet类初始化阶段: 加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法执行阶段: 调用与JSP对应的servlet实例的服务方法销毁阶段: 调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

JSP编译

当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

解析JSP文件。将JSP文件转为servlet。编译servlet。

JSP初始化

容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了

public void jspInit(){ // 初始化代码 }

JSP执行

当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。 _jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数

void _jspService(HttpServletRequest request, HttpServletResponse response) { // 服务端处理代码 }

_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。

JSP清理

jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写 jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

public void jspDestroy() { // 清理代码 }

JSP语法

脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。 脚本程序的语法格式

<% 代码片段 %>

JSP声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。 JSP声明的语法格式:

<%! declaration; [ declaration; ]+ ... %>

JSP表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。 由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。 表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。 JSP表达式的语法格式:

<%= 表达式 %>

JSP指令

JSP指令用来设置与整个JSP页面相关的属性。 JSP指令语法格式:

<%@ directive attribute="value" %> 指令描述<%@ page … %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等<%@ include … %>包含其他文件<%@ taglib … %>引入标签库的定义,可以是自定义标签

JSP常量

Boolean:true and falseInteger:与Java中的一样Floating point:与Java中的一样String:以单引号或双引号开始和结束。 ” 被转义成 \”,’被转义成 \’, \ 被转义成\Null:null

JSP隐式对象

JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。

对象描述requestHttpServletRequest类的实例responseHttpServletResponse类的实例outPrintWriter类的实例,用于把结果输出至网页上sessionHttpSession类的实例applicationServletContext类的实例,与应用上下文有关configServletConfig类的实例pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问page类似于Java类中的this关键字ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象

JSP请求

JSP post方法

一些敏感信息,如密码等我们可以通过POST方法传递,post提交数据是隐式的。 JSP使用getParameter()来获得传递的参数,getInputStream()方法用来处理客户端的二进制数据流的请求。

JSP 读取表单数据

getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration(枚举)。调用hasMoreElements方法来确定何时停止使用nextElement方法来获取每个参数的名称getInputStream():调用此方法来读取来自客户端的二进制数据流。

JSP过滤器

过滤器将会被插入进web.xml文件中,然后映射servlet、JSP文件的名字,或URL模式。部署描述文件web.xml可以在 < Tomcat-installation-directory >\conf 目录下找到。 当JSP容器启动网络应用程序时,它会创建每一个过滤器的实例,这些过滤器必须在部署描述文件web.xml中声明,并且按声明的顺序执行。

Servlet过滤器方法

一个过滤器就是一个Java类,它实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法:

public void doFilter (ServletRequest, ServletResponse, FilterChain) 每当request/response要通过过滤链时容器会调用这个方法,因为客户端请求链尾的资源public void init(FilterConfig filterConfig) 容器调用这个方法来表明一个过滤器被安置在服务中public void destroy() 容器调用这个方法来表明一个过滤器正在从服务中移除

web.xml文件中的JSP过滤器映射

过滤器被定义,然后映射成一个URL或JSP文件名,与servlet被定义然后映射的方式差不多。在部署描述文件web.xml中,使用< filter >标签来进行过滤器映射:

<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

上述过滤器将会应用在所有servlet和JSP程序中,因为我们在配置中指定了” /*”。您也可以指定一个servlet或JSP路径,如果您只想要将过滤器应用在少数几个servlet或JSP程序中的话。 现在,像平常一样访问servlet或JSP页面,您就会发现服务器日志中产生了关于此次访问的记录。您也可以使用Log4J.xml记录器来把日志记录在其它文件中。

web.xml配置各节点说明

< filter >指定一个过滤器。 < filter-name >用于为过滤器指定一个名字,该元素的内容不能为空。< filter-class >元素用于指定过滤器的完整的限定类名。< init-param >元素用于为过滤器指定初始化参数,它的子元素< param-name >指定参数的名字,< param-value >指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。< filter-mapping >元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径 < filter-name >子元素用于设置filter的注册名称。该值必须是在< filter >元素中声明过的过滤器的名字< url-pattern >设置 filter 所拦截的请求路径(过滤器关联的URL样式)< servlet-name >指定过滤器所拦截的Servlet名称。< dispatcher >指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个< dispatcher >子元素用来指定 Filter 对资源的多种调用方式进行拦截。< dispatcher >子元素可以设置的值及其意义 REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过 - RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

JSP脚本通过request对象中的getCookies()方法来访问这些cookies,这个方法会返回一个Cookie对象的数组。

Servlet Cookies方法

public void setDomain(String pattern) 设置cookie的域名,比如w3cschool.cnpublic String getDomain() 获取cookie的域名,比如w3cschool.cnpublic void setMaxAge(int expiry) 设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间public int getMaxAge() 获取cookie有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止public String getName() 返回 cookie的名称,名称创建后将不能被修改public void setValue(String newValue) 设置 cookie的值public String getValue() 获取cookie的值public void setPath(String uri) 设置cookie 的路径,默认为当前页面目录下的所有URL,还有此目录下的所有子目录public String getPath() 获取cookie 的路径public void setSecure(boolean flag) 指明cookie是否要加密传输public void setComment(String purpose) 设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用public String getComment() 返回描述cookie目的的注释,若没有则返回null

使用JSP设置Cookies

创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。

// 名称和值中不能包含空格以及[ ] ( ) = , " / ? @ : ; Cookie cookie = new Cookie("key","value");

设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。

cookie.setMaxAge(60*60*24);

将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies。

response.addCookie(cookie);

使用JSP读取Cookies

想要读取cookies,您就需要调用request.getCookies()方法来获得一个javax.servlet.http.Cookie对象的数组,然后遍历这个数组,使用getName()方法和getValue()方法来获取每一个cookie的名称和值。

使用JSP删除Cookies

删除cookies非常简单。如果您想要删除一个cookie,按照下面给的步骤来做就行了:

获取一个已经存在的cookie然后存储在Cookie对象中将cookie的有效期设置为0将这个cookie重新添加进响应头中

JSP Session

JSP利用servlet提供的HttpSession接口来识别一个用户,存储这个用户的所有访问信息。 默认情况下,JSP允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要显式地关掉它,通过将page指令中session属性值设为false来实现,就像下面这样:

<%@ page session="false" %>

JSP引擎将隐含的session对象暴露给开发者。由于提供了session对象,开发者就可以方便地存储或检索数据。

JSP Session方法

public Object getAttribute(String name) 返回session对象中与指定名称绑定的对象,如果不存在则返回nullpublic Enumeration getAttributeNames() 返回session对象中所有的对象名称public long getCreationTime() 返回session对象被创建的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起public String getId() 返回session对象的IDpublic long getLastAccessedTime() 返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起public int getMaxInactiveInterval() 返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开public void invalidate() 将session无效化,解绑任何与该session绑定的对象public boolean isNew( 返回是否为一个新的客户端,或者客户端是否拒绝加入sessionpublic void removeAttribute(String name) 移除session中指定名称的对象public void setAttribute(String name, Object value) 使用指定的名称和值来产生一个对象并绑定到session中public void setMaxInactiveInterval(int interval) 用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效

删除Session数据

移除一个特定的属性: 调用public void removeAttribute(String name) 方法来移除指定的属性。

删除整个会话: 调用public void invalidate() 方法来使整个session无效。

设置会话有效期: 调用 public void setMaxInactiveInterval(int interval) 方法来设置session超时。

登出用户: 支持servlet2.4版本的服务器,可以调用 logout()方法来登出用户,并且使所有相关的session无效。

配置web.xml文件: 如果使用的是Tomcat,可以向下面这样配置web.xml文件:

<session-config> <session-timeout>15</session-timeout> </session-config>

超时以分钟为单位,Tomcat中的默认的超时时间是30分钟。 Servlet中的getMaxInactiveInterval( ) 方法以秒为单位返回超时时间。如果在web.xml中配置的是15分钟,则getMaxInactiveInterval( ) 方法将会返回900。


转载请注明原文地址: https://www.6miu.com/read-20308.html

最新回复(0)