一、将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文件中的配置片段:

  1. <?xml version="1.0" encoding="GBK"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  6. <!-- 定义Struts 2的核心Filter -->
  7. <filter>
  8. <filter-name>struts2</filter-name>
  9. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  10. </filter>
  11. <!-- 让Struts 2的核心Filter拦截所有请求 -->
  12. <filter-mapping>
  13. <filter-name>struts2</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16. </web-app>
<?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/javaee
http://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 的业务控制方法。

  1. <?xml version="1.0" encoding="GBK"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.7.dtd">
  5. <!-- 指定struts 2的配置文件的跟元素  -->
  6. <struts>
  7. <!-- 所有的Action定义都应该放在package下 -->
  8. <package name="mystruts" extends="struts-default">
  9. <action name="login" class="com.action.LoginAction" method="execute">
  10. </action>
  11. </package>
  12. </struts>
<?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处理用户请求结束后,通常会返回一个处理结果。我们可以认为该名称是逻辑视图名,这个罗建视图名需要和指定物理视图资源关联才有价值。所以我们还需要配置处理结果之间的对应关系。

  1. <action name="login" class="com.action.LoginAction" method="execute">
  2. <!-- 定义三个逻辑视图和物理资源之间的映射 -->
  3. <result name="input">/login.jsp</result>
  4. <result name="error">/error.jsp</result>
  5. <result name="success">/success.jsp</result>
  6. </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;实现基本的登陆功能

  1. <%@ page language="java" import="java.util.*"  pageEncoding="utf-8"%>
  2. <html>
  3. <head>
  4. <title>用户登陆</title>
  5. </head>
  6. <body>
  7. <form action="login">
  8. 用户名:<input type="text" name="username" />
  9. 密  码:<input type="password" name="password" />
  10. <input type="submit" value="登陆">
  11. </form>
  12. </body>
  13. </html>
<%@ 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的目录下

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

  1. package com.action;
  2. public class LoginAction{
  3. private String username;
  4. private String password;
  5. public String getUsername() {
  6. return username;
  7. }
  8. public void setUsername(String username) {
  9. this.username = username;
  10. }
  11. public String getPassword() {
  12. return password;
  13. }
  14. public void setPassword(String password) {
  15. this.password = password;
  16. }
  17. //定义处理用户请求的login方法
  18. public String execute(){
  19. //通过ActionContext()设置session范围的属性
  20. ActionContext.getContext.getSession().put("user", getUsername());
  21. if(getUsername().equals("chentmt")&&getPassword().equals("chenssy")){
  22. //通过ActionContext()设置reque范围的属性
  23. return "success";
  24. }
  25. else {
  26. return "error";
  27. }
  28. }
  29. }
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整合开发》

struts 2读书笔记-----struts2的开发流程的更多相关文章

  1. TIJ读书笔记02-控制执行流程

      TIJ读书笔记02-控制执行流程 TIJ读书笔记02-控制执行流程 if-else 迭代 无条件分支 switch语句 所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决 ...

  2. Struts2学习笔记二:开发流程

    一:创建项目,添加依赖包 二:在web.xml配置核心控制器 <filter> <filter-name>struts2</filter-name> <fil ...

  3. Struts 2读书笔记-----Action访问Servlet API

    Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试. 对于Web应用的控制器而言,不访问ServletAPI是几 ...

  4. Struts2技术内幕 读书笔记二 web开发的基本模式

    最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的 ...

  5. [读书笔记] Web 前端开发修炼之道

    原创地址:http://www.cnblogs.com/bnbqian/p/3735565.html 转载请注明出处 今天我们要读的书是Web 前端开发修炼之道 第1章 从网站重构说起 1.1 糟糕的 ...

  6. 《大象 Thinking in UML》读书笔记:软件开发——从现实世界到对象世界

    参考:Process-oriented vs. Object-oriented 前言 软件行业在采用OO的思想后,从一开始只对编码使用OO,到现在“分析-设计-编码”全部环节使用OO,形成了OOA.O ...

  7. flask读书笔记-flask web开发

    在应用启动过程中, Flask 会创建一个 Python 的 logging.Logger 类实例,并将其附属到应用实例上,通过 app.logger 访问 ===================== ...

  8. Struts2应用的开发流程

    Struts2的开发流程 为了能够在eclipse中使用Struts2在进行开发时,需要根据需要导入一些有关的jar包: 在官网下载相关的压缩包,这里下载了两个:struts-2.3.30-all.z ...

  9. 一 Struts2 开发流程

    SSH与SSM简介SSM:Spring+SpringMVC+MybatisSSH:Struts2+Hibernate+SpringStruts2:是侧重于控制层的框架Hibernate:是一个ORM( ...

随机推荐

  1. C/C++ ceil和floor函数

    ceil 是“天花板" floor 是 “地板”  一个靠上取值,另一个靠下取值,如同天花板,地板. double ceil ( double x ); float ceil ( float ...

  2. 【HDOJ】3487 Play with Chain

    Splay入门题目,区间翻转,区间分割. /* */ #include <iostream> #include <string> #include <map> #i ...

  3. Linux route命令详解和使用示例(查看和操作IP路由表)

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  4. Cocos2d-x学习之windows 7的visual studo 2010开发环境安装

    1.引擎代码的下载 官方版本地址为: http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download 目前最新版本是cocos2d-2.0-rc0a ...

  5. Using Nini .NET Configuration Library

    Using Nini .NET Configuration Library Tweet When developing a desktop application, there will be tim ...

  6. Centos环境下删除Oracle11g客户端文档

    将安装目录删除 [root@Oracle /root]# rm -rf /opt/oracle/ 将/usr/bin下的文件删除[root@Oracle /root]# rm /usr/local/b ...

  7. Linux Shell脚本中点号和source命令

    Linux中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的.就像Windows下的exe一样.如果我们要执行某一个文件,可以先将其权限修改为可执行(必须是所有者或者root才能修改).然后 ...

  8. 关于理解《C++ 对象模型》中:把单一元素的数组放在末尾,struct可以拥有可变大小的数组

    这一章在第19页,写的好深奥,我竟然没看明白在说什么--之后再看了几遍,终于明白了. 原文: C程序员的巧计有时候却成为c++程序员的陷阱.例如把单一元素的数组放在一个struct的末尾,于是每个st ...

  9. js函数参数设置默认值

    php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){  return $a+$b;}echo simue(); //输出3echo ...

  10. openstack libtray

    OpenStack packages¶ Distributions release OpenStack packages as part of the distribution or using ot ...