当前位置: 代码迷 >> JavaScript >> J2EE技术规范(4)――JSP基础
  详细解决方案

J2EE技术规范(4)――JSP基础

热度:306   发布时间:2012-12-26 14:39:28.0
J2EE技术规范(四)――JSP基础

一、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向你学习
  相关解决方案