【SSH 基础】SSH框架--struts深入详解(二)

来源:互联网 发布:zol买手机 知乎 编辑:程序博客网 时间:2024/06/05 07:31

先来说一下struts的基本流程,帮助大家理解下面的代码:

 

 Struts基本简要流程如下:

     1、客户端浏览器发出HTTP请求。

     2、根据web.xml配置,该请求被FilterDispatcher接收。

     3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。

     4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

     5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

     6、返回HTTP响应到客户端浏览器。

 

示例分析(使用struts

 

配置文件web.xml

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <filter>  
  2.         <filter-name>struts2</filter-name>  
  3.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  4.     </filter>  
  5.     <filter-mapping>  
  6.         <filter-name>struts2</filter-name>  
  7.         <url-pattern>/*</url-pattern>  
  8.     </filter-mapping>   

add.jsp

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <%@ page language="java" contentType="text/html; charset=GB2312"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <html>  
  4.     <head>  
  5.         <title>添加页面</title>  
  6.     </head>  
  7.     <body>  
  8.         <center>  
  9.             <s:form action="grade">  
  10.                 <s:textfield name="grade.USERID" label="用户编号" />  
  11.                 <s:textfield name="grade.USERNAME" label="用户姓名" />  
  12.                 <s:textfield name="grade.CHINESE" label="语文成绩" />  
  13.                 <s:textfield name="grade.MATHS" label="数学成绩" />  
  14.                 <s:textfield name="grade.ENGLISH" label="英语成绩" />  
  15.                 <s:submit value="确定" />  
  16.                 <s:reset value="重置" />  
  17.             </s:form>  
  18.         </center>  
  19.     </body>  
  20. </html>  

Struts.xml


[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <package name="book" extends="struts-default">  
  2.         <action name="grade" class="action.GradeAction">  
  3.             <result name="show">show.jsp</result>             
  4.         </action>  
  5.         <action name="login" class="action.UserAction">  
  6.             <result name="success">success.jsp</result>  
  7.             <result name="error">error.jsp</result>  
  8.         </action>  
  9. </package>  
  10.    

GradeAction.java


[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class GradeAction {  
  2.     private Grade grade;  
  3.     private List<Grade> gradeList;  
  4.     public Grade getGrade() {  
  5.         return grade;  
  6.     }  
  7.     public void setGrade(Grade grade) {  
  8.         this.grade = grade;  
  9.     }  
  10.     public List<Grade> getGradeList() {  
  11.         return gradeList;  
  12.     }  
  13.     public void setGradeList(List<Grade> gradeList) {  
  14.         this.gradeList = gradeList;  
  15.     }  
  16.     public String execute() throws Exception{  
  17.         GradeDao gradeDao=new GradeDao();  
  18.         gradeDao.insertGrade(grade);  
  19.         ArrayList<Grade> gradeList = (ArrayList) gradeDao.listGrade();  
  20.         this.setGradeList(gradeList);  
  21.         return "show";  
  22.     }  

单纯的看,这两套代码(结合上篇博客来看),从代码量上来看,都是完成同样的添加功能,使用struts后,明显代码量减少了许多,而且每个操作完成后的跳转页都配置到了配置文件中,这样给我们系统的维护带来了极大的便利。它相当于从界面到action传递的过程中,是以对象的方式传递的,就不需要我们像之前的操作那样一个字段一个字段的去获取。

 

当然还有一点,就是struts是如何解决servlet过多的问题的?


Struts.xml


[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <package name="testlogin2" namespace="/user" extends="struts-default">  
  2.     
  3.         <action name="login" class="com.action.LoginAction2" method="doFun">  
  4.             <result name="success">/success.jsp</result>  
  5.             <result name="error" type="redirect">/error.jsp</result>  
  6.               
  7.         </action>  
  8.         <!-- 第三种方式 :一个action处理多个请求 如:user/modifyUser  
  9.         <action name="*User_*" class="com.action.UserManagerAction" method="{1}User">  
  10.         <result name="success">/{2}.jsp</result>  
  11.         <result name="error">/error.jsp</result>  
  12.     </action>-->  
  13.           
  14.         <action name="*User" class="com.action.UserManagerAction" method="{1}User">  
  15.         <result name="success">/success.jsp</result>  
  16.         <result name="error">/error.jsp</result>  
  17.     </action>  
  18.           
  19.           
  20.   </package>  

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class UserManagerAction extends ActionSupport {  
  2.       
  3.     private User user;  
  4.     public User getUser() {  
  5.         return user;  
  6.     }  
  7.     public void setUser(User user) {  
  8.         this.user = user;  
  9.     }  
  10.     public String addUser(){  
  11.         System.out.println("---------AddUser()-------");  
  12.         return "success";  
  13.     }  
  14.     public String modifyUser(){  
  15.         System.out.println("---------ModifyUser()-------");  
  16.         return "success";  
  17.     }  
  18.     public String delUser(){  
  19.         System.out.println("---------DelUser()-------");  
  20.         return "success";  
  21.     }  
  22. }  

servlet的关系

 

     前面我们说对于Model 2模型来说,Servlet过多,转向频繁,流程,配置等不易集中管理,那么strutsServlet有什么关系?它怎么就能解决Servlet的这些问题呢?

 

     可以说Struts2本质还是一个Servlet,只是对Servlet进一步的封装罢了

   

     对于解决问题来说:

     打个比方:做Web项目,好比建房子。

     Servlet好比木材,用一根根的木材搭,也可盖起房子,只是速度慢而已;

     Struts2好比是用木材做好的一个房子大概结构,要建房子时,只需把它拿过来,再往其里面添砖加瓦,修修补补,就能很快盖好房子,这要比直接使用Servlet要快得多

 

 

以上只是我对struts的简单理解,用一句话概括,struts就是将某些功能进行提取,然后做了一个封装,能让我们更好的使用(框架)。当然对于它的优势还需要我们在以后做项目的过程中慢慢体会!

0 0
原创粉丝点击