struts2基本配置
Struts2概述
1 struts2框架应用javaee三层结构中web层框架
2 struts2框架在struts1和webwork基础之上发展全新的框架
3 struts2解决问题:
4 struts2版本
2.3.24
5 web层常见框架
(1)struts2
(2)springMVC
Struts2框架入门
第一步 导入jar包
(1)在lib中有jar包,不能把这些jar都导入到项目中
(2)到apps目录里面,找到示例程序,从示例程序复制jar包
第二步 创建action
public class HelloAction { public String execute() { return "ok"; } }
第三步 配置action类访问路径
(1)创建struts2核心配置文件
- 核心配置文件名称和位置是固定的
- 位置必须在src下面,名称 struts.xml
(2)引入dtd约束
<?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">
(3)action配置
<struts> <package name="hellodemo" extends="struts-default" namespace="/"> <action name="hello" class="com.wm.hello.HelloAction"> <result name="ok">/hello.jsp</result> </action> </package> </struts>
第四步 配置struts2过滤器
在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>
Struts2执行过程
Struts2的核心配置文件:struts.xml
1 名称和位置固定的
src根目录下
2 在配置文件中主要三个标签 package、action、result,标签里面的属性
标签package
1 类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package里面才能 配置action
2 package标签属性
(1)name属性
- name属性值根功能本身没有关系的,
- 在一个配置文件中可以写多个package标签,name属性值不能相同的
(2)extends属性
- 属性值固定的,struts-default
- 写了这个属性之后,在package里面配置的类具有action功能
(3)namespace属性
- namespace属性值和action标签里面的name属性值构成访问路径
标签action
1 action标签配置action访问路径
2 action标签属性
(1)name属性
- namespace属性值和action标签里面的name属性值构成访问路径
- 在package标签里面写多个action标签,但是action的name属性值不能相同的
(2)class属性
- action全路径
(3)method属性
- 比如在action里面默认执行的方法execute方法,但是在action里面写其他的方法
- 让action里面多个方法执行,使用method进行配置
标签result
1 根据action的方法返回值,配置到不同的路径里面
2 result标签属性
(1)name属性
- 和方法返回值一样
(2)type属性
- 配置如何到路径中(转发或者重定向)
- type属性默认值 做转发操作
Struts2常量配置
1 struts2框架,帮我们实现一部分功能,struts2里面有常量,在常量里面封装一部分功能
2 修改struts2默认常量值
(1)常用的方式
- 在struts.xml中进行配置
(2)还有两种方式(了解)
- 在src下面创建 struts.properties,进行修改
- 在web.xml进行配置
3 最常用常量
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
(1)表单提交数据到action里面,在action可以获取表单提交数据,
(2)表单提交数据有中文,有乱码问题,解决:
- post提交直接设置编码
- get提交做编码转换
(3)如果在action获取表单通过post方式提交中文,中文乱码问题帮解决了,不需要自己处理问题
分模块开发
1 单独写配置文件,把配置文件引入到核心配置文件中
<include file="com/wm/hello/hello.xml"></include>
Action编写方式
1 action编写有三种方式
第一种 创建普通类,这个不继承任何类,不实现任何接口
public class HelloAction { }
第二种 创建类,实现接口 Action : 必须重写execute方法
public class HelloAction implements Action{ public String execute() { return "ok"; } }
另外可以使用Action中的变量SUCCESS,NONE,ERROR来表示返回成功,无返回,失败
第三种 创建类,继承类 ActionSupport(一般使用)
public class HelloAction extends ActionSupport{ public String execute() { return "ok"; } }
访问action的方法(重点)
1 有三种方式实现
第一种 使用action标签的method属性,在这个属性里面写执行的action的方法
第二种 使用通配符方式实现
第三种 动态访问实现(不用)
2 演示错误
(1)如果action方法有返回值,在配置文件中没有配置,出现错误
(2)在action里面的方法有返回值,如果有返回值时候类型必须是String
(3)action里面的方法可以没有返回值,没有返回值时候,在result标签不需要配置
- 把方法写成void
- 让返回值,返回 ”none”
public String execute() { return NONE; }
使用action标签method属性
1 创建action,创建多个方法
public String add() { System.out.println("add......"); return NONE; } public String update() { System.out.println("update......"); return NONE; }
2 使用method配置
<action name="add" class="com.wm.hello.HelloAction" method="add"></action> <action name="update" class="com.wm.hello.HelloAction" method="update"></action>
缺陷:action每个方法都需要配置,如果action里面有多个方法,配置很多的action
使用通配符实现(重点)
1 在action标签里面name属性,name属性值里面写 符号 * 星号
(1)* 理解: 表示匹配任意内容
- 比如访问hello,* 可以匹配到
- 比如访问add,* 可以匹配到
<!-- name属性值里面写符号 * (1)执行action里面的add方法,访问 book_add,使用book_*可以匹配到,*相当于变成 add (2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成 update 上面两个路径使用 book_* 可以匹配到 method属性写*值 --> <action name="book_*" class="cn.itcast.method.BookAction" method="{1}">