一口一口吃掉Struts(一)——用JSP+Servlet演示Struts的基本原理

来源:互联网 发布:linux系统自带rpm在哪 编辑:程序博客网 时间:2024/05/16 17:26

struts是开源项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。

 

MVC即Model-View-Controller的缩写,是一种常用的设计模式(具体自己百度吧)

 

我们用JSP+Servlet实现“一个应用的增改信息”,先来看一下,如果没有Struts,我们一般都是怎么做的。

废话少说,果断上代码

 

 

V

JSP实现

[html] view plaincopyprint?
  1. <body>  
  2. <a href="Servlet/Add.action">测试增加》》》》》》》》》》</a>  
  3. <a href="Servlet/Modify.action">测试修改》》》》》》》》》》</a>  
  4. </body>  


 

C

前端控制器Servlet

[java] view plaincopyprint?
  1. package Control;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10.   
  11. public class Controller extends HttpServlet {  
  12.   
  13.     protected void doGet(HttpServletRequest request, HttpServletResponse response)  
  14.             throws ServletException, IOException {  
  15.           
  16.         //截取字符串  
  17.         String requestURI=request.getRequestURI();  
  18.         String flagAction = requestURI.substring(requestURI.indexOf("/"1), requestURI.indexOf("."));  
  19.           
  20.         IAction action =null;  
  21.           
  22.         //根据字符串转发相应的Action  
  23.         if("/Servlet/Add".equals(flagAction))  
  24.         {  
  25.             //TODO 采用读取配置文件,反射,这里省略,就直接NEW了  
  26.             action=new AddAction();   
  27.         }else if("/Servlet/Modify".equals(flagAction))  
  28.         {  
  29.             action =new ModifyAction();  
  30.         }  
  31.           
  32.         //TODO 获取表单信息  
  33.         //TODO 将字符串转换为我们需要的格式等等,向下传递  
  34.           
  35.         //得到转向信息  
  36.         String forwordString=action.Excute();  
  37.           
  38.         //转发  
  39.         request.getRequestDispatcher(forwordString).forward(request, response);  
  40.           
  41.       
  42.     }  
  43.   
  44.     protected void doPost(HttpServletRequest request, HttpServletResponse response)  
  45.             throws ServletException, IOException {  
  46.         doGet(request,response);  
  47.     }  
  48.   
  49. }  

 

配置文件

[html] view plaincopyprint?
  1. <servlet>  
  2.         <servlet-name>Controller</servlet-name>  
  3.         <servlet-class>Control.Controller</servlet-class>  
  4.     </servlet>  
  5.   
  6.     <servlet-mapping>  
  7.         <servlet-name>Controller</servlet-name>  
  8.         <url-pattern>*.action</url-pattern>  
  9.     </servlet-mapping>  


 

Actoin接口和实现Action接口的增和改

[java] view plaincopyprint?
  1. package Control;  
  2.   
  3. public interface IAction {  
  4.     public String Excute();  
  5. }  


 

[java] view plaincopyprint?
  1. package Control;  
  2.   
  3. import Model.Manage;  
  4.   
  5. public class AddAction implements IAction {  
  6.   
  7.     public String Excute() {  
  8.         //执行MODEL层逻辑  
  9.         Manage manage=new Manage();  
  10.         manage.Add();  
  11.           
  12.         //返回转向信息  
  13.         // TODO 可以在配置文件中读  
  14.         return "/AddSuccess.jsp";  
  15.     }  
  16. }  


 

[java] view plaincopyprint?
  1. package Control;  
  2.   
  3. import Model.Manage;  
  4.   
  5. public class ModifyAction implements IAction {  
  6.   
  7.     public String Excute() {  
  8.         //执行MODEL层逻辑  
  9.         Manage manage=new Manage();  
  10.         manage.Modify();  
  11.           
  12.         //返回转向信息  
  13.         //TODO 可以在配置文件中读  
  14.         return "/ModifySuccess.jsp";  
  15.     }  
  16.   
  17. }  


 

M

实现业务逻辑

[java] view plaincopyprint?
  1. package Model;  
  2.   
  3. public class Manage {  
  4.     public void Add()  
  5.     {  
  6.         System.out.println("添加》》》》");  
  7.     }  
  8.       
  9.     public void Modify()  
  10.     {  
  11.         System.out.println("更改》》》》");  
  12.     }  
  13. }  


 

我们这么实现会有哪些问题?

 

1、实例化响应的Action,我们要么用if语句,手动创建,要么需要自己读配置文件,获取Action,反射实例化

2、表单过来的所有数据都是字符串,我们需要手动转成响应的格式

3、转向信息,我们可能会写死,也可能手动去配置文件读

4、……

我们需要手动做很多事,而且很多重复劳动,还容易出错。

 

如果有个东西能为我代劳就简单得多了,所以Struts应运而生,Struts把我们上面提到的那些都做了封装,让我们的开发更高效,更有灵活性。上面的代码,用时序图表示如下,我们完全可以看做是Struts实现地基本原理。

0 0