首页 > 代码库 > SSH框架之Struts(1)——Struts的运行流程
SSH框架之Struts(1)——Struts的运行流程
对于采用Struts框架的Web应用,我们通过实例来介绍一下其基本流程.
一、实例
Login.jsp,进行系统登录的页面
<form action="login.do" method="post"> 用户:<input type="text" name="username"><br> 密码:<input type="password" name="password"></br> <input type="submit" value=http://www.mamicode.com/"登录">>
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) { // 判断用户名密码是否正确 if (!"admin".equals(user.getName())) { throw new UserNotFoundException("用户不存在!用户名为:" + user.getName()); } else if (user.getPassword() != 123456) { throw new PasswordErrorException("密码错误"); } }}
二、执行流程
A、初始化设置
Struts1的核心ActionServlet是继承于Servlet的,它在Web.xml配置成自动启动;B、发送和接收请求
(1)当客户端提交请求时,所有以.do结尾的请求被提交到ActionServlet这个中央分发器上。(2)根据客户端提交请求的方式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配置文件中的处理结果项,从而进行转发或者重定向,最后将界面返还给用户!
这里只是一个初步的了解和阐述,至于更详细的结合源码和流程图会在下篇博客中进行分析
SSH框架之Struts(1)——Struts的运行流程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。