文章目录
Struts2概述
应用在三层框架中web层框架
struts1和webwork基础上发展的全新的框架
解决的问题
入门案例
开发流程
新建web项目
第一步:导入jar包 (从例子里面直接导)
第二步:创建Action
(1)每次访问servlet执行service方法
- 继承HttpServlet,重写类中的方法
- 在web.xml中配置servlet访问路径
(2)每次访问action默认执行execute方法
public String execute(){ return "ok"; }
第三步:配置action访问路径
(1)创建action访问路径
核心action配置文件名称和位置是固定的
- (在src下)struts.xml
(2)引入dtd约束
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
(3)action配置
<!-- struts的action必须放在一个指定的包空间下定义 --> <package name="liu" extends="struts-default"> <!-- name:访问名称 --> <action name="hellodemo" class="com.HelloAction"> <!-- 根据方法的返回值跳转到页面 --> <result name="success">/upload/upload_re.jsp</result> </action> </package>
访问路径:http://127.0.0.1:8080/xxx/hello.action
标准浏览器action写不写都没问题
(4)配置struts2过滤器
web.xml
<!--配置struts2过滤器 --> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
struts2执行的基本过程
struts2源代码
1、过滤器在服务器启动时创建,创建过滤器时执行init方法
在init方法中加载配置文件
包含自己创建的配置文件和struts2自带的配置文件
- 自己创建
- struts.xml
- web.xml
struts2配置
struts2核心配置文件
1、名称和位置是固定的
2、在配置文件中三个标签 package、action、result,标签里面的属性
package标签
类似于代码中的包,区别不同的action,要配置action必须首先写package标签,在package里面才能配置action
package里面有三个属性
name:跟功能本身没有什么关系,一个配置文件中可以写多个package标签,name属性值不能相同
extends: extends=“struts-default”
- 属性值固定
- 写了这个属性,在package中配置的类具有action的功能
namespace:
属性值和action标签里面的name属性值构成访问路径,不写默认为/
<!-- struts的action必须放在一个指定的包空间下定义 --> <package name="liu" extends="struts-default"namespace="/"> <!-- name:访问名称 --> <action name="hellodemo" class="com.HelloAction"> <!-- 根据方法的返回值跳转到页面 --> <result name="success">/upload/upload_re.jsp</result> </action> </package> <!-- 访问路径为http://127.0.0.1:8080/xxx/hello.action-->
action标签
1、action标签配置action的访问路径
2、action标签属性
- name属性:
- namespace属性值和action标签里面的name属性值构成访问路径。
- 在package标签里面有多个action标签,但是action的name属性不能相同。- class属性:
- action的全路径- method属性:
- 比如在action里面执行excecute方法,但是在action里面写其他的方法
- 让action里面的多个方法的执行,使用method进行配置。
- result标签
1、根据action的返回值,配置到不同的路径里面(页面/action)
2、result标签的属性
name属性:与方法的返回值一样
<result name="ok">/hello.jsp</result>
type属性:
- 配置如何到路径中(转发或者重定向)
- type属性默认值:做转发操作
struts2常量配置
1、常用方式
在strusts.xml中进行配置
2、还有两种方式 - 在src下面创建struts.properties进行修改 - 在web.xml下进行配置
常用配置
1、表单提交到action里面,在action可以获取表单提交数据2、表单提交数据有中文乱码问题,解决方法:
- post:提交直接设置编码
- get:提交做编码转换
3、如果是在action获取表单通过post方式提交中文,中文乱码问题解决了,不需要自己处理问题。
分模块的开发
单独写配置文件,把配置文件引入到核心配置模块当中
<!-- 引入hello.xml--> <include file="cn/zzb/action/hello.xml"></include>
Action的编写方式
1、action的编写有三种方式
第一种 创建普通类,不继承,不实现
public class UserAction { }
第二种 创建类,实现接口Action
实现接口里面的方法execute
public class UserAction implements Action{ //.... }
第三种 创建类,继承ActionSupport
public class UserAction extends ActionSupport{ //.... }
Action方法的访问
第一种:使用action标签的method属性,在这个属性里面写执行的action的方法
第二种:使用通配符方式实现(最多)
<action name="book_*" class="cn.zzb.BookAction" method={1}>
- 其中book_add 对应 method: add
*号匹配任意字符
第三种:动态访问实现
经常错误:
1、如果action方法有返回值,在配置文件中没有配置,出现错误
2、在action方法有返回值,如果有返回值,返回值必须是String
3、action方法里面可以没有返回值,result标签不需要配置
- 方法写void
- 返回值写NONE(或者“none”)