JSP是Java Server Page的缩写,它是Servlet的扩展,是一种基于本文的程序。JSP的特点是HTML代码与Java程序共同存在,在接收到用户请求时,服务器会处理Java代码片段,然后生成处理结果的HTML页再返回给客户端,客户端的浏览器将呈现最终页面效果。
使用JSP中的page指令的errorPage属性自定义错误页面,代码如下:
<%@ page errorPage="error.jsp" %>
其中error.jsp是一个专门负责处理异常的网页。
也可以应用web.xml文件中的error-page参数定义错误页面,应用该参数配置的错误页面将对所有页面有效。
<error-page>
<error-code>404</error-code>
<loaction>/error.jsp</loaction>
</error-page>
在一些网站中添加注册信息是,注册成功后可能需要弹出一个“注册成功”的提示信息窗口,这就需要在JSP脚本中插入JavaScript的alert()方法来实现。
创建用户注册表单页index.jsp,将表单提交到save.jsp,关键代码如下:
<form action="save.jsp" method="post">
......
</form>
创建save.jsp页面,该页只是为了演示如何在JSP脚本中插入JavaScript代码,并没有真正对表单数据进行处理,代码如下:
<%
out.println("<script>alert('注册成功!');window.location.href='index.jsp';</script>")
%>
JSP提供了request、response、session、application、out、page、config、exception和pageContent9个内置对象。其中request对象、response对象、out对象、page对象、config对象、exception对象和pageContent对象的有效范围是当前页面,而session对象的有效范围是当前会话,即同一个客户端的所有页面;application对象的有效范围是当前应用,只要服务器不关闭,这个对象就有效。
request内置对象表示的是调用JSP页面的请求。通常,request对象是javax.servlet.http.HttpServletRequest接口的一个实例
典型应用:
通过request.getParameter(“paramName”)可以获得form提交过来的参数值
通过request.setAttribute(String name, Object object)进行数据传递
response.sendRedirect(String url):重定向JSP文件
和<jsp:forward>
的区别:
sendRedirect通过客户端发起二次申请,不同的request对象;jsp:forward是同一个request,在服务器内部转发。
通过session对象可以存储或读取客户相关的信息,如用户名等。方法:
session.setAttribute(String name, Object obj) //用于将信息保存在session范围内
session.getAttribute(String name) //获取保存在session范围内的信息
session.invalidate(); //销毁session
JSP设计自定义标签的目的就是为了实现HTML代码的重用。 ###3.1 带标签体的自定义标签
首先了解一下什么是带标签体的标签。
示例:<test:mytag>xxxxx</test:mytag>
说明:以上标签中间的xxxxx即为标签体
javax.servlet.jsp.tagext.TagSupport
类,该类实现了Tag
接口,用于创建不带标签体的自结束标签,这些标签中可以带属性。
javax.servlet.jsp.tagext.BodyTagSupport
类,该类继承了TagSupport
,用于创建带标签体的标签。
开发和使用一个JSP自定义标签的过程:
1) 开发标记处理类,编译生成class 文件,该类要继承TagSupport 或BodyTagSupport;
2) 创建标记库描述符文件*.tld,在该文件中为标记处理类指定标签名、声明标签属性;
3) 在JSP中引用标签库;
4) 在JSP中使用JSP标签。
本实例主要使用标签体的getBodyContent()方法自定义一个标签,把一段字母按大写输出。
1)创建BodyTagSupport类的实现类TagBody.java。代码如下:
package info.luyueming.bodycontent;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class TagBody extends BodyTagSupport {
public int doEndTag() throws JspException {
String ct = this.getBodyContent().getString();
// 获取标签体的代码
try {
// 以大写输出
this.pageContext.getOut().print(ct.toUpperCase());
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
}
2)创建tagbody.tld文件,并放在WEB-INF目录下。代码如下:
<tlib-version>1.0</tlib-version>
<short-name>toUpperCase</short-name>
<tag>
<name>toupp</name>
<tagclass>info.luyueming.bodycontent.TagBody</tagclass>
<bodycontent>JSP</bodycontent>
</tag>
3)创建index.jsp页面。主要代码如下:
<body>
<toUpperCase:toupp>hello welcome!!!!</toUpperCase:toupp>
</body>
并在该jsp页面前加上下面一行,否则会报错。
<%@ taglib uri="/WEB-INF/tagbody.tld" prefix="toUpperCase"%>
这一章主要介绍了JSP的基本应用、JSP九个内置对象、以及JSP的自定义标签三个方面。其中九个内置对象是非常重要的,值得进一步去学习。
Copyright ©2013-2015 LYM Power by Github. Base on Jekyll-Bootstrap.