JSP
------------------------------
Module 1: Introduction to JavaServer Pages
* Compare Servlets, and JSP
Benefits of Java Server Pages
* Use XXX.jsp and xxxx.html: usage is same
* Run (Execute) XXX.jsp: Jsp is servlet
translate XXX.jsp to -> XXXXX.java (Servlet) -> compile to XXXXX.class : all done by Server
-> Tomcat5.0
->webapps
->work ( only for reference, please don't change anything)
->Catalina
-> localhost
->yourWebApp
->org->apache->jsp
-> XXXXX.java
-> XXXXX.class
----------------------------------------------------------------------------------------------------------
Module 2: Creating, Deploying and Executing a JSP
* Create JSP
write XXX.jsp
* JSP element syntax
jsp语法:
1.JSP代码注释
使用 // 对单行java代码进行注释
使用 /* */方式对多行java代码注释
使用 /** */方式对多行java代码进行注释,文档型的(jsp中不常用)
使用<%-- --%>对多行代码进行注释
使用<!-- -->对多行HTML代码进行注释
2. Directives: 指令 <%@ %>
<1>* page directive:
<%@ page contentType="text/html;charset=utf-8" %>
or <jsp:directive.page contentType="text/html" />
<2>* include directive <%@ include file="banner.html" %>
or <jsp:directive.include file="banner.html" />
<3>* taglib directive 标记库指令<%@ taglib uri="" prefix="" %>
3. Declarations:声明 <%! %> declare member variables, or methods声明成员变量,或方法
注意成员变量的声明后有 ;
declare member variables: <%! String greetingStr="Hello, World!"; %>
or <jsp:declaration> String greetingStr="Hello, World!"; </jsp:declaration>
declare methods:
<%!
public void print(){
greetingStr="welcome";
int i=0;
}
%>
4. Expressions:表达式 <%= %> for display, send to client(browser)输出给客户端
<%= greetingStr %> 注意无 ;
or <jsp:expression> greetingStr</jsp:expression>
5. Scriplet:脚本 <% %>
<% greetingStr+=" Best wishes to you! "; %>
or <jsp:scriptlet> greetingStr+=" Best wishes to you!"; </jsp:scriptlet>
<% String str="ok"; %> //local variable声明局域变量
6. Action:动作 <jsp:forward page="/welcome.jsp" />
<jsp:include page="/welcome.jsp" />
* Deploy JSP
-> yourWebApp
-> WEB-INF
-> web.xml
-> classes
-> XXX.jsp
-> xxx.html
-> jspDir
-> xxxx.jsp
Review:
1. jsp: html, servlet
2. Create JSP
write XXX.jsp
<%@ %> 指令(page include taglib)
<%! %> 声明(声明变量和方法,全局的)
<%= %> 表达式 (做java的输出)
<% %> 脚本
<jsp:forward /> 动作(跳转)
<jsp:include /> 动作(引入页面)
3. Deploy JSP : position same as XXX.HTML
----------------------------------------------------------------------------------------------------
Module 3 Scripting
1. Directives: <%@ %>
* page directive:
<%@ page language="java" import="packageName.className"
session="false|true" autoFlush="false|true" isThreadSafe="false|true"
info="text" errorPage="relativeURL" contentType="mimeType;charset=characterSET"
isErrorPage="true|false" pageEncoding="pginfo" %>
* include directive <%@ include file="banner.jsp" %>
or <jsp:directive.include file="banner.jsp" />
----------------------------------------------------------------------------------------------------
2. Declarations: <%! %>
* Variable declaration:member variable, not local variable
<%! int i ,j;
String str="hello";
%>
* Method declaration
<%! public String f(int i) {
if (i<3) return(“...”);
...
}
%>
----------------------------------------------------------------------------------------------------
3. Expressions: <%= %>
Example: <%= (new java.util.Date()).toLocaleString() %>
<%= str %>
----------------------------------------------------------------------------------------------------
4. Scriplet: <% %> : Java programming code fragments
Example: <% i=30;
j=60;
int x=i+j;
%>
----------------------------------------------------------------------------------------------------
5. Action: <jsp:forward page=" URL " /> <jsp:include page=" URL" />
Examples: <jsp:forward page="/result.jsp"/>
<jsp:include page="header.jsp" />
----------------------------------------------------------------------------------------------------
6. Comment : * <!-- Comment content -->
* <%-- this is a comment ... --%>
numberGuess.jsp:
通过Session获得猜测的次数以及随机数的值, 若没有则设置新值,
String guess = request.getParameter("guess");
1. 如果用户请求从http://localhost:8080/jspWebApp/numberGuess.jsp 进入
guess == null
显示 Form
2. 如果用户请求从http://localhost:8080/jspWebApp/numberGuess.jsp?guess=xxxx进入,
或通过FORM进入, guess != null, 但 如果用户不输入, guess.equals("")
guess!= null
if (猜中){ //随机数与输入的数比较
1> 显示 祝贺
2> 显示 经过几次猜测后猜中,设置新值
显示 Form
}else {
显示 Form
if(输入 >随机数) {
显示: try lower
}else {
显示: try higher
}
Session 设置猜测的次数的新值
}
!!!!!!! Different : String s=null; and String ss="";
==============================================================================================
Exception ErrorPage
HTTP常见错误代码
401 验证出错
404 路径错误 资源不存在错误
405 访问资源不允许--一般是servlet中,例如请求方式post,而我只写了doGet()方法,出现405错误
500 服务器端运行错误(语法异常等等)
异常页面
关于JSP中的错误页面处理
通常JSP 在执行时,在两个阶段下会发生错误。
JSP 网页 → Servlet 类
Servlet 类处理每一个请求时
在第一阶段时,产生的错误我们称为Translation Time Processing Errors;在第二阶段时,产生的错误我们称为Client Request Time Processing Errors。
接下来我们针对这两个阶段产生错误的原因和处理方法,进行介绍。
1、 Translation Time Processing Errors
Translation Time Processing Errors 产生的主要原因:我们在撰写JSP时的语法有错误,导
致JSP Container 无法将JSP 网页编译成Servlet 类文件( .class),例如:500 Internal Server
Error,500 是指HTTP 的错误状态码,因此是Server Error。
通常产生这种错误时,可能是JSP 的语法有错误,或是JSP Container 在一开始安装、设定时,
有不适当的情形发生。解决的方法就是再一次检查程序是否有写错的,不然也有可能是JSP
Container 的bug。
2、 Client Request Time Processing Errors
Client Request Time Processing Errors 错误的发生,往往不是语法错误,而可能是逻辑上的错误,简单地说,你写一个计算除法的程序,当用户输入的分母为零时,
程序会发生错误并抛出异常(Exception),交由异常处理(Exception Handling)机制做适当的处理。对于这种错误的处理,我们通常会交给errorPage 去处理。下面举个例子:
使用errorPage 的范例程序 :ErrorPage.jsp
<%@ page contentType="text/html;charset=GB2312" errorPage="Error.jsp" %> //设置Error.jsp页为本页的错误处理页
<html>
<head>
<title>CH4 - ErrorPage.jsp</title>
</head>
<body>
<h2>errorPage 的范例程序</h2>
<%!
private double toDouble(String value)
{
return(Double.valueOf(value).doubleValue());
}
%>
<%
double num1 = toDouble(request.getParameter("num1"));
double num2 = toDouble(request.getParameter("num2"));
%>
您传入的两个数字为:<%= num1 %> 和 <%= num2 %><br>
两数相加为 <%= (num1+num2) %>
</body>
</html>
ErrorPage.jsp 程序中,我们使用page 指令中的errorPage 属性,告诉JSP Container,如果
在程序中有错误产生时,会自动交给Error.jsp 处理。
Error.jsp
<%@ page contentType="text/html;charset=GB2312" isErrorPage="true" %> //设置该页为错误处理页
<%@ page import="java.io.PrintWriter" %>
<html>
<head>
<title>CH4 - Error.jsp</title>
</head>
<body>
<h2>errorPage 的范例程序</h2>
<p>ErrorPage.jsp 错误产生:<I><%= exception %></I></p><br>
<pre>
问题如下:<% exception.printStackTrace(new PrintWriter(out)); %> //输出错误的原因
</pre>
</body>
</html>
Error.jsp 主要处理ErrorPage.jsp 所产生的错误,所以在ErrorPage.jsp 中page 指令的属性errorPage设为Error.jsp,
因此,若ErrorPage.jsp有错误发生时,会自动转到Error.jsp来处理。
Error.jsp 必须设定page 指令的属性isErrorPage为true,因为Error.jsp是专门用来处理错误的网页。
===============================================================================================
<%@ include >与 jsp:Include的区别
两者都可以用于包含静态内容或者动态内容,差别在于,前者是静态包含,也就是在生成servlet之前就被包含进来了,
生成的是单个文件,不会为被包含者生成单独的servlet(假如被包含的是动态的);
后者是动态包含,也就是说生成servlet的时候只是添加一个引用,并不真正将内容包含进来,内容是在运行时才被包含进来的,
容器会为被包含的文件生成独立的servlet的(假如包含的是动态的)。
所以,前者常用于包含固定不变的,多个页面共用的内容片段,后者则用于经常变化的内容片段,无论是否被多个页面共用