1. Struts2.0 概述

  • Struts 2.0 是以 WebWork 为核心,采用拦截器的机制来处理用户的请求;
  • Struts 2.0 是一个基于 MVC 设计模式的 Web 层框架;
  • Struts 2.0 本质上相当于一个 servlet;

1.1 Web 层框架的特点

  • 前端控制器模式;
  • Struts 2.0 框架的前端控制器就是过滤器;
  • 配置 Struts 2.0 的环境,必须在 web.xml 中配置核心的过滤器;

2. Struts 环境搭建

2.1 配置 Struts2 的前端控制器

  • Struts2 的前端控制器就是一个过滤器,需要在 web.xml 中配置;
  • 前端控制器的类路径和名称:

    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
// web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2.2 编写 Action 类

  1. Action 类是动作类,是 Struts2 处理请求,封装数据,响应页面的核心控制器;

    • 一般以 "xxxAction" 方式命名 action类
    • 该类中的方法必须是 public 类型;
    • 该类中的方法必须有 String 类型的返回值;
    • 方法名称是任意的,但是不能有参数;
  2. 页面跳转
    • return "要跳转的页面(字符串)";
    • 需要 src 目录下的 struts.xml 中配置跳转的页面;
    • 路径写法: 在 struts2 框架中,不管是转发还是重定向,都不用写项目名;

2.3 编写 struts 的配置文件

  • 配置文件的名称必须是 struts.xml;
  • 配置文件的路径必须是在 src 目录下;
// action 类
public class HelloAction{ public String sayHello(){
System.out.println("........."); // 跳转页面
return "ok";
}
} // src/struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="default" namespace="/" extends="struts-default">
// 配置 action
<action name="hello" class="com.itheima.action.HelloAction" method="sayHello">
// 配置跳转的页面
// 在 struts2 框架中,不管是转发还是重定向,都不用写项目名;
<result name="ok">/demo/suc.jsp</result>
</action>
</package>
</struts>

3. Struts2 框架的配置文件

3.1 配置文件加载顺序

  1. Struts2 框架的核心是 StrutsPrepareAndExecuteFilter 过滤器,该过滤器有两个功能:

    • Prepare: 预处理,加载核心的配置文件;
    • Execute: 执行,让部分拦截器执行;
  2. StrutsPrepareAndExecuteFilter 过滤器会加载哪些配置文件?
    • init_DefaultProperties(): 加载 org/apache/struts2/default.properties;
    • init_TraditionalXmlConfigurations():

               加载 struts-default.xml, struts-plugin.xml, struts.xml;
    • init_LegacyStrutsProperties(): 加载自定义的 struts.properties;
    • init_CustomConfigurationProviders(): 加载用户自定义配置提供者
    • init_FilterInitParameters(): 加载 web.xml;
  3. 重点了解的配置文件
    • default.properties: 配置的是 struts2 中的常量值, 例如编码等;
    • struts-default.xml: 配置的是 struts2 的核心功能,例如 Bean, 拦截器和结果类型等;
    • struts.xml: 配置的是 web应用中的内容,在工作中,基本就配置它; 也可以配置常量;
    • web.xml: 配置前端控制器,可以配置常量;
    • 开发中,基本都在 struts.xml 中配置常量;

3.2 struts.xml 配置文件的配置

3.2.1 <package> 标签包含的属性
  • name: 包的名称,要求是唯一的,用来管理 action;
  • extends: 继承,一般都是继承 struts-default; 也可以继承其他的包;
  • namespace: 名称空间, 一般与 <action> 标签中的 name 属性共同决定了访问路径;
  • abstract: 抽象的,这个属性很少被使用,值如果为 true,表示该包是用来被继承的;
3.2.2 <action> 标签包含的属性
  • name: 和 <package> 标签的 namespace 属性一起来决定访问路径;
  • class: 配置 Action 类的全路径(默认值是 ActionSupport 类);
  • method: Action 类中执行的方法, 如果不指定, 默认值是 execute;
