web 服务器如何使用 JSP 创建 web 页面
- 作为正常的页面,你的浏览器发送一个 HTTP 请求到 web 服务器。
- web 服务器承认一个 JSP 页面的 HTTP 请求,并将其转发给一个 JSP 引擎。这是通过使用 URL 或 JSP 页面实现的,该 JSP 页面是以.jsp结尾而不是以 .Html 结尾的。
- JSP 引擎从磁盘加载 JSP 页面并将其转换为一个 servlet 的内容。这种转换是非常简单的,所有模板文本转换为 println()语句,所有 JSP 元素转换为 Java 代码实现页面的相应的动态行为。
- JSP 引擎编译 servlet 到一个可执行的类中,并将原始请求转发给一个 servlet 引擎
- 调用 servlet 引擎的 web 服务器的一部分加载 Servlet 类并执行它。执行期间,Servlet 产生一个 HTML 格式的输出,servlet 引擎将该输出传递到 HTTP 响应内的 web 服务器中。
- web 服务器将 HTTP 响应以静态 HTML 内容的形式转发到你的浏览器中。
- 最后 web 浏览器处理 HTTP 响应中的动态生成的 HTML 页面,就好像它是一个静态页面
总结: jsp代码会被转换会一个servlet
JSP语法
<%! 声明变量或者定义方法%>
//也可使用XML代替
<jsp:declaration>
code fragment
</jsp:declaration>
<% 逻辑代码%>
//也可使用XML代替
<jsp:scriptlet>
code fragment
</jsp:scriptlet>
<%= 表达式%>
//也可使用XML代替
<jsp:expression>
expression
</jsp:expression>
JSP指令标签Directives
<%@page...%>//定义 page-dependent 属性,比如脚本语言,错误页面和缓冲要求
<%@include...%>//包括转换阶段的一个文件
<%@ include file="relative url" >//你可以在你的 JSP 页面中的任何位置编写 include 指令。包含指令中的文件名实际上是一个相对 URL。如果你只指定一个文件名而没有相关路径,JSP 编译器就会假定文件与你的 JSP 在同一个目录下。
<%@taglib...%>//声明一个在页面中使用的标签库,包含自定义操作。
<%@ taglib uri="uri" prefix="prefixOfTag" >//uri 属性值解析为容器理解的一个位置,prefix 属性通知容器什么标记是自定义操作。
###Page指令的相关属性
buffer //指定一个输出流的缓冲模型。
autoFlush //控制 servlet 输出缓冲区的行为。
contentType //定义了字符编码方案。
errorPage //定义了 Java 未检查运行时异常报告的另一个 JSP 的 URL。
isErrorPage //表明这个 JSP 页面是否是由另一个 JSP 页面的 errorPage 属性指定的 URL
extends //指定一个超类,生成的 servlet 必须扩展
import //指定在 JSP 中使用的包或类的列表,正如 Java 导入声明为 Java 类所做的相同。
info //定义一个字符串,可以访问 servlet 的 getServletInfo()方法。
isThreadSafe //为生成的 servlet 定义线程模型。
language //定义了在 JSP 页面中使用的编程语言。
session //指定 JSP 页面是否参与 HTTP 会话
isELIgnored //指定 JSP 页面中的 EL 表达式中是否将被忽略
isScriptingEnable // 决定是否允许使用脚本元素。
JSP操作Actions
< jsp:action_name attribute=”value”>
jsp:include//当请求页面时,包含一个文件
<jsp:include page="relative URL" flush="true" />//布尔属性决定了包含的资源在被包含之前其缓冲区是否刷新
jsp:useBean//发现或实例化一个 JavaBean
<jsp:useBean id="name" class="package.class" />//class指定 bean 的全部包名。
jsp:setProperty//JavaBean 的属性集
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>
jsp:getProperty//将 JavaBean 的属性嵌入到输出中
<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>
jsp:forward//将请求转发给一个新页面
<jsp:forward page="Relative URL" />
jsp:plugin//生成浏览器-特定代码,为 Java 插件创建 OBJECT 或 EMBED 标签
//Java 组件可以是一个 Applet 或一个 JavaBean。
jsp:element//动态的定义 XML 元素
jsp:attribute//定义了动态定义的 XML 元素的属性
jsp:body//定义了动态定义 XML元素的 body
jsp:text//用于在 JSP 页面和文档中编写模板
JSP九大对象
request//这是与请求关联的HttpServletRequest对象
//每次客户端请求一个页面时,JSP 引擎都会创建一个新的对象来表示那个请求。
//Request 对象提供方法来获取 HTTP 头信息,包括表单数据,cookies,HTTP 方法等
reponse//这是与客户端响应关联的HttpServletReponse对象
//当服务器创建 request 对象时,它也创建了代表客户端响应的对象。
//Response 对象还定义了接口,可以处理创建的新的 HTTP 头。通过这个对象 JSP 程序员可以添加新的 cookies 或日期 stamps,HTTP 状态码等
out//这是用于向客户端发送输出的PrintWriter对象
session//这是与请求关联的HttpSession对象
application//这是与应用程序剩下文关联的ServletContext对象
//这个对象是 JSP 页面整个生命周期的一个代表。当初始化 JSP 页面时,这个对象被创建,当 JSP 页面由 jspDestroy()方法删除时,该对象也会被删除。
//通过为 application 添加属性,你可以确保生成 web 应用程序的所有 JSP 文件可以访问它
config//这是与页面关联的ServletConfig对象
//config.getServletName();这返回 servlet 的名称,该名称是包含在定义在 web - inf \ web.xml 文件中< servlet-name >元素中的字符串。
pageContext//这个封装特使用特定服务器的特性。如更高的性能jspwriter
page//这是this的一个简单同义词。是用来调用由转换的servlet类定义的方法
Exception//Exception对象允许指定的JSP访问异常数据
控制语句的例子
//if语句
<%if(day == 1 | day == 7 ){%>
<p>Today is Weekend</p>
<%} else{%>
<p>Today is not weekend</p>
<%}%>
//for循环语句
<%for(fontSize=1;fontSize<=3;fontSize++){%>
<font color="green" size="<%=fontSize%>">
JSP Tutorial
</font><br />
<%}%>
JSP过滤器
Servlet 和 JSP 过滤器都是 Java 类,可以在 Servlet 和 JSP 编程中用于以下目的:
- 在请求访问后端资源之前从客户端拦截请求。
- 在响应发送回客户端之前从服务器操作响应。
<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>
-----------------------------------------------------------
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Implements Filter class
public class LogFilter implements Filter {
public void init(FilterConfig config)
throws ServletException{
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException {
// Get the IP address of client machine.
String ipAddress = request.getRemoteAddr();
// Log the IP address and current timestamp.
System.out.println("IP "+ ipAddress + ", Time "
+ new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ){
/* Called before the Filter instance is removed
from service by the web container*/
}
}
JSP-Cookies
- 服务器脚本向浏览器发送的一系列cookies。例如姓名、年龄、身份证号码等。
- 浏览器将这个信息存储在本地机器上,以供将来使用。
- 下次当浏览器向web服务器发送任何请求时,将这些 cookies 信息发送给服务器,服务器使用这些信息来识别用户或可能用于其他目的。
直接用法:添加和获取Cookies对象
cookies = request.getCookies();//返回的是Cookie数组
response.addCookie( cookie );