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

Struts2概述

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

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

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

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

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

[html] view plaincopyprint?

  1. <form action="add.action" method="post"><div align="center"><font color="#8000ff">

  2. </font><font size="5" color="#8000ff"><strong>加法器实现</strong></font><br/>

  3. </div><table align="center">

  4. <tr>

  5. <td>第一个数:</td>

  6. <td><input type="text" name="firstNmb"/></td>

  7. </tr>

  8. <tr>

  9. <td>第二个数:</td>

  10. <td><input type="text" name="secondNmb"/></td>

  11. </tr>

  12. <tr align="center">

  13. <td colspan="2"><input type="submit" value=" 求和"/> <input type="reset"/ value="重置"></td>

  14. </tr>

  15. </table>

  16. </form>

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

[html] view plaincopyprint?

  1. public void doPost(HttpServletRequest request, HttpServletResponse response)

  2. throws ServletException, IOException {

  3. String path=request.getRequestURI();

  4. String realPath=path.substring(path.lastIndexOf("/")+1, path.lastIndexOf("."));

  5. Action action=null;

  6. String path2=null;

  7. if("add".equals(realPath)){

  8. action=new AddAction();

  9. path2=action.execute(request, response);

  10. }

  11. .........

  12. If(....){

  13. .......

  14. }

  15. request.getRequestDispatcher(path2).forward(request, response);

  16. }

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

[html]view plaincopyprint?

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <web-app version="2.5"

  3. xmlns="http://java.sun.com/xml/ns/javaee"

  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  7. <servlet>

  8. <servlet-name>Controller</servlet-name>

  9. <servlet-class>zxj.struts2.servlet.Controller</servlet-class>

  10. </servlet>

  11. <servlet-mapping>

  12. <servlet-name>Controller</servlet-name>

  13. <url-pattern>*.action</url-pattern>

  14. </servlet-mapping>

  15. </web-app>

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

[html] view plaincopyprint?

  1. public interface Action {

  2. public String result(HttpServletRequest request,HttpServletResponse response);

  3. }

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

[java] view plaincopyprint?

  1. public String execute(HttpServletRequest request,

  2. HttpServletResponse response) {

  3. double i=Double.parseDouble(request.getAttribute("firstNmb").toString());

  4. double n=Double.parseDouble(request.getAttribute("secondNmb").toString());

  5. Calculator c=new Calculator();

  6. double result=c.add(i, n);

  7. request.setAttribute("result", result);

  8. return "add_result.jsp";

  9. }

  10. }

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

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

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

实现struts2框架的更多相关文章

  1. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  2. Struts2框架简介和示例

    struts2框架 Struts2是java web的框架,在Java Web开发中,表示层框架,其核心是通过扩展Servlet来帮助处理http请求. Struct2的基本流程 Struct2的框架 ...

  3. struts2 框架处理流程

    struts2 框架处理流程 流程图如下: 注意:StrutsPrepareAndExecuteFilter替代了2.1.3以前的FilterDispatcher过滤器,使得在执行Action之前可以 ...

  4. 搭建一个简单struts2框架的登陆

    第一步:下载struts2对应的jar包,可以到struts官网下载:http://struts.apache.org/download.cgi#struts252 出于学习的目的,可以把整个完整的压 ...

  5. Struts2框架之-注解开发

    Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...

  6. Struts2 框架的快速搭建

    方便myEclipse 手动配置Struts2框架,写下此文,需要的朋友拿走不谢~ 一.引入JAR包 WEB工程->WebRoot->WEB-INF->lib引入Struts2对应版 ...

  7. struts2框架 初始别

    struts2 是webwork和struts合并而来. 1.下载struts2 说明: Full Distribution: 为完整版下载,建议下载它 Example Applications:st ...

  8. struts2框架快速入门小案例

    struts2快速入门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导入jar包 struts2的目录结构: a ...

  9. 搭建struts2框架

    struts是一个经典的MVC模式拦截器比过滤器拦截的力度更大 搭建struts2框架1.引入lib包 9个(2.3版本的)common-fileupload;common-io;common-lan ...

  10. Struts2学习笔记-jsp中引用struts2框架

    如果在jsp中需要引用struts2 框架,需在前面加上以下内容 <%@taglib prefix="s" uri="/struts-tags" %> ...

随机推荐

  1. 中文模糊搜索 - chunyu

    什么是模糊搜索?为什么要使用模糊搜索?相信大家都知道这些,我就不讲了.今天只讲怎么使用模糊搜索. 一 LIKE.大名鼎鼎的like字句,使用方便,兼容性好,易维护,但效率奇低.大家都会用,不多介绍. ...

  2. AHOI2013 Round2 Day2 简要题解

    第一题: 第一问可以用划分树或主席树在O(nlog2n)内做出来. 第二问可以用树状数组套主席树在O(nlog2n)内做出来. 我的代码太挫了,空间刚刚卡过...(在bzoj上) 第二题: 分治,将询 ...

  3. Makefile中用宏定义进行条件编译

    在源代码里面如果这样是定义的: #ifdef   MACRONAME //可选代码 #endif 那在makefile里面 gcc   -D   MACRONAME=MACRODEF 或者 gcc   ...

  4. linux - 怎么自动填写有交互的shell脚本 - SegmentFault

    linux - 怎么自动填写有交互的shell脚本 - SegmentFault TCL/Expect交互式自动化测试概要 - - ITeye技术网站 expect是一种基于TCL,能与交互式程序进行 ...

  5. Spring AOP + AspectJ annotation example

    In this tutorial, we show you how to integrate AspectJ annotation with Spring AOP framework. In simp ...

  6. C#一些知识点:委托和事件的区别

    在C#中,委托和事件是比较容易混淆的两个知识点,本篇博客就记录一下委托和事件之间的区别. 定义上的区别 委托:委托实际上是一个类,用来表示一个函数,可以理解为C++中的函数指针. 事件:事件是一个修饰 ...

  7. 为什么要坚持用ASP.NET MVC!(②)

    尽管ASP.NET MVC架构和Web Form架构区别很大,但是还是有很多共同之处.毕竟它们都是以ASP.NET API与.NET框架为基础构建的.比较一下ASP.NET MVC和Web Form框 ...

  8. phper 要求

    做了这么多年php,今天看到一个07年的老文,才发现自己的水平太菜.转过来激励下自己 说句实话,写这个真够无聊的.本来看了某位大虾的类似文章,腹诽了几句也就算了.但是昨天晚上有个客户拿着这篇文章问我: ...

  9. linx目录结构

    linux中的命令一般存放在/bin目录下的: 以下为linux下的基本目录结构和作用: /根目录./boot引导程序,内核等存放的目录./sbin超级用户可以使用的命令的存放目录./bin普通用户可 ...

  10. webservice 缓存机制

    本文转载:http://blog.csdn.net/zhdd1234/article/details/4555472 WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据缓存 一 ...