首页 > 其他 > 详细

Struts框架

时间:2017-01-03 22:06:35      阅读:124      评论:0      收藏:0      [点我收藏+]

一. 用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实现地基本原理。

上面的代码用时序图可以这样表示:

技术分享

 二. Struts基本工作流程

假设现在有以下情景:

用户正在浏览一个用STRUTS的技术构建的网站主页,主页上有个登陆表单,用户填好登陆名和密码,单击“登陆”按钮,就激活了以下一系列过程:

(1)用户的请求以HTTP方式传输到服务器上,接受请求的是ActionServlet.

(2)ActionServlet接收到请求后,会查找Struts-config.xml文件来确定服务器上是否有用户请求的操作,此处用户请求操作应为登陆操作。如果没有,则返回一个用户请求无效的出错信息。

(3)当ActionServlet请求找到用户请求的Action后,首先将用户输入的表单参数打包成一个ActionFrom对象,这个ActionFrom对象其实也就是一个JavaBean,里面包含两个字段,分别是用户名和密码。接着ActionServlet再根据struts-config.xml中的配置信息决定是否要执行ActionFrom对象中的Validate方法。若Validate方法执行有错,则返回。否则,继续下一步。

(4)系统生成一个用户所请求的Action的实例对象,将前面的ActionFrom对象传递给它,运行它的Execute()方法。这一步其实就是用户登陆的控制器,在执行exectue()方法时,可以调用后台模型验证登陆名和密码是否正确等信息。

(5)execute()执行结束前会生成一个ActionForward类型的对象并将之返回给ActionServlet,该对象的作用是告诉ActionFroward就代表跳转到一个登陆成功的页面。ActionServlet将对之进行分析,其实就相当于接收到一个新的请求,重复(2)~(5)的过程,直到将某个界面返回给用户为止!

 

以上就是STRUTS的基本工作流程,解释得比较粗,用活动图描述如下:

技术分享

我们可以设置断点,在myeclipse等环境中跟一下执行执行流程,得到一个更细粒度地执行流程,见时序图:

技术分享

 

Struts框架

原文:http://www.cnblogs.com/lesleysbw/p/6246410.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!