Struts理解

来源:互联网 发布:vps监控软件 windows 编辑:程序博客网 时间:2024/06/06 01:45

Struts框架


Struts介绍

struts:按MVC模式设计的Web层应用框架。

开源:struts是开源框架。

目的:减少用MVC设计模型来开发Web应用的时间。

流程:


    (1)用户的请求以HTTP方式传输到服务器上,ActionServlet接受请求.

    (2)ActionServlet查找Struts-config.xml文件来确定服务器上是否有请求的操作。如果没有,则返回出错信息。

    (3)ActionServlet先将请求参数封装成formbean对象,这个formbean对象是一个Java类,通过formbean的validate校验,通过将formbean对象传递给action的execute方法,否则返回错误页面,错误页面由input属性指定。

    (4)action执行完后要返回显示的用ActionFrom表示的结果视图,ActionFrom通过Struts-config.xml配置文件中关联到某个jsp页面


    设置断点: 

项目流程:


提供服务:

(1)作为控制器的Servlet。

(2)提供大量的标签库。

(3)提供了用于国际化的框架,利用不同的配置文件,可以帮助用户选择合适自己的语言。

(4)提供了JDBC的实现,来定义数据源和数据库连接池。

(5)XML语法分析工具。

(6)文件下载机制。

原理:

(1)视图(view)

在Struts中,视图层包含两个部分,JSP页面和ActionForm。

ActionForm封装了用户提交的表单信息,其实ActonForm本质上就是JavaBean,这些JavaBean中没有业务逻辑,只提供了所有属性的getter和setter方法,这些属性和用户表单中的输入项是一一对应的。在Struts中就是通过ActionForm把用户表单信息提交给控制器。

JSP页面是经典MVC中主要的视图组件,主要是信息显示和控制器处理结果显示的功能。

除了以上,struts还提供了一个强大的struts标签库,来帮助用户解决显示逻辑,并且利用ActonForm组件将信息传递到控制层。

(2)控制器(Controller)

在控制层,struts提供了一个控制器组件ActionServlet,它继承自HttpServlet,并重载了HttpServlet的doGet(),doPost()方法,可以接受HTTP的响应,并进行转发,同时还提供了使用XML进行转发Mapping(映射)的功能。

(3)模型(Model)

模型表示状态和业务逻辑的处理,在一般的web应用程序中,用JavaBean或者EJB来实现系统的业务逻辑。在Struts中,struts提供Action对象,来管理业务逻辑的调用,帮助用户分离业务逻辑,也就是说struts本身不实现业务逻辑,但可以调用已完成的业务逻辑。


案例实现

登录功能的处理流程:

 

核心操作:

1、配置struts
首先是建立Java web项目,之后打开我们我们下载好strtus框架,Struts-1.2.9-bin文件夹和struts-1.2.9.src源文件文件夹。在bin文件夹中的lib文件中拷贝strutsjar包,拷贝到我们自己项目struts_login –>lib文件夹下。
找到Struts-1.2.9-binStruts-1.2.9-bin-->webapps下的struts实例struts-blank中的struts-1.2.9-bin\webapps\struts-blank\WEB-INF下的web.xml文件,复制配置对ActionServlet的配置,粘贴到我们的项目struts_loginWEB-INF下的web.xml中,代码如下所示。主要是对struts自带的ActionServlet进行配置。

2、实现 
 目录结构:

代码:

配置文件

[html] view plain copy
 print?
  1. <servlet>  
  2.         <servlet-name>action</servlet-name>  
  3.         <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  4.         <init-param>  
  5.             <param-name>config</param-name>  
  6.             <param-value>/WEB-INF/struts-config.xml</param-value>  
  7.         </init-param>  
  8.         <init-param>  
  9.             <param-name>debug</param-name>  
  10.             <param-value>2</param-value>  
  11.         </init-param>  
  12.         <init-param>  
  13.             <param-name>detail</param-name>  
  14.             <param-value>2</param-value>  
  15.         </init-param>  
  16.         <load-on-startup>2</load-on-startup>  
  17.     </servlet>  
  18.   
  19.   
  20.     <!-- Standard Action Servlet Mapping -->  
  21.     <servlet-mapping>  
  22.         <servlet-name>action</servlet-name>  
  23.         <url-pattern>*.do</url-pattern>  
  24.     </servlet-mapping>  

 

JSP(View)

