Struts2概述:
一:struts2的入门案例:版本为struts-2.3.24
步骤:
1.1:先去官网下一个struts2,结构如下
1.2:创建一个web项目,然后把lib文件夹中的jar包导入进去,但注意暂时不是全部导入,那该导入哪些呢?,
直接将示例代码里面的jar包拷贝过来就行!
1.3:在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>
1.4:在src下面创建一个名为struts.xml的文件【名称和位置固定】
注:既然有xml, 那么可能会有约束文件dtd或者schema, 不知道写还是从示例代码拷贝
<?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>
</struts>
1.5:编写一个类
public class HelloAction {
/**
* 每次请求的时候,都会执行execute()
* 跟Servlet,每次执行service()一样!,其实很多地方相似
* @return
*/
public String execute() {
System.out.println("hello");
return "ok";
}
}
1.6:在配置文件中配置一下:
二:struts2的底层执行过程
注:请求的时候最好带上.action, 虽然不带也可以,但有的杂牌浏览器却不支持!
其实仔细想想跟之前的Servlet流程本质上差不多
三:Struts2的相关配置
3.1:struts.xml
1.package标签的属性
name属性:只是为了给package命个名而已,和功能本身没有关系的
extends属性: 固定值 struts-default, 让配置的类具有action的功能
namespace属性:namespace属性值和action标签中的name属性值构成访问路径!
2.action标签的属性
name属性:namespace属性值和action标签中的name属性值构成访问路径!
class属性:action类的全路径
method属性:默认是执行Action类中的execute(), 但是还有其他方法,怎么执行呢?method="方法名"就ok了
3.result标签的属性
name属性:和Action类中方法的返回值一样
type属性:默认是转发操作,也可以设置为重定向,不单单是jsp,也可以是其他Action!
3.2:常量配置
struts2框架在常量中封装了一部分功能,默认的常量位置在: org.apache.struts2下面的default.properties
如何修改struts2中的默认常量值
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
3.3:分模块开发:就是在其他配置文件中写完,如何引入到struts.xml核心配置文件中!
<!--分模块开发:引入user.xml -->
<include file="cn/itcast/demo/user.xml"></include>
四:Action的编写方式(三种)
4.1:继承ActionSupport:推荐:ActionSupport也实现了Action接口
4.2:实现Action接口
4.3:就写一个普通的类
五:访问Action的方法
public class BookAction extends ActionSupport{
public String add() {
System.out.println("add()...");
return Action.NONE;
}
public String update() {
//这样就可以得到request,通过request也可以得到session !
HttpServletRequest request = ServletActionContext.getRequest();
System.out.println("update()...");
return NONE;
}
}
<?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="bookDemo" extends="struts-default" namespace="/">
<!--method就是你Action类中想执行的那个方法 ,默认执行execute方法 -->
<!--
<action name="addAction" class="cn.itcast.demo.BookAction" method="add"></action>
<action name="updateAction" class="cn.itcast.demo.BookAction" method="update"></action>
<!--缺点:Action中的每个方法都得配置! -->
-->
<!--
使用通配符来实现
比如: book_add, 那么在method={1} 就是add, 占位符,
但是如果cn.itcast.demo.BookAction,没有add(),那么页面就会报错500
-->
<action name="book_*" class="cn.itcast.demo.BookAction" method="{1}"></action>
</package>
</struts>