Java程序员从笨鸟到菜鸟之(三十五)细谈struts2(一)自己实现struts2框架

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188  

 

     Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages Servlet标签库以及面向对象的技术水准。最初的struts1.x很快在企业开发中流行了起来,与此同时,当时还有一个非常的优秀的web开发框架诞生,那就是webwork,但webwork没有像struts1那么幸运,没有得到流行,但webwork简洁、灵活功能强大等优点绝不输于当时流行的strut1.x。当然struts1开发人员不是也没有意识到这一点。于是struts WebWork得到了结合,webwork算是利用struts的名气来发展自己吧,于是struts2诞生了。

Struts2概述

    Struts 2Struts的下一代产品,是在 struts WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1Struts 2有着太大的变化,但是相对于WebWorkStruts 2只有很小的变化。由于struts1现在开发中很少在用到,所以我们直接进入struts2的学习,但以前的项目中还是大多数保留着struts1的应用。由于struts是基于mvc模式的框架,所以我们学习struts的第一步就是开发自己的基于MVC的框架

首先看一下一个MVC的流程图的例子:

       就像图中例子,在视图层addJsp中写一个提交两个数据的表单,表单提交给控制器,在控制器中通过它所提交的uri获得表单所要提交的action,然后把请求交给action,然后在action中调用业务逻辑的方法进行逻辑运算,获得结果,把结果保存起来,然后,把所有返回的界面作为返回结果返回给控制器,然后控制器根据返回的界面的字符串选择转发到该界面

下面我们就用程序,把这个流程实现出来:

1.首先要把表单界面写出来:add.jsp

[html]  view plain copy print ?
  1. <form action="add.action" method="post"><div align="center"><font color="#8000ff">  
  2.   
  3.      </font><font size="5" color="#8000ff"><strong>加法器实现</strong></font><br/>  
  4.   
  5.      </div><table align="center">  
  6.   
  7.      <tr>  
  8.   
  9.      <td>第一个数:</td>  
  10.   
  11.      <td><input type="text" name="firstNmb"/></td>  
  12.   
  13.      </tr>  
  14.   
  15.      <tr>  
  16.   
  17.      <td>第二个数:</td>  
  18.   
  19.      <td><input type="text" name="secondNmb"/></td>  
  20.   
  21.      </tr>  
  22.   
  23.      <tr align="center">  
  24.   
  25.      <td colspan="2"><input type="submit" value=" 求和"/>    <input type="reset"value="重置"></td>  
  26.   
  27.      </tr>  
  28.   
  29.      </table>  
  30.   
  31.     </form>  


2.创建控制器,其实这里的控制器就是一个servlet,这里我们给规定凡是请求后缀是.action的都提交到这个控制器里,controller.java:

[html]  view plain copy print ?
  1. public void doPost(HttpServletRequest request, HttpServletResponse response)  
  2.   
  3. throws ServletException, IOException {  
  4.   
  5. String path=request.getRequestURI();  
  6.   
  7. String realPath=path.substring(path.lastIndexOf("/")+1, path.lastIndexOf("."));  
  8.   
  9. Action action=null;  
  10.   
  11. String path2=null;  
  12.   
  13. if("add".equals(realPath)){  
  14.   
  15. action=new AddAction();  
  16.   
  17. path2=action.execute(request, response);  
  18.   
  19. }  
  20.   
  21.           .........  
  22.   
  23.          If(....){  
  24.   
  25.                  .......  
  26.   
  27.               }  
  28.   
  29. request.getRequestDispatcher(path2).forward(request, response);  
  30.   
  31. }  


因为控制器是一个servlet,所以在web.xml中要对他进行配置:

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <web-app version="2.5"   
  4.   
  5. xmlns="http://java.sun.com/xml/ns/javaee"   
  6.   
  7. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  8.   
  9. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  10.   
  11. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  12.   
  13.   <servlet>  
  14.   
  15.     <servlet-name>Controller</servlet-name>  
  16.   
  17.     <servlet-class>zxj.struts2.servlet.Controller</servlet-class>  
  18.   
  19.   </servlet>  
  20.   
  21.   <servlet-mapping>  
  22.   
  23.     <servlet-name>Controller</servlet-name>  
  24.   
  25.     <url-pattern>*.action</url-pattern>  
  26.   
  27.   </servlet-mapping>  
  28.   
  29. </web-app>  


      下面来看一下action里面应该写的内容,由于一直以来都提倡面向接口编程,并且面向接口编程也能很好的体现java的可扩展性,所以我们对所有的action提供一个共同的接口:action.java

[html]  view plain copy print ?
  1. public interface Action {  
  2.   
  3. public String result(HttpServletRequest request,HttpServletResponse response);  
  4.   
  5. }  


      

下面是具体的action实现:addaction.java:其中具体的业务逻辑调用的add方法就是两个数相加,这里就不贴代码了:

 

[java]  view plain copy print ?
  1. public String execute(HttpServletRequest request,  
  2.   
  3. HttpServletResponse response) {  
  4.   
  5. double i=Double.parseDouble(request.getAttribute("firstNmb").toString());  
  6.   
  7. double n=Double.parseDouble(request.getAttribute("secondNmb").toString());  
  8.   
  9. Calculator c=new Calculator();  
  10.   
  11. double result=c.add(i, n);  
  12.   
  13. request.setAttribute("result", result);  
  14.   
  15. return "add_result.jsp";  
  16.   
  17. }  
  18.   
  19. }  

 

        这些就是我们自己写的mvc的基本框架,当然这里面有很多不足的地方,这里只是为了演示基于mvc框架的基本架构,具体细节都可以细化和扩展性的实现,比如控制器里面的选择哪个action这个可以用配置文件来实现的,基本思路:在控制器中获得所请求action的前缀名,然后去解析所配置的文件,在然后拿着这个前缀名去找配置文件中相符的action所对应的类,然后在利用反射执行对应类的方法,根据然后在执行完action后,获得结果,然后从配置中获得获该结果对应的界面,这样就可以很好的体现了这个程序的可扩展性了。

      到这里我相信大家应该对基于mvc的框架的执行流程有一定的了解了,相信大家一定对学习struts2框架迫不接待了,那大家就等待着下一篇博客:细谈struts2初识struts2框架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值