JSP
1、 页面结构
a) 编译指令:告诉JSP的解释引擎(如Tomcat),需要在编译时做什么动作,比如引入一个其他的类,设置JSP页面使用什么语言编码等;
b) 操作指令:在JSP页面被请求时,动态执行的,比如可以根据某个条件跳转到另外一个页面;
c) JSP代码:嵌入在JSP页面中的Java代码,写在<% %>中。
2、 编译指令
a) page:针对当前页面的指令“<%@”和“%>”字符串构成的标记符来指定。
如 :<%@ page import="java.sql.*"%>
指令标记:
1) language设置JSP页面中用到的语言,默认值为“Java”。
<%@ page language="java"%>
2) extends 设定目前JSP页面要继承的父类。默认情况下JSP页面的默认父类是HttpJspBase。一般情况下不需要设置。
<%@ pageextends="mypackage.MyClass"%>
3) import设置目前JSP页面中要用到的Java类。默认情况下java.lang.* ,java.servlet.*,java.servlet.jsp.*和java.servlet.http.*已经被导入到当前的JSP页面。
<%@ pageimport="java.sql.*,java.util.*"%>
4) errorPage 用来设定档JSP页面出现异常时所要转向的页面。如果没有设定,则JSP容器会用默认的当前网页来显示出错信息。
<%@ pageerrorPage="/error/error_page.jsp"%>
5) isErrorPage 用来设定当前的JSP页面是否作为传回错误页面的网页,默认值是“false”。如果设定为“true”,JSP容器则会在当前的页面生成一个exception对象。
current_page.jsp
<%@pagelanguage="java"errorPage="error_page.jsp"contentType="text/html;charset=GBK"%>
<%
intdividend = 0;
intdivisor = 0;
intresult = 0;
try {
result= dividend/divisor;
}catch(ArithmeticException e) {
throw newArithmeticException("除数不能为零!");
}
%>
error_page.jsp
<%@pagelanguage="java"isErrorPage="true"ContentType="text/html;charset=GBK"%>
当前页面时:error_page.jsp
<%out.print(exception.toString());%>
6) contentType用来设定传回网页的文件格式和编码方式,一般使用"text/html;charset=GBK"。
7) isThreadSafe 定义JSP容器执行JSP程序的方式,默认值为 “true”,代表JSP容器会以多线程方式运行JSP页面。当设定值为“false”时,JSP容器会以单线程方式运行JSP页面。
8) session 定义当前JSP页面中是否要用到session,默认值为“true”。
b) include指令:指定怎样把另一个文件包含到当前的JSP页面中,这个文件可以是普通文本文件,也可以是一个JSP页面。
如:<%@include file="target_file.jsp"%>
注:include编译指令是在JSP程序的转换时期就将file属性所指定的文件内容嵌入,然后在编译执行,只生成一个class文件,不可以带参数,共享同一个request对象,比较常用。
c) taglib指令:标记扩展。
3、 操作指令
a) jsp:include指令:用于当前的JSP页面中加入静态和动态的文件资源。
<jsp:includepage="target_file.jsp"/>
注:include操作指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入,产生多个文件,可以带参数,页面之间拥有不同的request对象,可以取得包含它的页面参数,并添加自己的参数,不常用
b) jsp:forward指令:用于把当前的JSP页面跳转到另一个页面上
c) jsp:param指令:用于在执行jsp:forward操作时追加参数
<jsp:forwardpage="target_page.jsp">
<jsp:paramname="param1" value="value1"/>
<jsp:paramname="param2" value="value2"/>
</jsp:forward>
在target_page.jsp中可以使用request对象来读取这些参数的值。
4、 变量和方法、代码块
<% @ pagecontentType="text/html;charset=GBK"%>
<%! int i = 0;%>
<%
i++;
out.print(i);
%>
5、 JSP隐含对象
JSP根据ServletAPI提供了某些隐含对象。可以使用标准的变量来访问这些对象,并且不用编写任何额外的代码,就可以在JSP中自动使用到它。
a) out:把信息回送到客户端的浏览器中;
b) resonse:处理服务器端对客户端的响应;
c) request:用来得到客户端的信息;
d) application:保存网站的一些全局变量;
e) session:保存单个用户访问时的一些信息;
f) cookie:将服务器端的一些信息写到客户端的浏览器中;
g) pageContext:提供了访问和放置在页面中共享数据的方式。
6、 汉字问题两种解决方法
a) request.setCharacterEncoding(“GBK”);
b) newString(request.getParameter("param1").getBytes("ISO-8859-1"),"GB2312");