一、将struts 2的lib文件夹下地commons-fileupload.jar、commons-io.jar、freemarker.jar、javassist.jar、ognl.jar、struts2-core.jar和xwork-core.jar必需类复制到web应用的WEB-INF/lib路径下。如果需要在web应用中使用struts 2的更多特性,则需要将相应的JAR文件复制到web应用的WEB-INF/lib路径下。

二、编辑Web应用的web.xml配置文件,配置Struts 2 的核心Filter。在web.xml中定义核心Filter是来拦截用户请求。

由于Web应用是基于请求/响应构建的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心filter或者servlet,这样才可以让该框架介入Web应用中。

下面是struts 2 在web.xml文件中的配置片段:

<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><!-- 定义Struts 2的核心Filter --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!-- 让Struts 2的核心Filter拦截所有请求 --><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

三、如果需要以POST方式提交请求,则需定义包含表单数据的jsp页面。若果仅仅只是以GET方式放送请求,则不需要。

四、定义处理用户请求的Action类

这是所有MVC框架中必不可少的。因为Action就是MVC框架中的控制器。该控制器负责调用model里的方法来处理请求。

MVC框架的底层机制是:核心servlet或者Filter接收到用户的请求后,通常会对用户请求进行简单的预处理,例如解析、封装参数等,然后通过反射来创建Action实例,并调用Action的指定方法来处理用户的请求。

但是当Servlet或Filter拦截请求后,它如何知道创建那个Action的实例?这里一般有两种方法可以解决

1:利用配置文件。如:我们可以配置login.action对应使用LoginAction类。这样就可以让MVC框架知道创建那个Action的实例了。

2:利用约定。如:我们可以约定xxx.action总是对应XxxAction类。如果核心控制器收到请求后,将会调用相应的Action类来处理用户请求。

五、配置Action

配置Action就是指定哪个请求对应哪个、Action进行处理,从而让核心控制器根据配置来创建合适的Action实例,并调用该Action 的业务控制方法。

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><!-- 指定struts 2的配置文件的跟元素  -->
<struts>  <!-- 所有的Action定义都应该放在package下 --><package name="mystruts" extends="struts-default"><action name="login" class="com.action.LoginAction" method="execute"></action></package>
</struts> 

六、配置处理结果和物理视图资源之间的对应关系

当Action处理用户请求结束后,通常会返回一个处理结果。我们可以认为该名称是逻辑视图名,这个罗建视图名需要和指定物理视图资源关联才有价值。所以我们还需要配置处理结果之间的对应关系。

<action name="login" class="com.action.LoginAction" method="execute"><!-- 定义三个逻辑视图和物理资源之间的映射 --><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/success.jsp</result>
</action>

七、编写视图资源

经过这个几个步骤,我们基本可以完成一个struts 2 的配置

下面一个完整的struts 2 的实例

1、配置核心Filter

代码和上面的一样

2、编写jsp页面:命名为login.jsp;实现基本的登陆功能

<%@ page language="java" import="java.util.*"  pageEncoding="utf-8"%>
<html><head><title>用户登陆</title></head><body><form action="login">             用户名:<input type="text" name="username" />            密  码:<input type="password" name="password" />           <input type="submit" value="登陆">       </form></body>
</html>

3、配置Action  。命名为struts.xml  并放在src的目录下

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd"><!-- 指定struts 2的配置文件的跟元素  -->
<struts>  <!-- 所有的Action定义都应该放在package下 --><package name="mystruts" extends="struts-default"><action name="login" class="com.action.LoginAction" method="execute"><!-- 定义三个逻辑视图和物理资源之间的映射 --><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/success.jsp</result></action></package>
</struts>

4、编写处理用户请求的Action类

package com.action;public class LoginAction{private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}//定义处理用户请求的login方法public String execute(){//通过ActionContext()设置session范围的属性ActionContext.getContext.getSession().put("user", getUsername());if(getUsername().equals("chentmt")&&getPassword().equals("chenssy")){//通过ActionContext()设置reque范围的属性return "success";}else {return "error";}}
}

配置这些资源后,我们就可以通过浏览器来访问了:http://localhost:8080/struts2_01/login.jsp可以看到如下界面

           读李刚《轻量级java EE企业应用实战(第三版)—struts 2+Spring 3+Hibernate整合开发》

转载于:https://www.cnblogs.com/oversea201405/archive/2012/02/16/3752302.html

