首页 > 代码库 > JSP+Servlet演示Struts的基本原理

JSP+Servlet演示Struts的基本原理

本文转载自:http://blog.csdn.net/shan9liang/article/details/8686333 shan9liang

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

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

首先看一下项目结构

技术分享

V

JSP实现

<body>  
<a href="http://www.mamicode.com/Servlet/Add.action">测试增加》》》》》》》》》》</a>  
<a href="http://www.mamicode.com/Servlet/Modify.action">测试修改》》》》》》》》》》</a>  
</body>

C

前端控制器Servlet

package Control;  
  
import java.io.IOException;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
  
public class Controller extends HttpServlet {  
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
          
        //截取字符串  
        String requestURI=request.getRequestURI();  
        String flagAction = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));  
          
        IAction action =null;  
          
        //根据字符串转发相应的Action  
        if("/Servlet/Add".equals(flagAction))  
        {  
            //TODO 采用读取配置文件,反射,这里省略,就直接NEW了  
            action=new AddAction();   
        }else if("/Servlet/Modify".equals(flagAction))  
        {  
            action =new ModifyAction();  
        }  
          
        //TODO 获取表单信息  
        //TODO 将字符串转换为我们需要的格式等等,向下传递  
          
        //得到转向信息  
        String forwordString=action.Excute();  
          
        //转发  
        request.getRequestDispatcher(forwordString).forward(request, response);  
          
      
    }  
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        doGet(request,response);  
    }  
  
}  

 web.xml配置文件

<servlet>  
      <servlet-name>Controller</servlet-name>  
      <servlet-class>Control.Controller</servlet-class>  
</servlet>  
  
<servlet-mapping>  
      <servlet-name>Controller</servlet-name>  
      <url-pattern>*.action</url-pattern>  
</servlet-mapping> 

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

package Control;  
  
public interface IAction {  
    public String Excute();  
}  
package Control;  
  
import Model.Manage;  
  
public class AddAction implements IAction {  
  
    public String Excute() {  
        //执行MODEL层逻辑  
        Manage manage=new Manage();  
        manage.Add();  
          
        //返回转向信息  
        // TODO 可以在配置文件中读  
        return "/AddSuccess.jsp";  
    }  
}  
package Control;  
  
import Model.Manage;  
  
public class ModifyAction implements IAction {  
  
    public String Excute() {  
        //执行MODEL层逻辑  
        Manage manage=new Manage();  
        manage.Modify();  
          
        //返回转向信息  
        //TODO 可以在配置文件中读  
        return "/ModifySuccess.jsp";  
    }  
  
}  

M

实现业务逻辑

package Model;  
  
public class Manage {  
    public void Add()  
    {  
        System.out.println("添加》》》》");  
    }  
      
    public void Modify()  
    {  
        System.out.println("更改》》》》");  
    }  
}  

  

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

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

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

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

4、……

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

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

 技术分享

 

JSP+Servlet演示Struts的基本原理