SSH骨架Struts(1)——Struts执行过程

时间:2021-10-29 20:37:55

  

  收养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="登录">
</form>

   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配置文件里的处理结果项。从而进行转发或者重定向,最后将界面返还给用户!
  
  这里仅仅是一个初步的了解和阐述,至于更具体的结合源代码和流程图会在下篇博客中进行分析






版权声明:本文博客原创文章,博客,未经同意,不得转载。