Struts框架——(一)用Servlet + JSP演示Struts基本原理
一. 用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基本原理的更多相关文章
- Eclipse搭建Struts框架,及一个简单的Struts例子
一.下载struts2.0.1 http://struts.apache.org/downloads.html,下载struts-2.0.1-all.zip,这个压缩包中包含了开发struts2所需的 ...
- Struts框架详解
1.Struts应用框架介绍 (1)框架 框架最简单的形式是指已开发过并已测试过的软件的程序块,这些程序块可以在多个软件开发工程中重用.框架提供了一个概括的体系结构模版,可以用这个模板来构建特定领域中 ...
- java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))
1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...
- Struts 2相关配置与基本操作演示(案例Demo)
基本介绍 Struts 2 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2 ...
- Struts框架的核心业务
Struts的核心业务 Struts核心业务有很多,这里主要介绍了比较简单一些的: 请求数据的处理,和数据自动封装,类型自动转换 1.Struts中数据处理 1.1.方式1:直接过去servletap ...
- 使用Struts框架,实现用户登陆功能
前言:本篇文章是本人这周学习的一个小结,在自我总结的同时,希望也能够给其他同学带来一点帮助.本文主要知识是参照书本上的知识点以及网上其他博客文章,在上机操练后的所得,具体源码主要来自http://bl ...
- Struts框架 内部资料 请勿转载 谢谢合作
Struts框架 struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发. 本章详细讨论struts架构.我们将看到struts是如何清晰地区分控制,事务逻 ...
- Eclipse/JavaWeb (一)三大框架之struts框架 持续更新中...
最近主要把javaweb的三大框架过一遍. (一)发展历史 传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使得程序分为几层,有 ...
- Struts框架——(三)动态ActionForm
一.DynaActionForm的引入意义 使用ActionForm把表单数据单独封装起来,而且提供了自动的数据验证,简化了代码的编写,给我们带来了极大的方便. 但是,ActionForm也存在一些明 ...
随机推荐
- VS2013环境问题
1.多字节支持问题,多字节默认(GB2312格式),需要安装一个补丁: https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=40 ...
- C++11引用临时变量的终极解析
工作中遇到一个引用临时变量的问题,经过两天的学习,私以为:不仅弄明白了这个问题,还有些自己的独到见解. 这里使用一个简单的例子来把自己的学习过程和理解献给大家,如果有什么问题请不吝指正. **** ...
- 第一章 Andorid系统移植与驱动开发概述 - 读书笔记
Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...
- MongoDB中insert方法、update方法、save方法简单对比
MongoDB中insert方法.update方法.save方法简单对比 1.update方法 该方法用于更新数据,是对文档中的数据进行更新,改变则更新,没改变则不变. 2.insert方法 该方法用 ...
- Android常用控件及对应Robotium API
最近发现Android控件不熟悉,看Robotium的API都费劲. 常用Android控件: 控件类型 描述 相关类 Button 按钮,可以被用户按下或点击,以执行⼀个动作 Button Text ...
- EX的魔方
https://www.luogu.org/problem/show?pid=2007 题目背景 常神牛从来没接触过魔方,所以他要借助计算机来玩.即使是这样,他还是很菜. 题目描述 常神牛家的魔方都是 ...
- Func<T>、Action<T> 的区别于说明
一.Func Func是一个.Net内置的委托. Func<Result>,Func<T1,Result>是一个.Net内置的泛型委托. Func<TResult> ...
- prototype数组方法的实现
数组插入元素push Array.prototype.push=function(){ for(var i=0;i<arguments.length;i++){ this[this.length ...
- NHibernate系列文章二十:NHibernate关系之一对一(附程序下载)
摘要 NHibernate一对一关系虽然不经常碰到,但是在对于数据库结构优化的时候,经常会碰到一对一关系.比如,产品详细信息比较多的时候,可以把产品详细信息放到另一张表里面,Product主表只记录产 ...
- vs2013单元测试练习过程
1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测试项目.取名为UnitTestDemoTest 创建完 ...