• 1. JSP基本语法
  • 2. JSP执行过程*.jsp*.java*.classrequestresponse执行JSP parserJSDKservletservlet 分析器
  • 3. JSP执行过程JSP
  • 4. JSP执行过程示例default.html
    用户ID: 密 码:
    http://localhost:8088/l4/1/login.jsp?id=1&pwd=1 <% String user = request.getParameter("id"); String password = request.getParameter("pwd"); out.println("Recevied Parameters:" + user + ", " + password); %> Recevied Parameters:Tom,123 login.jsp
  • 5. 关于窗体(Form)
    …..
    method用来指定发送请求的方式为GET或POST action用来指定请求的目标,请求的目标可以是JSP、ASP、PHP、CGI程序等 至少一定要使用submit按钮 使用GET方法,您可以在网址看到相关的信息。 如:http://localhost:8080/ex1/index.jsp?id=1234&name=tom。但有可能看起来象一堆乱码。GET方法最多能发255个字符。 使用POST方法,发送的信息就不会出现在网址列上
  • 6. JSP文件servlet文件<%@ page import="java.util.*" %> <%@ page contentType="text/html; charset=gb2312" %> 你好,今天是 <% Date today=new Date(); %> <%=today.getDate()%>号, 星期<%=today.getDay()%> import java.util.*; response.setContentType("text/html; charset=gb2312"); out = pageContext.getOut(); out.write(“\r\n\r\n\r\n \r\n你好,今天是\r\n"); Date today=new Date(); out.print(today.getDate()); out.write("号,星期"); out.print(today.getDay()); out.write("\r\n \r\n\r\n"); 你好,今天是24号,星期四
  • 7. JSP语法JSP语法分为三种不同的类型 脚本元素(Scripting Element) 用来嵌入Java代码,这些Java代码将成为转换得到的Servlet的一部分 编译器指令(Directive) JSP指令用来从整体上控制Servlet的结构 。 例如: <%@ page import="java.io.*" %> 动作元素(Action) 动作用来引入现有的组件或者控制JSP引擎的行为。
  • 8. 脚本元素脚本元素有三种: Scriptlet格式:以<% 与 %>包括的元素 Declaration(声明):以<%! 与 %>包括的元素 Expression(表达式):以<%= 与 %>包括的元素 注释: <%-- This comment will not be visible in the page source --%>
  • 9. 脚本元素 : <% 与 %>介绍以<% 与 %>包括的部份可以包括Java程序语法,可以将程序逻辑分作数个段,例如: <% String str = request.getParameter("MSG"); if(str != null ) { %>

    Message 1 shown

    <% } else { %>

    Message 1 not shown

    <% } %>在转换为Servlet之后, 由<% 与 %>包括的部份主要集合为一个_jspService()方法,比如上面的Scriptlet会转换为:public void _ jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { String str = request.getParameter("MSG"); if(str != null) { out.write("\n"); out.write("

    Message 1 shown

    \n"); } else { out.write("\n"); out.write("

    Message 1 not shown

    \n"); } }注意到在JSP中<% 与 %>间宣告的变量,其转换为方法中的一个区域变量
  • 10. 脚本元素 : <% 与 %> 介绍如果要在Scriptlet内部使用字符“%>”,必须写成“%\>” <% code %>的XML等价表达是: <jsp:scriptlet> Code </jsp:scriptlet>
  • 11. 脚本元素 : <%!与 %>JSP声明用来定义插入Servlet类的方法和成员变量,其语法: <%! Java Code %><%! String str1; int i; %> <% str1 = "string_1!"; i = 10; String str2 = “string_2”; %>public final class Test_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { String str1; int i; public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { str1 = "string_1"; i = 10; String str2 = "string_2"; } }
  • 12. 脚本元素 : <%!与 %>由于Servlet被载入后,将会一直存在于JVM中,直到容器规定的存在期限过期,或是关闭服务器后才会清除Servlet产生的实例,所以使用<%!与% >宣告变量时,必须小心数据共享与执行绪安全的问题,预设上容器会使用同一个Servlet实例来服务来自不同使用者的请求,而 <%!与%>间宣告的变量对应至field成员,所以对于同一个实例来说,如果某个请求已设定了str1,而另一个请求要求显示str1,则第二个请求有可能显示的会是第一个请求所设定的值,因而使得显示的请求不正确。 注意在JSP中<% 与 %>间宣告的变量,其转换为方法中的一个区域变量,<%!与%>间宣告的变量则它在Servlet中会对应至一个field成员,如上例所示。
  • 13. 脚本元素 : <%!与 %><%! 与 %>之间也可以声明方法 <%! private String sayHelloto(String name) { return "Hello, " + name; } %>这个method可以在同一个JSP页面中呼叫,而它将在转换为Servlet之后,成为Servlet类别的一个方法。 <%! %>的XML等价表达方式为: <jsp:declaration> </jsp:declaration>
  • 14. 脚本元素 : <%= 与 %> 介绍<%= expression %>是一个表达式表示,其中expression是一运算表达式。 例如: <%= new java.util.Date() %> <%= expression %>它可以视作 <% out.println(expression); %> 的一个简单表示法。 例如:<% out.println(new java.util.Date()); %> 就可以写成<%= new java.util.Date() %> 注意这个表示法中最后不需要加上分号,例如这样就是错的语法: <%= new java.util.Date(); %>
  • 15. 指令元素( Directive Elements )在JSP 1.2中,有page、include与taglib三种指令元素 指令元素都包含在“<%@ %>”卷标里。
  • 16. 指令元素:page指令“page”指令用于定义JSP文件中的全局属性。语法格式如下: <%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class | package.*}, ..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] [ isErrorPage="true | false" ] %>
  • 17. 指令元素:page指令说明Info:用于设定目前JSP页面的基本信息,这个信息最后会转换为Servlet程序中使用getServletInfo()所取得的信息。 contentType:用于设定MIME型态及网页编码方式,这个部份的设定是给浏览器判断该以什么样的方式显示网页文件,在Servlet中,这个部份是对应于 HttpServletResponse对象的setContentType()方法: response.setContentType("text/html;charset=Big5"); Import: 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*    isThreadSafe:决定转译之后的Servlet是否为执行绪安全的,默认值是true,如果设定为false,则转译之后的Servlet会实现SingleThreadModel界面,不建议这么做。
  • 18. 指令元素:page指令说明autoFlush:用于设定至客户端的输出串流是否要自动出清,预设是true,如果设定为false,而缓冲区满了却还没将数据送出至客户端,将会产生异常。 buffer:用于设定至客户端的输出串流缓冲区大小,预设是8KB。 errorPage:用于设定当JSP执行错误而产生例外时,该由哪一个页面处理这个异常。 isErrorPage: 用以设定JSP页面是否为处理例外的页面,这个属性要与errorPage配合使用,将在之后介绍 language:用来指定Container使用哪一种语言的语法来编译JSP网页,言下之意是JSP可以使用其它的语言来撰写,不过这是就将来而言,目前只能使用Java的语法且是预设。 session:可设定是否使用session对象,预设是true。
  • 19. 指令元素:page指令说明pageEncoding: 用于指定JSP网页转为Servlet编译时采取的编码方式,如此在编译时才能正确的转换程序代码中设定的字符,例如如果JSP网页中包括gb2312中文字的话,必须设定<%@ page pageEncoding=“gb2312"%>,预设是操作系统的预先设定。 isELIgnored:用以设定JSP网页中是否忽略Expression Language,预设是false,如果设定为true,则Expression Language被会被转译,这个设定会推翻web.xml中的设定,Expression Language在JSP 2.0成为标准规格之一,在后介绍。 extends :可以用来指定JSP网页转译为Servlet程序之后,该继承哪一个类别,以Tomcat 5.5为例,预设是继承自org.apache.jasper.runtime.HttpJspBase,而HttpJspBase又继承自 HttpServlet,这个类别的继承架构则如下:   java.lang.Object    javax.servlet.GenericServlet     javax.servlet.http.HttpServlet      org.apache.jasper.runtime.HttpJspBase
  • 20. 指令元素:page指令例子<%@page info="JSP指令元素示范"%> <%@page contentType="text/html;charset=gb2312"%> <%@page import="javax.servlet.jsp.HttpJspPage, java.util.Date"%> <%= ((HttpJspPage)page).getServletInfo() %> current time : <%= new Date() %>
  • 21. 指令元素:page指令注意事项“<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 “”。 可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。 无论把“<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。
  • 22. 指令元素:include指令“include”向当前页中引入静态文件,引入时分析被引入文件的JSP元素。语法格式如下: <%@ include file="relativeURL" %> include.jsp: The current date and time are <%@ include file="date.jsp" %> date.jsp: <%@ page import="java.util.*" %> <%= (new java.util.Date() ).toLocaleString() %> Displays in the page: The current date and time are Aug 30, 1999 2:38:40
  • 23. 指令元素:include指令 在JSP技术中,可以在编译时期 include 一个网页,或是在执行时期include一个网页,include一个网页表示暂时将响应(Response)的权限交给被include的网页,在include的网页执行完毕或送出内容之后,响应的权限会再度回到要求 include的原网页。 选择在编译时期include网页的好处是效能,JSP引擎不用动态呼叫被include的网页,被include的网页被当作要求include的网页的一部份,可以使用指令元素include来于编译时期include网页。
  • 24. 指令元素:include指令<%@include file="header.inc"%>

    include sample

    <%@include file="foot.inc"%> header.inc include demo foot.inc include demo

    include示范

    使用指令元素include来进行include,其所牺牲掉的就是一些使用上的弹性,由于是在编译时期就决定了,所以只能以静态的方式来指定,而不能传送参数,所以使用指令元素include的对象通常是一个静态网页。

  • 25. 指令元素:taglib指令“taglib”用来定义页面上使用的自定义标签库和标签的前缀。语法格式如下: <%@ taglib uri="URIToTagLibrary“ prefix="tagPrefix" %>
  • 26. 指令元素:taglib指令<%@ taglib uri="/jstl-examples-taglib" prefix="c"%>
  • 27. 动作元素动作元素包括 等等。