SSH骨架Struts(1)——Struts执行过程 一、实例 二、运行流程
收养Struts骨架Web应用,以举例的方式介绍的基本流程.
Login.jsp,进行系统登录的页面
Web.xml,初始化的配置文件
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config2.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
Struts-config.xml,strurs的配置文件
<struts-config> <form-beans> <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/> </form-beans> <action-mappings> <action path="/login" type="com.bjpowernode.struts.LoginAction" name="loginForm" scope="request" > <forward name="success" path="/login_success.jsp" /> <forward name="error" path="/login_error.jsp"/> </action> </action-mappings> </struts-config>
LoginAction:
public class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserActionForm userForm=(UserActionForm)form; String userName=userForm.getName(); int password=userForm.getPassword(); UserManage userManage=new UserManage(); User user=new User(); user.setName(userName); user.setPassword(password); try { userManage.ValidateUser(user); return mapping.findForward("success"); } catch (UserNotFoundException e) { e.printStackTrace(); request.setAttribute("message", e.getMessage()); }catch(PasswordErrorException e){ e.printStackTrace(); request.setAttribute("message", e.getMessage()); } return mapping.findForward("fail"); }
LoginActionForm:
public class UserActionForm extends ActionForm { private String name; private int password; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPassword() { return password; } public void setPassword(int password) { this.password = password; } }
UserManager
public class UserManage { public void ValidateUser(User user) { // 推断usernamepassword是否正确 if (!"admin".equals(user.getName())) { throw new UserNotFoundException("用户不存在!username为:" + user.getName()); } else if (user.getPassword() != 123456) { throw new PasswordErrorException("password错误"); } }}
二、运行流程
A、初始化设置
Struts1的核心ActionServlet是继承于Servlet的,它在Web.xml配置成自己主动启动。B、发送和接收请求
(1)当client提交请求时,全部以.do结尾的请求被提交到ActionServlet这个中央分发器上。(2)依据client提交请求的方式Get/Post选择运行到ActionServelet的doGet()还是doPost方法
C、处理和分发请求
(3)不论运行doGet()/doPost()方法。都会运行到process()方法。这是ActionServlet的一个核心方法,在这种方法中。实现了截取请求路径(processPath),依据截取的请求路径到Struts.cofing.xml配置文件里找相应的ActionMapping(processMapping)(4)当ActionServlet匹配到用户请求的Action后,会将response请求的表单參数打包成一个ActionForm(调用processActionForm实现)对象,这个ActionFrom对象实质是一个JavaBean,里面包括了表单的数据信息。
(5)这时候,系统会转入到详细的Action,并传递过来ActionForm对象。运行详细Action中的Execute()方法。
(6)execute()运行结束,会生成一个ActionForward类型的对象并返回给ActionServlet,结合在Struts.cofing.xml配置文件里的处理结果项。从而进行转发或者重定向,最后将界面返还给用户!
这里仅仅是一个初步的了解和阐述,至于更具体的结合源代码和流程图会在下篇博客中进行分析
版权声明:本文博客原创文章,博客,未经同意,不得转载。