現在的開發要求是,可以由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是最好用的屬性範圍。