Technorati 标签: jsp,java

一、jsp 脚本元素

    jasp 脚本元素允许你在jsp 页面插入代码,最后这些代码将会编译成 servlet。有以下三种格式:

格式 描述
<%= expression %> 编译后会插入到 servlet 的输出里(out.println()
<% code %> 编译后会插入到 servlet 的 _jspService 方法里,同过service()来调用
<%! code %> 编译后插入到 servlet 类体里,在所有方法之外

    这三种格式的使用会在后面详细谈到。

二、jsp 注释

    jsp支持两种注释方法,如下:

    1、html 注释

    jsp 页面中如果使用 html 注释,客户端浏览器查看 jsp 文件时。可以看到这些注释。语法格式如下:

    <!-- 注释的内容 –->

    2、jsp 注释

    使用 jsp 注释,jsp 引擎编译该页面时会忽略 jsp 注释(即客户端浏览器无法查看)。语法格式如下:

    <%-- 注释的内容 –>

三、jsp 表达式

    jsp 表达式是用来直接在输出里插入值,语法格式如下:

    <%= expression %>

    Demo:

Current time = <%= new java.util.Date() %>
    在jsp 表达式里还会经常使用到 jsp 预定义的变量(有时也叫做“内置对象”),主要有下面几个:
  • request, the HttpServletRequest
  • response, the HttpServletResponse
  • session, the HttpSession
  • out, the PrintWriter

    在此再给出另外一个Demo

    Yout hostname : <%= request.getRemoteHost() %>

四、jsp xml 语法表达式

    jsp xml 语法表达式,语法格式如下:

<jsp:expression>
Java Expression
</jsp:expression>
          注意 jsp xml 语法格式是大小写敏感的,换言之一定是使用小写的 jsp:expression。
    现在来给出一个Demo,如下将变量“Marty”传给 setFirstName()方法,赋值给对象的author 的firstName变量。
<jsp:setProperty name="author" property="firstName" value="Marty" />

    注意到,所以的数值值都应该包含在双引号(“”)或(‘’)里。另外有些属性也可是使用jsp 表达式来赋值,如下:

<jsp:setProperty name="user" property="id" value=’<%= "UserID" + Math.random() %>’/>
          如果你看不懂这些代码,并不要去担心,这些都会在后面详细谈到。下面列出允许使用java 表达式来赋值各种属性值:
元素名 属性名
jsp:setProperty name,value
jsp:include page
jsp:forward page
jsp:param value

    例子:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>jsp Expression</title>
</head>
<body>
    <h2>jsp expressions</h2>

Current time: <%=new java.util.Date()%>
Your hostname: <%=request.getRemoteHost()%>
Your session id: <%=session.getId()%>
The testparam form parameter: <%=request.getParameter("testparam")%>
    
</body>
</html>

    其输出如下:

image_thumb

   注意这里并没有设置testparam 的值,所以输出null。

五。jsp 脚本片段

    如果需要完成一些更复杂的逻辑,就需要用到 jsp 的脚本片段,可以允许你插入任意长度的代码。语法格式如下:

    <% Java Code %>

    在 jsp 脚本片段里,同样是可以访问 jsp 的内置对象(request, response, session, out, 等)。如下,输出查询的请求字符串:

<% 
    String queryData = request.getQueryString();
    out.println("Attached GET data: " + queryData); 
%>

    当然了,你也可以使用 jsp 表达式完成上述逻辑,如下:

    Attached GET data: <%= request.getQueryString() %>

    不过了,jsp 脚本片段可以完成许多 jsp 表达式完成不到的任务,当中就包括设置响应的头部和状态码,更新数据库,写 log等。如下设置了 response 的 contentType:

   <% response.setContentType("text/plain"); %>

六、jsp 声明

   jsp 声明可以用来声明一个变量或者一个类。语法格式如下:

   <%! Java Code%>

   Demo:

<%! private int accessCount = 0; %>
    Accesses to page since server reboot: 
<%= ++accessCount %>

七、jsp 里九个内置对象

对象 对应的类 描述
application javax.servlet.ServletContext 服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
config javax.servlet.ServletConfig 该实例代表该JSP 的配置信息
exception java.lang.Throwable 该实例代表其他页面中的异常和错误
out javax.servlet.jsp.JspWriter 用来向客户端输出数据。out对象用于各种数据的输出。
page java.lang.Object 对应this关键字。JSP网页本身
pageContext javax.servlet.jsp.PageContext 该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据
request javax.servlet.http.HttpServletRequest 封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息(表单变量)
response javax.servlet.http.HttpServletResponse 对客户的请求做出动态的响应,向客户端发送数据。
session javax.servlet.http.HttpSession 在第一个JSP页面被装载时自动创建,完成会话期管理。