struts是开源项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
MVC即Model-View-Controller的缩写,是一种常用的设计模式(具体自己百度吧)
我们用JSP+Servlet实现“一个应用的增改信息”,先来看一下,如果没有Struts,我们一般都是怎么做的。
废话少说,果断上代码
V层
用JSP实现
- <body>
- <a href="Servlet/Add.action">测试增加》》》》》》》》》》</a>
- <a href="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);
- }
- }
配置文件
- <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实现地基本原理。