JavaWeb高级编程(上) (4)

用于在JSP Servlet类的范围内声明一些东西,例如定义实例变量、方法或声明标签中的类。这些声明都将自动出现在自动生成的JSP Servlet类中,所以声明中定义的类实际上是JSP Servlet类的内部类。

使用脚本

<% 脚本 %>

使用表达式

<%= 表达式 %>

无论何时在JSP中包含直接使用类的Java代码,该JSP要么使用完全限定类名,要么在JSP文件中添加一条导入指令。
eg: <%@ page import="java.util.*,java.io.*" %>

包含其它JSP
eg: <%@ include file="/path/to/some/file.jsp" %>
<jsp:include page="/path/to/some/file.jsp" />
前一个是静态方式包含,后一个是动态方式。
在静态方式中,在JSP被转换成Java之前,编译器将使用被包含JSP文件的内容替换include指令。在此之后,合并后的JSP文件将被转换成Java代码并编译。
在动态方式中,被包含的文件将会被单独编译。在运行时,请求将会被临时地重定向到被包含的JSP,再将该JSP的结果输出到响应中,然后再将控制权返还给主JSP页面。
Java方法编译后的字节数目最大不能超过65534字节。
如果希望使用标签库中的标签,需要使用taglib指令引用该标签库:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

特性uri指定了目标标签库所属的URI命名空间,特性prefix定义了用于引用标签库中标签时使用的别名。

标签用于将当前JSP正在处理的一些请求转发至其他JSP。
eg:<jsp:forward page="/path/to/some/file.jsp"

使用该标签时,在该标签之前生成的任何响应内容仍然会被发送到客户端浏览器中。任何在此标签之后的代码都将被忽略。

标签<jsp:useBean>在页面中声明一个JavaBean,标签<jsp:getProperty>将从使用声明的bean中获取属性值,标签<jsp:setProperty>将用于设置该实例的属性,标签<jsp:plugin>用于在HTML页面中内嵌Java Applet。

WEB-INF目录中的文件都是禁止通过web访问的。可以将JSP文件添加到该目录中以防止用户通过浏览器访问这些JSP。

使用请求派发器将Servlet中的请求转发给JSP

private void funName(HttpServletRequest re,HttpServletREsponse res) throws ServletException, IOException { re.getRequestDispatcher("/WEB-INF/jsp/view/ticketForm.jsp") .forward(re,res); } 使用会话维持状态

HTTP请求自身是完全无状态的。从服务器的角度来说,当用户的Web浏览器打开第一个连接到服务器的套接字时请求就开始了,直到服务器返回最后一个数据包关闭连接时,该请求结束。此时,在用户的浏览器和服务器之间不再有任何联系,当下一个连接开始时,无法将新的请求与之前的请求关联起来。
使用会话可以:

维持请求和请求之间的状态

记住用户

启动应用程序的工作流

在Web会话理论中,会话是由服务器或Web应用程序管理的某些文件、内存片段、对象或者容器,它包含了分配给它的各种不同的数据。用户浏览器中不需要保持或维持任何此类数据。它们只有服务器或Web应用程序代码管理。容器和用户浏览器之间将通过某种方式连接起来。处于此原因,通常会话将被赋予一个随机生成的字符串,成为会话ID。第一次创建会话时,创建的会话ID将会作为响应的一部分返回到用户浏览器中。接下来从该用户浏览器中发出的请求都将通过某种方式包含该会话ID。当应用程序收到含有会话ID的请求时,它可以通过该ID将现有会话与当前请求关联起来。
其中需要注意的是如何将会话ID从服务器返回到浏览器中,并在之后的请求中包含该ID。目前有两种技术用于完成该任务:会话cookie和URL重写。
HTTP 1.1中给出解决方案:HTTP cookie。
cookie是一种必要的通信机制,可以通过Set-Cookie响应头在服务器和浏览器之间传递任意数据,并存储在用户计算机中,然后再通过请求头Cookie从浏览器返回到服务器。cookie可以有各种不同的特性:

Domain将告诉浏览器应该将cookie发送到哪个域名中
Path进一步将cookie限制在相对于域的某个特定URL中。每次浏览器发出请求时,它都将找到匹配该域和路径的所有cookie,然后将cookie随着请求一起发送到服务器。
Expires定义了cookie的绝对过期日期
Max-Age定义了cookie在过期之前所需的秒数
Secure表示浏览器将只会通过HTTPS发送cookie
HTTPOnly将把cookie限制在浏览器请求中,这样其他技术如:JavaScript和Flash将无法访问cookie。
在Java EE应用服务器中,会话cookie的名字默认为JSESSIONID。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxgps.html