2019独角兽企业重金招聘Python工程师标准>>>

前言:虽然现在ssh开发满天飞,但是对于初学者来说,未必是好事,从基础学起,一步一个脚印,也许对他们来说更好。

接下来的时间里,讲解一个struts的简单案例,从基础学起,有兴趣的朋友可以慢慢看来。

概要:Front Controller(模式)

说明:讲解struts具体例子之前,先说明一下Front Controller模式(前端控制器模式)。struts就是它的具体实现,得以扩展,并且是Model2结构的完整实现。

Model2结构通过一个控制组件来接受请求,这个控制组件本身可以为请求提供服务,也可以把这项任务分配给其他一些组件。生成响应信息的任务接着被分配给适当的视图组件。实现这种要求的方式很多,Front Controller就是其中一种。

实现前端控制器可以采取不同的策略,一种典型的策略是使用一个servlet问题:如果把所有的功能集中起来会出现一个大而臃肿的控制器组件,它将负责整个Web的相关处理。

解决:办法之一是使用多个前端控制器,分别负责某一方面的处理任务。另一种解决方案是使用Command and Controller(命令与控制器)(稍候介绍)

下面是这种Front Controller模式示例程序框架实现:
public class FrontController extends HttpServlet {
protected void processRequest(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(nextView);
dispatcher.forward(req, res);
}

protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}

protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}
}

在这里,它只是HttpServlet一个简单的扩充,默认实现了doGet()和doPost()方法,这两个方法负责把请求分配给另一个叫processRequest()的方法。这是为了保证不论发出什么请求,前端控制器都能为之提供服务。

在processRequest()的方法中我们省去主要部分,但实际上前端控制器将先执行与请求关联的处理,然后再把它分配给一个视图组件来生成相关的 响应信息。视图组件一般是JSP页面。控制器完成了自己的业务逻辑之后,它就可以通过RequestDispatcher把处理分配给一个JSP.到此你 可能会提出一个问题。如果控制器要负责处理所有的请求,那么它怎么知道各请求都是什么以及如何处理呢?(Command and Controller,上面问题所提到的,现在开始讲解)

Command and Controller策略

在Command and Controller策略中,处理每个具体请求的逻辑被转移到了一个单独的组件中。

这些额外组件各表示一个具体的命令(或操作,既action),并且组件中封装着执行相关操作的逻辑。

前端控制器把对请求的处理分配给适当的命令组件。

操作类

为了实现Command and Controller策略,首先需要定义位于控制器和操作组件之间的接口。

public abstract class Action {

public abstract String process(HttpServletRequest req, HttpServletResponse res);

}

关于请求类型的通信

