Struts 2.0 入门
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 类
- Action 类是动作类,是 Struts2 处理请求,封装数据,响应页面的核心控制器;
- 一般以 "xxxAction" 方式命名 action类
- 该类中的方法必须是 public 类型;
- 该类中的方法必须有 String 类型的返回值;
- 方法名称是任意的,但是不能有参数;
- 页面跳转
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 配置文件加载顺序
- Struts2 框架的核心是 StrutsPrepareAndExecuteFilter 过滤器,该过滤器有两个功能:
- Prepare: 预处理,加载核心的配置文件;
- Execute: 执行,让部分拦截器执行;
- 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;
- 重点了解的配置文件
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 类的三种写法
- Action 类是一个 POJO 类. POJO(Plain Ordinary Java Object),没有继承某个类,没有实现接口,就是 POJO 类.
- Action 类可以实现 Action 接口
- Action 接口中定义了 5 个常量的值,对应的是 5 个逻辑视图跳转页面, 还定义了一个 execute 方法;
- 5个逻辑视图常量:
- SUCCESS : 成功;
- INPUT :用于数据表单校验,如果校验失败,跳转 INPUT 视图;
- LOGIN :登录;
- ERROR : 错误;
- NONE : 页面不跳转;
- 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 入门的更多相关文章
- Struts 2 初步入门(三)
接Struts 2初步入门(二) 若想用多个通配符设定访问: <struts> <package name="default" namespace="/ ...
- ASP.NET Core 1.0 入门——了解一个空项目
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- ASP.NET Core 1.0 入门——Application Startup
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Struts 2.0全面分析
Struts 2.0 struts 1---前端控制+应用控制+命令模式 webwork ---控制器+拦截器+代理 Struts 2.0 继承了WebWork的设计理念,并没有继承struts 1, ...
- Omnet++ 4.0 入门实例教程
http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...
- 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记
VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...
- spring web flow 2.0入门(转)
Spring Web Flow 2.0 入门 一.Spring Web Flow 入门demo(一)简单页面跳转 附源码(转) 二.Spring Web Flow 入门demo(二)与业务结合 附源码 ...
- Json.Net6.0入门学习试水篇
原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...
- SignalR 2.0 入门与提高
SignalR 2.0 入门与提高 SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP ...
随机推荐
- Unity3D刚体不同力的测试(ForceMode,AddForce,RelativeAddForce)
摘自圣典的一段翻译: ForceAdd a continuous force to the rigidbody, using its mass.添加一个可持续力到刚体,使用它的质量.Accelerat ...
- C++游戏系列5:不止有一件武器
很多其它见:C++游戏系列文件夹 知识点:对象数组作为数据成员 改进:每一个角色所持有的武器不仅仅一件,故持有的武器,用了对象数组来表示,当然,也能够是空手. 由此而带来的,还得记录一共同拥有几件武器 ...
- 解决:eclipse配置Database Connections报错Communications link failure Last packet sent to the server was 0 ms ago
网上各式各样的问题,不过我的问题在于我开了Proxifier,导致链接localhost的时候被拦截...把Proxifier关了就好了 以后遇到这种问题.连不上数据库啊,连不上本地的服务器啊,先检查 ...
- 基于Html5+HLS协议播放符合部标1078协议的实时流媒体视频
由于现在主流的部标GPS和1077视频监控平台,都是BS架构,在网页上播放视频,早期的很多平台用的都是ActiveX控件的形式,依赖于IE浏览器,需要降低浏览器的安全设置,而且非常难用.同时由于win ...
- 八大CMS内容管理系统推荐
cms系统哪个好 感谢 64320 的投递 时间:2015-03-05 来源:http://www.iisp.com/ztview/ID_16129.html?s=bios 耐思尼克 很多新手站长初次 ...
- jQuery 实战读书笔记之第四章:使用特性、属性和数据
使用属性 /* 每个元素都有一或多个特性,,这些特性的用途是给出相应元素或其内容的附加信息.(出自 JavaScript 高级程序设计) */ /* 特性是固有的 JavaScript 对象 属性指的 ...
- DIV的内容自动换行
word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行. 它们的区别就在于: 1,word-break:break-all 例如div宽 ...
- UITextField小结
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...
- Master Sudoku:Get The Skill
自己做的小游戏 google play store: https://play.google.com/store/apps/details?id=com.ffipp.sodoku app store: ...
- .NET开发笔记--对config文件的操作(1)
1先写一些常用的公共类: 在Web.config文件中的配置: <!-- appSettings网站信息配置--> <appSettings> <add key=&quo ...