ActionForward是 Struts的核心類之一,其基類僅有4個屬性name / path / redirect / classname。在基於Struts的Web應用程序開發過程當中,Action操做完畢後程序會經過Struts的配置文件struts- config.xml連接到指定的ActionForward,傳到Struts的核心類ActionServlet,ActionServlet使用 ActionForward提供的路徑,將控制傳遞給下一個JSP或類。ActionForward控制接下來程序的走向。ActionForward表明一個應用的URI,它包括路徑和參數,例如:path=」/login.jsp」 或path=「/modify.do?method=edit&id=10」 ActionForward的參數除了在struts-config.xml和頁面中設置外,還能夠經過在Action類中添加參數,或從新在Action中建立一個ActionForward。
actionForward的做用:封裝轉發路徑,通俗點說就是說完成頁面的跳轉和轉向。那它既然是轉向,究竟是轉發仍是重定向呢?默認的狀況下,actionForward採用的是轉發的方式進行頁面跳轉的。
順便說一下
轉發和重定向的區別。最大的區別就是轉發的時候,頁面的url地址不變,而重定向的時候頁面的url地址會發生變化。簡單說明一下緣由,由於轉發的時候是採用的同一個request(請求),既然頁面跳轉先後是同一個request,頁面url固然不會變了;而重定向採用的是2個request,由於是二次轉發頁面跳轉先後的url固然會不一樣了。
既然actionForward跳轉的方式默認的是轉發,那若是我非要用重定向的方式,該如何設置呢?恩,這很簡單,你們都在struts-config.xml作過actionForward的配置吧,好比這句
<forward name=」login」 path=」/login.jsp」 redirect=」true」/>
如下是三種經常使用的在action中覆蓋execute方法時用到的重定向方法:
示例代碼以下: html
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
/****重定向的三種方法*******/
//方法1
response.sendRedirect(request.getContextPath() + "/login.jsp");
return null;
//方法2
ActionForward forward = mapping.findForward("login");
forward.setRedirect(true);
return forward ;
//方法3
PrintWriter out = null;
try
{
// 設置回發內容編碼,防止彈出的信息出現亂碼
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
String alertString = "你好!這是返回信息!";
String redirectURL = request.getContextPath() + "/login.jsp" ;
out.print("<script>alert('" + alertString + "')</script>");
out.print("<script>window.location.href='" + redirectURL + "'</script>");
out.flush();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}