概念解释
struts2框架:由apache组织针对现有servlet程序做的合理封装改进。
struts2实现action功能
public class MyAction implements Action{
public String ewxecute()throws Exception{
//1.接受请求,收参
//2.调用业务层方法完成功能
//3.跳转,通过返回值来代表跳转路径和跳转方式
return "ok";
}
}
配置struts.xml
<package name="" extends="struts-default" namespace="">
<action name="" class="">
<result name="" type="">目的路径网名</result>
</action>
</package>
访问
http://localhost:8080/module名/my
http://localhost:8080/module名/my.action
第一个Struts2框架程序
第一步:搭建开发环境
- 导入框架相关jar包(框架代码jar包+第三依赖包)
- 引入struts2框架配置文件struts.xml,将struts2.xml直接放到src下。
- 初始化配置——配置核心过滤器StrutsPrepareAndExecuteFilter
为什么配置核心过滤器?
因为当程序部署到tomcat上后,tomcat会默认去找servlet程序,但我们写的struts2程序内没有servlet程序,加入核心过滤器就是为了让tomcat进入到strtus2框架内的代码进行运行。
将核心过滤器配置在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>
第二步:书写MyAction.java
public class MyAction implements Action{
public String execute()throws Exception{
//接收请求,收参
//调用业务方法完成功能
System.out.println("this is myAction");
//跳转
return "ok";
}
}
第三步:书写配置文件struts2.xml
package:用来在当前配置文件里对action配置信息进行分块管理的标签,只在当前文件里有效,与Java程序代码里的package没有任何关系
class属性:指定action程序的全类名
name属性:指定action程序的网名(一定不能以/开头)
通过result标签设置action返回值与跳转路径的对应关系,如果有多个返回值则定义多个result标签。
标签体是跳转路径,只需要给定目标程序的网名即可。
<package name="stu" extends="struts-default" namespace="/stu">
<!-- 可以定义配置多个action信息 -->
<action name="" class="am.MyAction">
<result name="ok">/index.jsp</result>
</action>
</package>
struts2里的跳转方式
在result标签里添加type属性控制跳转方式
- action–>forward–>jsp type=despatcher
<result name="ok" type="dispatcher">/result.jsp</result>
- action–>forward–>action type=chain
<result name="ok" type="chain">action2</result>
- action–>redirect–>jsp type=redirect
<result name="ok" type="redirect">/result.jsp</result>
- action–>redirect–>action type=redirectAction
<result name="ok" type="redirectAction">action</result>
namespace属性是struts提供的分块管理网名的设置。
namespace值必须以/开头,望文生义。
一旦定义了namespace属性,程序的网名就由namespace值+网名组成
为当前package标签里所有action的网名统一添加前缀
<package name="tes" extends="struts-default" namespace="/tes">
<!-- 跨namespace跳转需要配置namespace和actionName -->
<!-- param是用来传数据、指定数据的 -->
<result name="show" type="redirectAction">
<param name="namespace">/stu</param>
<param name="actionName">all</param>
</result>
</action>
</package>
接受请求参数
单个数据收参
通过为action程序定义与参数同名的实例变量(提供配套的get和set)收参,实例变量的类型程序员可以直接指定需要的类型。
通过实体类对象收参
一个实体类对象可以接收若干个数据(数据量由实体类的属性个数决定)
代码开发顺序:实体类–>action–>表单
工具类ServletActionContext
struts2框架提供了一个工具类ServletActionContext,用来在action程序中获取servlet技术中的常用对象。
request简化写法
1.传统使用request作用的方式
public class MyAction implements Action{
public String execute(){
List<Student> list = empServlet.getData();
//如果需要使用request作用域存放数据
HttpServletRequest request = ServletActionContext.getRequest();
//将数据存入request作用域
request.setAttribute("list",list);
return "pk";
}
}
2.struts2框架提供了替换写法
//将需要存在request作用域里的数据,直接定义称实例变量(提供get和set)即可
public class MyAction implements Action{
private List<Student> list;
//相当于request.setAttribute("list",list);
public String execute(){
list = empSAervlet.getData();
return "pk";
}
}
3.注意
简化写法只针对request作用域,如果需要使用session和application作用域,则仍然使用ServletActionContext先获取对象,然后向里面存放数据。