3.2.3 <result> 标签包含的属性
  • name: 结果页面逻辑视图名称;
  • type: 结果类型(默认值是转发);

3.3 struts2 配置常量

3.3.1 哪些配置文件中可以配置常量
  • web.xml: 在 StrutsPrepareAndExecuteFilter 配置文件中配置初始化参数;
  • struts.xml: <constant name="常量名" value="常量值"></constant>
3.3.2 常用的常量
  • struts.i18n.encoding=UTF-8: 指定默认编码集;
  • struts.action.extension=action,,: 指定需要 struts2 处理的请求后缀, 默认值是 action

    即所有匹配 *.action 请求,都由 struts2 处理;
  • struts.serve.static.browserCache=true: 设置浏览器是否支持缓存静态内容, 默认值是 true;

    开发阶段最好关闭; 生产环境下使用;
  • struts.configration.xml.reload=false: 当 struts 的配置文件修改后,系统是否自动重新加载该文件;

    默认值是 false;
  • struts.devMode=false: 开发阶段使用,这样可以打印出更详细的错误信息;

3.4 指定多个 struts 的配置文件

  • 为了避免 struts.xml 文件过于庞大,提高 struts.xml 文件的可读性,可以将一个 struts.xml 配置文件

    分解成多个配置文件, 然后在 struts.xml 文件中包含其他配置文件;
// struts.xml
<struts>
<include file="cn/itheima/domain/struts_user.xml"/>
</struts>

4. Action 类

4.1 Action 类的三种写法

  1. Action 类是一个 POJO 类. POJO(Plain Ordinary Java Object),没有继承某个类,没有实现接口,就是 POJO 类.
  2. Action 类可以实现 Action 接口
    • Action 接口中定义了 5 个常量的值,对应的是 5 个逻辑视图跳转页面, 还定义了一个 execute 方法;
    • 5个逻辑视图常量:
      • SUCCESS : 成功;
      • INPUT :用于数据表单校验,如果校验失败,跳转 INPUT 视图;
      • LOGIN :登录;
      • ERROR : 错误;
      • NONE : 页面不跳转;
  3. Action 类可以去继承 ActionSupport 类(开发中使用最多);

4.2 Action 类中方法的访问

4.2.1 第一种方式
  • 通过 <action> 标签中的 method 属性,访问的 Action 中的具体方法;
// 页面代码
<a href="${pageContext.request.contextPath}/addBook.action">添加图书</a>
<a href="${pageContext.request.contextPath}/deleteBook.action">删除图书</a> // 配置文件的代码
<package name="demo2" extends="struts-default" namespace="/">
<action name="addBook" class="cn.itcast.demo2.BookAction" method="add"></action>
<action name="deleteBook" class="cn.itcast.demo2.BookAction" method="delete"></action>
</package> // Action 类的代码
public class BookAction extends ActionSupport{
public String add(){
System.out.println("添加图书");
return NONE;
}
public String delete(){
System.out.println("删除图书");
return NONE;
}
}
4.2.2 第二种方式
  • 通配符的访问方式: 访问的路径和方法的名称必须要有某种联系;
  • 可以简化配置文件的代码编写,而且扩展和维护比较容易
// 页面代码
<a href="${pageContext.request.contextPath}/order_add.action">添加订单</a>
<a href="${pageContext.request.contextPath}/order_delete.action">删除订单</a> // 配置文件代码
<package name="demo3" extends="struts-default" namespace="/"> // 通配符的方式, 数字 1, 代表第一个星号
<action name="order_*" class="cn.itcast.demo2.OrderAction" method="{1}">
<result name="saveOK">xxxx</result>
<result name="delOK">xxxx</result>
</action>
</package> // Action 类的代码
public class OrderAction extends ActionSupport{
public String add(){
System.out.println("添加订单");
return saveOK;
}
public String delete(){
System.out.println("删除订单");
return delOK;
}
}
4.2.3 第三种方式
  • 动态方法访问的方式, 需要开启一个常量 struts.enable.DynamicMethodInvocation=true;
  • 在 struts.xml 中设置该常量
    • <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
