现在的开发要求是,可以由Servlet跳转到根目录下保存的show.jsp页面,而show.jsp页面的功能很简单,就是输出属性内容。
范例:定义show.jsp页面代码
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>Servlet</title>
</head>
<body>
<h1>request Attribute: <%=request.getAttribute("requestParam") %></h1>
<h1>session Attribute: <%=session.getAttribute("sessionParam") %></h1>
</body>
</html>
下面最为重要的就是如何在MyServlet里面跳转到show.jsp页面。
在WEB开发之中存在有两种跳转模式:客户端跳转、服务器端跳转。
1 客户端跳转
在doGet()与doPost()两个方法上都提供有HttpServletResponse接口对象,那么既然有了这个response对象就可以利用response对象里面提供的sendRedirect()
方法跳转到另外的页面。
范例:编写MyServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
request.setAttribute("requestParam", "REQUEST ATTRIBUTE");
session.setAttribute("sessionParam", "SESSION ATTRIBUTE");
response.sendRedirect("show.jsp");
}
由于使用的是客户端跳转操作,所以页面的地址变为了show.jsp。但是最关键的问题是request属性范围不存在了。
2 服务器端跳转
对于服务器端跳转首先想到的一定是<jsp:forward>
,但是遗憾的是,这属于JSP的语法,不能够在Servlet里使用。
如果要想实现服务器端跳转,必须利用ServletRequest(HttpServletRequest)提供的一个方法:
(1)取得RequestDispatcher接口对象:public RequestDispatcher getRequestDispatcher(String path)
|————在取得对象的同时必须要设置要跳转的页面路径,这个路径可以直接使用/
描述根目录;
在RequestDispatcher接口里面定义了两个方法:
(1)跳转:public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
(2)包含:public void include(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
范例:实现Servlet到JSP的服务器端跳转
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
request.setAttribute("requestParam", "REQUEST ATTRIBUTE");
session.setAttribute("sessionParam", "SESSION ATTRIBUTE");
request.getRequestDispatcher("/show.jsp").forward(request, response);
}
之所以一直强调request属性范围,Servlet与JSP相比,JSP更加适合于输出,而Servlet是由Java程序编写的,所以适合于编写Java代码,那么也就意味着在实际的开发之中,往往会由Servlet处理数据,而后会将处理好的数据交给JSP显示,那么这个数据只显示一次就够了,所以request是最好用的属性范围。