[html] view plain copy
 print?
  1. <form action="login.do" method="post">  
  2.         <input type="text" name="name" />  
  3.         <br />  
  4.         <input type="password" name="password" />  
  5.   
  6.         <input type="submit" value="登录"/>  
  7.     </form>  

LoginSuccess.jsp

[html] view plain copy
 print?
  1. <body>  
  2.   登录成功》》》》》》》》》》》》  
  3.  </body>  

LoginFail.jsp

[html] view plain copy
 print?
  1. <body>  
  2.   登录失败》》》》》》》》》》》》  
  3.  </body>  


LoginAction

 

[java] view plain copy
 print?
  1. package com.jialin;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.apache.struts.action.Action;  
  7. import org.apache.struts.action.ActionForm;  
  8. import org.apache.struts.action.ActionForward;  
  9. import org.apache.struts.action.ActionMapping;  
  10.   
  11. /** 
  12.  * 登录action 
  13.  * @author jialin 
  14.  *作用:取得表单数据,调用model层业务逻辑,返回转向信息 
  15.  */  
  16. public class LoginAction extends Action {  
  17.   
  18.     @Override  
  19.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  20.             HttpServletRequest request, HttpServletResponse response)  
  21.             throws Exception {  
  22.          UserActionForm  userForm=(UserActionForm)form;  
  23.          String userName=userForm.getName();  
  24.          int password=userForm.getPassword();  //这里不用我们手动强转类型了。  
  25.           
  26.          UserManage userManage=new UserManage();//后面我们再改进  
  27.          User user=new User();  
  28.         user.setName(userName);  
  29.         user.setPassword(password);  
  30.     
  31.         try {  
  32.              userManage.ValidateUser(user);  
  33.              return mapping.findForward("success");  
  34.           } catch (UserNotFoundException e) {  
  35.              e.printStackTrace();  
  36.              request.setAttribute("message", e.getMessage());  
  37.           }catch(PasswordErrorException e){  
  38.              e.printStackTrace();  
  39.              request.setAttribute("message", e.getMessage());  
  40.           }  
  41.     
  42.           return mapping.findForward("fail"); }  
  43.   
  44. }  

struts-config.xml

[html] view plain copy
 print?
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2.   
  3. <!DOCTYPE struts-config PUBLIC  
  4.           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  5.           "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
  6.   
  7. <struts-config>  
  8.      <!-- set ActionForm info-->  
  9.     <form-beans>  
  10.         <form-bean name="userForm" type="com.jialin.UserActionForm" />  
  11.     </form-beans>  
  12.           
  13.     <action-mappings>  
  14.       <!-- Set path,action,actionform,scope,forward info -->  
  15.         <action path="/login" type="com.jialin.LoginAction" name="userForm"  
  16.             scope="request">  
  17.             <forward name="success" path="/LoginSuccess.jsp" />  
  18.             <forward name="fail" path="/LoginFail.jsp" />  
  19.         </action>  
  20.     </action-mappings>  
  21.   
  22. </struts-config>  

 

UserActionForm

[java] view plain copy
 print?
  1. package com.jialin;  
  2.   
  3. import org.apache.struts.action.ActionForm;  
  4.   
  5. /** 
  6.  * 用户ActionForm ,负责收集表单数据 
  7.  * @author jialin 
  8.  *注:get和set后的字符串首字母变小写后,必须和表单中属性的名字一致 
  9.  */  
  10. public class UserActionForm extends ActionForm {  
  11.     private String name;  
  12.     private int password;  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.     public int getPassword() {  
  20.         return password;  
  21.     }  
  22.     public void setPassword(int password) {  
  23.         this.password = password;  
  24.     }  
  25.       
  26. }  


UserManage(Model)

[java] view plain copy
 print?
  1. package com.jialin;  
  2.   
  3. /** 
  4.  * MODEL层业务逻辑 
  5.  * @author jialin 
  6.  *判断用户是否合法 
  7.  */  
  8. public class UserManage {  
  9.       
  10.      public void ValidateUser(User user) {  
  11.       // 判断用户名密码是否正确  
  12.       if (!"jialin".equals(user.getName())) {  
  13.           throw new UserNotFoundException("用户不存在!用户名为:" + user.getName());  
  14.       } else if (user.getPassword() != 123456) {  
  15.          throw new PasswordErrorException("密码错误");  
  16.       }  
  17.  }}  



参考文:http://blog.csdn.net/shan9liang/article/details/8690179

          http://blog.csdn.net/lovesummerforever/article/details/17348871