struts 2读书笔记-----struts2的开发流程相关推荐

  1. 【读书笔记】游戏开发原理

    游戏开发原理读书笔记 Contents 游戏开发原理读书笔记 一.游戏与游戏设计 1 游戏类型与平台 1.1 类型和子类型 1.2 出品类型 1.3 平台 1.4 图形类型 1.5 交付方式 1.6 ...

  2. Java笔记11-软件开发流程设计原则

    今天内容: 1.常用的设计原则 2.常用的设计模式 3.常用的查找算法 4.常用的排序算法 1.常用的设计原则(记住) 1.1软件的开发流程 软件开发授权-投标 -> 100万 1. 编写需求分 ...

  3. Struts 2读书笔记-----使用Action的动态方法调用

    struts 2提供了包含处理多个逻辑的Action,从而允许一个Action内包含多个控制处理逻辑.例如一个页面中存在多个按钮,用户通过不同的按钮提交同一个表单时,可以使用Action的不同的方法来 ...

  4. [读书笔记] 敏捷软件开发:原则、模式与实践

    关于面向对象编程的一些理解,这本书主要看六大原则的部分,书中关于设计模式的内容由于之前的那本<设计模式与游戏完美开发>已经很好的讲解了游戏开发领域的应用,所以不多关注. 面向对象的六大原则 ...

  5. Struts 2读书笔记-----使用Struts 2的输入校验

               输入校验是所有的Web应用必须处理的问题.一个健壮的应用系统必须可以阻止一些非法的输入,防止这些非法的输入进入系统.这样才可以保证系统不受到影响. 输入校验可以分为客服端校验和服 ...

  6. 读书笔记:redis开发与运维 基础篇

     redis特性    1>速度快:redis所有数据都是存放在内存中,是redis速度快的主要原因,是有c编写,一般来说用c编写的程序距离操作系统近,执行速度更快,非阻塞I/O,使用epoll ...

  7. 读书笔记-Office 365开发入门指南

    作者博客 Office 365 开发概览系列 - 随笔分类 - 陈希章 - 博客园  https://www.cnblogs.com/chenxizhang/category/967796.html ...

  8. 笔记连载 | Day2-3开发流程篇之ISE 14.7

    ​听说99%的同学都来这里充电吖 本系列为线下学员学习笔记整理分享,如有想要报名参加线下培训,可以点击以下超链接文章了解,购买开发板可以到叁芯智能科技企业淘宝店下单. 各类研修班 | FPGA就业研修 ...

  9. 【读书笔记】Android开发艺术探索

    作者:张明云 链接:http://zhuanlan.zhihu.com/zmywly8866/20308214 来源:知乎 第一章:Activity的生命周期和启动模式 1.当前Activity的on ...

最新文章

  1. 一个很好的 emacs 配置文件范例
  2. 并发编程-18AQS同步组件之 CyclicBarrier 同步屏障
  3. cmake linux编译,Ubuntu 16.04编译cmake源码
  4. 项目中最常用到的颜色
  5. [css] 标签、class和id选择器三者的区别是什么?分别在什么时候用?
  6. 现代软件工程讲义 2 开发技术 - 单元测试 amp; 回归测试
  7. “我们完全误解了区块链!”
  8. 【转】Zookeeper入门
  9. BZOJ 2243: [SDOI2011]染色(树链剖分)
  10. python爬取数据库数据类型_python中从搭建Mysql平台到爬取数据一站式全部完成
  11. linux 数据转为曲线图,Linux系统下生成TPS,ResponseTime曲线图
  12. 2019年中国公有云厂商发展状况白皮书
  13. Ubuntu 安装 QEMU
  14. 相亲聊什么?想要避免尬聊,就从这6个话题入手
  15. 不同收入水平职工家庭 申请公积金贷款情况
  16. 大数据之Javase
  17. 微信开发调试,常见问题解决
  18. DL/T645-2007电表协议 数据域DATA注意事项
  19. python计算绩效工资编程_Python实战精选:计算销售提成
  20. ParameterizedType类型设置默认值

热门文章

  1. mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?
  2. 160 - 8 Andrnalin.1
  3. C++语法:vector的使用
  4. Java SecurityManager getSecurityContext()方法与示例
  5. 面向对象(封装对象private关键字)
  6. 汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式)
  7. 不进行格式化将U盘快速转换为NTFS格式
  8. 242. 有效的字母异位词 golang
  9. C++ 对引用的理解4
  10. 转载一篇关于curl的文章