一. 用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操作

 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.getRequsetURI();
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 将字符串转换为我们需要的格式等等,向下传递 //得到转向信息(转向对应的JSP)
String fowardString = action.Excute(); //转发
request.getRequestDispatcher(fowardString).forward(request,response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
doGet(request,response);
}
}

其中:需要在web.xml中修改配置文件:

 <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>

AddAction和ModifyAction实现IAction接口,

IAction:

 package Control;

 public interface IAction {
public String Excute();
}

AddAction

 package Control;

 import Model.Manage;

 public class AddAction implements IAction {

     public String Excute() {
//执行MODEL层逻辑
Manage manage=new Manage();
manage.Add(); //返回转向信息
// TODO 可以在配置文件中读
return "/AddSuccess.jsp";
}
}

ModifyAction

 package Control;

 import Model.Manage;

 public class ModifyAction implements IAction {

     public String Excute() {
//执行MODEL层逻辑
Manage manage=new Manage();
manage.Modify(); //返回转向信息
//TODO 可以在配置文件中读
return "/ModifySuccess.jsp";
} }

3)model层——业务逻辑层

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

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

更多详情:http://blog.csdn.net/shan9liang/article/details/8686333

Struts框架——(一)用Servlet + JSP演示Struts基本原理的更多相关文章

  1. Eclipse搭建Struts框架,及一个简单的Struts例子

    一.下载struts2.0.1 http://struts.apache.org/downloads.html,下载struts-2.0.1-all.zip,这个压缩包中包含了开发struts2所需的 ...

  2. Struts框架详解

    1.Struts应用框架介绍 (1)框架 框架最简单的形式是指已开发过并已测试过的软件的程序块,这些程序块可以在多个软件开发工程中重用.框架提供了一个概括的体系结构模版,可以用这个模板来构建特定领域中 ...

  3. java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))

    1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...

  4. Struts 2相关配置与基本操作演示(案例Demo)

    基本介绍 Struts 2        Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2 ...

  5. Struts框架的核心业务

    Struts的核心业务 Struts核心业务有很多,这里主要介绍了比较简单一些的: 请求数据的处理,和数据自动封装,类型自动转换 1.Struts中数据处理 1.1.方式1:直接过去servletap ...

  6. 使用Struts框架,实现用户登陆功能

    前言:本篇文章是本人这周学习的一个小结,在自我总结的同时,希望也能够给其他同学带来一点帮助.本文主要知识是参照书本上的知识点以及网上其他博客文章,在上机操练后的所得,具体源码主要来自http://bl ...

  7. Struts框架 内部资料 请勿转载 谢谢合作

    Struts框架 struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发. 本章详细讨论struts架构.我们将看到struts是如何清晰地区分控制,事务逻 ...

  8. Eclipse/JavaWeb (一)三大框架之struts框架 持续更新中...

    最近主要把javaweb的三大框架过一遍. (一)发展历史 传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使得程序分为几层,有 ...

  9. Struts框架——(三)动态ActionForm

    一.DynaActionForm的引入意义 使用ActionForm把表单数据单独封装起来,而且提供了自动的数据验证,简化了代码的编写,给我们带来了极大的方便. 但是,ActionForm也存在一些明 ...

随机推荐

  1. URL中文转码问题

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. 数据回复之TestDisk的使用

    1,选择[No Log]或者是[Create]进入 2.选择好要恢复的硬盘,回车 3.选择Intel或者其他的系统,大多数选择intel(windows)使用,回车确认 4.选择[Analyse](分 ...

  3. JSON 获取属性值的方法

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ...

  4. Echart图表入门

    1.Echart是什么? Enterprise Charts的缩写,商业级数据图表,一个纯Javascript的图表库.更多的内容可以参考网上的资料 2.使用步骤 a.下载开发包 官网地址:http: ...

  5. mongoDB数据库

    1.mongoDB简介:mongoDB 为非关系数据库,集合(collection)关系数据库中的表,中存储的为json结构的文档,集合中的每一条记录都可以结构不同, 但必须都有_id字段(mongo ...

  6. ubuntu12.04 gitlab搭建

    最近在尝试内部搭建gitlab,wiki这些工具...我使用的官网的gitlab-ce包一键安装,自己搭建的ubuntu12.04 server服务器. 分配253地址,放在办公室的小角落. 配置过程 ...

  7. 前端mvc框架backbone.js入门[转]

    原文地址:http://www.cnblogs.com/zhjh256/p/6083618.html 关于backbone.js的优缺点,这里就不详谈了,网上关于这方面的讨论很多了,而且各种框架之所以 ...

  8. MySQL数据库(表)的导入导出(备份和还原)

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

  9. NHibernate系列文章二十二:NHibernate查询之HQL查询(附程序下载)

    摘要 NHibernate提供了多种查询方式,最早的HQL语言查询.Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4. ...

  10. UE4.11新特性:胶囊体阴影

    官方介绍 虚幻引擎现在支持非常柔滑的间接阴影,由代表角色的胶囊体来进行投影. 通常,在受间接光照时,并不会产生阴影,除非是屏幕空间环境遮罩.间接投影需要做的非常柔滑,因为间接光照是来自很多不同的方向, ...