一、JSP概览
a、动态内容模版
b、使用定制的Java代码扩展HTML
c、被编译成Servlets
d、可将工作划分为内容制作和程序开发
(1)JSP请求处理
JSP请求由名为JSPServlet的WebLogic Server Servlet处理,包括:
a、将JSP转化为Servlet
b、将转化后的Servlet编译为class文件
c、执行JSP
(2)应用设计模型
A、JSP规范描述了一些应用设计模型
B、这四个模型是:
a、Simple Model(简单模型)
b、Forward Delegation Model
c、Include Delegation Model
d、Decouple Model
二、JSP语法
有两种JSP语法形式:
(1)标准语法
(2)XML语法
三、JSP Scriptlets
(1) 使用<%和%>添加包含可执行Java代码的scriptlets
(2)Sciptlets可以使用流控制
(3)在给定JSP中所有的Sciptlets结合起来必须是一个完整的Java代码逻辑块
我们看一下两个示例:
if语句使用的示例:
<% if (userIsLogged){%> <H1>Welcome</H1>you are logged in <%}else{%> <H1>Waring</H1>you must log in <%}%>浏览器输出:
JSP将根据用户是否登录问候用户
For循环语句使用的示例:
<% for(int j=3;j<=3;j<=1;j--){ %> <H<%=j%>>jsps are great!!! </H<%=j%>> <%}%>浏览器输出:
Jsps are great!!!
Jsps are great!!!
Jsps are great!!!
四、JSP Expressions (表达式)
(1)使用<%=和%>执行Java表达式
(2)任何一个Java表达式都是有效的
(3)Expressions的内容通常返回到客户端
Expressions引用变量,方法和对象:
五、JSP Declarations (声明)
(1) 使用<%!和%>声明类级的变量和方法
(2)这能够被整个JSP代码引用
声明变量和方法的示例:
<%! double[] price={12.3,23.4,34.5}; //声明一个double的数组和返回doubles的方法 double getTotal(){ double total=0.0; for(int j=0;j<prices.length;j++){ total+=prices[j]; //这能够从expressions,scriptlets和其它声明中引用 return total; } } %>
五、JSP Actions
(1)Action是在请求时执行的JSP命令
(2)下表列出扩展JSP功能的六个Action标签
使用useBean action实例化一个JavaBean的示例:
<jsp:useBean id="shoppingCart" class="com.bea.Shoopingcart"/> <% shoppingCart.addItem(new CD("U2"));%> <%=shoppingCart.getCount()%>
六、JSP Directives
(1)Directives是在编译时执行的JSP命令
(2)下面这三个directives能够改变JSP的行为
Directives使用的示例:
<%@page import="mypackge.myClassA"%> 引用一个类 <%@page errorPage="myErrowPage.jsp"%> 当异常时调用该JSP页 <%page extends="myJSPSuperclass"%> 所要继承的类 <%@include file="myHeaderFile.html"%>包含一个头文件 <%@taglib uri=myCustomTags.tld prefix=custom%> 加载自己定制的标签
(3)八个内置对象:
a、Request 对象封装了客户端到服务器的数据。这些数据有客户提交的数据,也有客户端的一些配置信息。比如客户的IP,主机名等。通过getAttribute方法和setAttribute方法页面获得服务器的数据和向request添加数据。可以利用getParameter查看请求参数。也可以查看请求类型,请求的HTTP头等。
b、Respose 对象从服务器到客户端的响应封装。用来将服务器的内容写入客户端。常用的是getWriter方法。在客户端打印数据。
c、Out 对象 用来向客户端打印数据。它就像是response的一支笔。执行具体的打印动作。
d、Session 对象提供服务器和客户端的会话。一个session就像是一次对话。对话的内容是用户的状态和一些认证信息。
e、Application 对象。就是一个公用的会话。与session相对。session是每个用户独有的。Application 是这些用户共享的一些数据。
f、Config 提供servlet的一些配置信息。仅在当前页有效。
g、pageContext 提供存取所有关于JSP程序执行时所需的属性和方法。如session application config out。有效范围为当前页。这个就像是这些对象的一个大容器。
h、Page 相当于java类中的this。用处不大。表示当前页面。
(4)使用内置对象
a、HttpServletRequest
<% String account=request.getParameter("accountNumber");%> Your account number is<%=account%>
b、ServletContext
<% String table=application.getInitParameter(tableName); String sql="SELECT * FROM"+tableName; ResultSet rs=Statement.executeQuery(sql);%>
c、ServletConfig
<p> This Web Application requires Version <%=config.getInitParameter("WLS-Version")%> To run correctly.<p>
(5)对象作用范围
a、pageContext,request,session和application对象都提供了方法,用于在其作用范围内存储对象。
b、范围定义了它们的存货周期和JSPs之间的访问性
对象 |
生存周期 |
在哪可访问 |
pageContext |
到将response返回到用户或将request传递到一个新页面为止 | 当前页面 |
request | 到将response返回到用户为止 | 当前页面和所有被包含或被传递的页面 |
session | 与用户的会话相同 | 当前请求和任何来自浏览器后续请求(在session生存时间内) |
application | Web应用生存周期 | 当前和所有后续向同一个Web应用发出的请求 |
(6)在作用范围内存取对象
A、在对象作用范围内提供以下方法存取对象:
a、setAttribute(String,Object)将一个对象关联到一个字符串,之后可以读取
b、Object getAttribute(String)通过名字读取该对象
c、Enumeration getAttributeNames()取得在作用范围中所有对象的名字
d、void removeAttribute(String)删除一个属性
(7) 在JSP页之间共享request
A、几个JSP页能通过使用request对象在JSP页之间共享对象,从而处理一个请求。
在request上下文中存储对象的示例jsp1.jsp:
<% Employee employee1=new Employee(); employee1.setName("John Doe"); request.setAttribute("John",employee);%> <jsp:forward page="jsp2.jsp"/>
从request上下文中取回对象的示例jsp2.jsp:
<%=((Employee)request.getAttribute("John").getName())%>
(8)、在JSP中使用JavaBeans
A、在业务逻辑或模型数据能够在JSP之外以JavaBean实现
B、JavaBeans遵循以下这些规则
a、一个无变量的构造方法
b、每个属性都有ser和get方法
c、应该可序列化
构造Employee的JavaBean简单示例:
public class EmployeeJavaBean implements Serializable{ String name;double salary; public EmployeeJavaBean(){name=null;salary=0.0} public void setName(String n){name=n;} public String getName(){return name;} public void setSalary(double s){salary=s;} public double getSalary(){return salary;} }
C、在JSP中使用useBean创建JavaBean实例
D、通过使用serProperty和getProperty访问JavaBean的变量:
实例化,初始化和使用JavaBean标签的示例:
<jsp:useBean id="employee" class="mypack.EmployeeJavaBean"> <jsp:setProperty name="employee" property="name" value="John Doe"/> </jsp:useBean> <jsp:setProperty name="employee" property="salary" value="20000"/> Employee:<jsp:getProperty name="employee" property="name">也可以像下面这样使用get和set方法:
<% employee.setSalary(employee.getSalary()+10000);%> salary<%=employee.getSalary()%>
E、在默认情况下,你的JavaBean在page作用范围内存放
F、可以使用scope属性设置它的范围为page,request,session或application
存储对象在request上下文中的示例jsp1.jsp:
<jsp:useBean id="employee" class="myPack.EmployeeJavaBean" scope="request"/> <jsp:forward page="jsp2.jsp"/>
从request上下文中取回对象的示例jsp2.jsp:
<jsp:useBean id="employee" class="mypack.EmployeeJavaBean" scope="request"/>
JSP的另外内容,我们在接下来的博客中,继续完善。
- 2楼lfmilaoshi7小时前
- 博客没有全局观n米老师
- Re: yi_zz7小时前
- 回复lfmilaoshin我也觉得有点零散。
- 1楼llhhyy1989昨天 08:17
- 温习了一遍。对jsp的执行过程那副图有了更深的理解。呼呼,tomcat具有执行静态页面和动态jsp的能力。因为jsp最终是转化成html展示浏览器的,所以只用tomcat即可,而不用tomcat+apache。当然很多网站大部分还是使用tomcat+apache的。嘻嘻。
- Re: yi_zz昨天 21:34
- 回复llhhyy1989n向你学习