// 页面代码
<a href="${pageContext.request.contextPath}/product!add.action">添加商品</a>
<a href="${pageContext.request.contextPath}/product!delete.action">删除商品</a> // 配置文件代码 struts.xml
<action name="product" class="cn.itcast.demo2.ProductAction"></action> // Action 类的代码
public class ProductAction extends ActionSupport{
public String add(){
System.out.println("添加订单");
return NONE;
}
public String delete(){
System.out.println("删除订单");
return NONE;
}
}

参考资料

Struts 2.0 入门的更多相关文章

  1. Struts 2 初步入门(三)

    接Struts 2初步入门(二) 若想用多个通配符设定访问: <struts> <package name="default" namespace="/ ...

  2. ASP.NET Core 1.0 入门——了解一个空项目

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  3. ASP.NET Core 1.0 入门——Application Startup

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  4. Struts 2.0全面分析

    Struts 2.0 struts 1---前端控制+应用控制+命令模式 webwork ---控制器+拦截器+代理 Struts 2.0 继承了WebWork的设计理念,并没有继承struts 1, ...

  5. Omnet++ 4.0 入门实例教程

    http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...

  6. 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记

    VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...

  7. spring web flow 2.0入门(转)

    Spring Web Flow 2.0 入门 一.Spring Web Flow 入门demo(一)简单页面跳转 附源码(转) 二.Spring Web Flow 入门demo(二)与业务结合 附源码 ...

  8. Json.Net6.0入门学习试水篇

    原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...

  9. SignalR 2.0 入门与提高

    SignalR 2.0 入门与提高 SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP ...

随机推荐

  1. Atitit.atiJsBridge 新特性v7q329

    Atitit.atiJsBridge 新特性v7q329 atiJsBridge 未来计划 Postdata  图像上传的支持 Simp param计划 p1 p2 p3 p4 $method 的si ...

  2. Decoration1:Spring-boot基础实现

    前段时间发布的Traveller项目,花费了不少精力,但是效果并不如意,根源在于瀑布式的开发思想不适合这种独立的学习项目.在项目初始就规划一个全面的web系统,,因为预设了一个前景,在心理上会想尽快看 ...

  3. hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@'  表示的是起点,'#' 表示的是障碍物不能通过,'.'  表示的是路能通过的: ...

  4. quick-cocos2d-x的热更新机制实现

    quick-cocos2d-x的热更新机制实现 0 依赖 这里说的热更新,指的是客户端的更新. 大致的流程是,客户端在启动后访问更新api,根据更新api的反馈,下载更新资源,然后使用新的资源启动客户 ...

  5. Installing scipy on redhat with error “no lapack/blas resources found”

    这是更新scipy出现的结果,需要新版本的scipy,而机器上只装了0.7的版本,更新的时候报错,找到了一个解决方法: wget http://mirror.centos.org/centos/6/o ...

  6. linux命名对文件的读写和退出

    vi xxx.txt 打开就能看到里面的内容.按 i 进入编辑模式,然后就可以输入内容了,也可以移动光标到你要删除内容的位置按删除键来删除内容.编辑完后可以按 Esc(键盘左上角) 进入命令模式.然后 ...

  7. CI 点击图片刷新验证码

    <img src="<?php echo site_url('home/login/code'); ?>" onclick= this.src="< ...

  8. ajax取消重复请求

    var pendingRequests = {}; $.ajaxPrefilter(function(options, originalOptions, jqXHR) { var key = opti ...

  9. MySQL Migration Toolkit启动报jre错误

    正常启动的话,会报出“an error occurred during the initialization of the runtime system.Please make sure you ha ...

  10. 01 Java图形化界面设计——容器(JFrame)

    程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构,现在就进入java图形化界面编程. 一.Jav ...