这里的处理如下:FrontController Servlet和URI/controller/*之间定义了一个映射
<servlet>
<servlet-name>FrontController</servlet-name>
<servlet-class>com.wxhx.controller.FrontController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FrontController</servlet-name>
<url-pattern>/controller/*</url-pattern>
</servlet-mapping>

为了从附加路径信息中获得的字符串映射到一个特定的操作实例上,当然,同样有很多策略可供选择,其中最灵活的就是把这种映射外部化,例如可以通过一个XML文件。

为了简单起见,我们在这里建立一个单独的组件,用于封装这种映射。

public class ActionHelper {
private static HashMap actions = new HashMap();
static {
actions.put(”Login”, “com.sample.LoginAction”);
}
public static Action getAction(String name) {
Action action = null;
try {
Class c = Class.forName((String) actions.get(name));
action = (Action) c.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return action;
}
}
    好了,以上就是要实现的一个简单的框架类FrontController,Action以及辅助的ActionHelper类

下一步是把所有这些处理插入到FrontController的processRequest方法中,这将是Web应用程序中所有请求的单一入口:

public class FrontController extends HttpServlet {
protected void processRequest(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

String actionName =req.getPathInfo().substring(1);
Action action =ActionHelper.getAction(actionName);

String nextView =action.process(req, res);

RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(nextView);
dispatcher.forward(req, res);
}

protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}

protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}
}

具体相关内容可参见实例!

TAG: Struts struts

转载于:https://my.oschina.net/shareforum/blog/376

适合初学者的struts简单案例相关推荐

  1. Python,Scrapy 爬虫框架,简单入手的案例(适合初学者阶段入手的案例)

    [项目目录] 1) 分析目标网站 2) 创建项目 3) 保存数据csv 1) 分析目标网站 目标网址 我们先分析页面是怎样的,这个网页比较简单,适合新手练练. 网 网页结构也比较简单,所以我们就用CS ...

  2. python有什么简单项目_python有什么简单项目适合初学者?

    python有什么简单项目适合初学者?下面我将介绍几个简单的Python小项目,便于大家学习提升自己的Python开发水平.感兴趣的朋友一起来了解一下吧. 适合初学者学习的项目: 实例一:满分推荐,非 ...

  3. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个扁平化风格css螃蟹图形~~适合初学者~超简单~ |前端开发|IT软件

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个扁平化风格css螃蟹图形~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <! ...

  4. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个复古手机键盘(带声音)的动画效果~~适合初学者~超简单~

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个复古手机键盘(带声音)的动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTYPE ...

  5. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个电风扇动画效果~适合初学者~超简单~ |前端开发|IT软件

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个电风扇动画效果~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTYP ...

  6. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |it前端开发

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!D ...

  7. 【web前端特效源码】使用HTML5+CSS3制作一个会动的音频loading加载动画效果~~适合初学者~超简单~ |前端开发|IT编程

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个会动的音频loading加载动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTY ...

  8. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个影子~~适合初学者~超简单~ |前端开发|IT软件

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个影子特效~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTYPE ...

  9. 【web前端特效源码】使用HTML5+CSS3制作一个会动的不规则斑点边框半径动画的动画效果~~适合初学者~超简单~ |前端开发

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个会动的不规则斑点边框半径动画的动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCT ...

最新文章

  1. 虽然现在没有闲也没有钱,还是建立了自己的BLOG,因为心里很痒
  2. 【数据结构基础应用】【查找和排序算法】
  3. Apache 目录结构与配置指令
  4. 2749元!华为nova 5开启预售:7nm工艺麒麟810处理器加持
  5. preprocessing.StandardScaler中fit、fit_transform、transform的区别
  6. linux读取.data文件,Android获取文件夹路径 /data/data/
  7. 根据Excel生成建表语句sql——工具介绍
  8. 软考网络工程师笔记-分值分布
  9. Linux网络服务(network service)管理
  10. Kettle下载与安装教程【保姆版】
  11. 洛谷T30768 动感超人520
  12. html td 超链接,web开发---给td添加超链接
  13. 中医大计算机考试题目,中医大计算机复习题-20210319205538.docx-原创力文档
  14. 【web性能】获取web各个阶段响应时间:服务器响应时间、首页白屏时间、dom渲染完成时间等
  15. java左手画圆右手画方_左手画圆,右手画方真的很难吗?为什么人们很难做到呢?...
  16. 微程序控制计算机的工作原理,微程序控制器的基本原理详细图解
  17. linux bin文件制作,linux 将脚本制作成二进制bin文件
  18. PDF合并,PDF拆分,PDF转换
  19. foobar2k折腾窗口中显示歌词
  20. 沃达丰已在英国7城推出5G网络 部分设备由华为提供

热门文章

  1. jquery mobile : 外链接失效 a href not working
  2. 深入理解Magento – 第二章 – Magento请求分发与控制器
  3. Python实例讲解 -- 操作数据库 附mysqldb win32 py2.7下载
  4. 10款Flash和Javascript网页音乐播放器
  5. Python_正则表达式入门(实例讲解)
  6. 机器学习降维算法五——KPCA算法
  7. Tomcat实战-调优方案
  8. 机器学习速成课程 | 练习 | Google Development——编程练习:稀疏数据和嵌套简介
  9. MongoDB基本概念和常用操作(二)
  10. 《C和指针》——指向数组的指针(逐个移动和逐行的区别)