一. 用Servlet + JSP演示Struts基本原理
struts是开源项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
如果没有Struts,我们怎么实现的?
1)View层——JSP
<body> <a href="Servlet/Add.action">测试增加》》》》》》》》》》</a> <a href="Servlet/Modify.action">测试修改》》》》》》》》》》</a> </body>
2)control层 —— 前端控制器Servlet + 对应的action操作
1 package Control 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 public class Controller extends HttpServlet{ 9 protected void doGet(HttpServletRequest request, HttpServletResponse response) 10 throws ServletException, IOException{ 11 // 截取字符串 12 String requestURI = request.getRequsetURI(); 13 String flagAction = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf(".")); 14 15 IAction action = null; 16 17 //根据字符串转发相应的Action 18 if ("/Servlet/Add".equals(flagAction)){ 19 // TODO 采用读取配置文件,反射,这里省略,直接new 20 action = new AddAction(); 21 } 22 else if ("Servlet/Modify".equals(flagAction)){ 23 action = new ModifyAction(); 24 } 25 //TODO 获取表单信息 26 //TODO 将字符串转换为我们需要的格式等等,向下传递 27 28 //得到转向信息(转向对应的JSP) 29 String fowardString = action.Excute(); 30 31 //转发 32 request.getRequestDispatcher(fowardString).forward(request,response); 33 } 34 35 protected void doPost(HttpServletRequest request, HttpServletResponse response) 36 throws ServletException, IOException{ 37 doGet(request,response); 38 } 39 }
其中:需要在web.xml中修改配置文件:
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>
AddAction和ModifyAction实现IAction接口,
IAction:
1 package Control; 2 3 public interface IAction { 4 public String Excute(); 5 }
AddAction
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 }
ModifyAction
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 }
3)model层——业务逻辑层
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实现地基本原理。
上面的代码用时序图可以这样表示:
更多详情:http://blog.csdn.net/shan9liang/article/details/8686333