整个实现过程分为两部分:
1.服务器启动->初始化过滤器->加载struts.xml
2.浏览器发送请求->过滤->struts.xml中查找动作类名->实例化动作类
每次发送请求都会实例化action类,所以发现struts的action类是多个的。(所以spring集成struts 2后,还需要配置action类为多个example。)
实现一个简单的struts 2案例
1.在web.xml中配置filter,过滤所有路径
<!-- 配置 struts 前端控制器 -->
< filter >
< filter-name > struts </ filter-name >
< filter-class > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </ filter- class >
</ filter >
< filter-mapping >
< filter-name > struts </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
2.准备Struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts 配置 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
< struts >
< package name = " 22p1 " extends = " struts-default " >
< action name = " hello " class = " cn.itcast.action.HelloAction " method = " hello " >
< result name = " success " 类型= “调度员” > /success.jsp </结果>
</动作>
</包>
</ struts >
3.编写HelloAction
公共 类 HelloAction {
/**
* 被请求到一个类后要执行的方法:action方法
* @返回
*/
public String hello ( ) {
System . 出来。println ( "你好,方法执行了……" ) ;
返回 “成功” ;
}
}
4.索引.jsp
< html >
< head >
< title > $Title$ </ title >
</ head >
< body >
<!-- struts2默认*.action的核心过滤器有无后缀url请求-->
< a href = " ${pageContext.request.contextPath }/hello.action " >访问 hello.action </ a > < br >
< a href = " ${pageContext.request.contextPath }/hello ">访问你好</a>
< /
body > < / html >
5.成功.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
< html >
< head >
< title > $Title$ </ title >
</ head >
< body >
< h1 >执行成功!</ h1 >
</ body >
</ html >
如何从struts获取request、response、session和ServletContext
包cn . 投射。动作;
进口组织。阿帕奇。支柱2 。拦截器。ServletRequestAware ;
进口组织。阿帕奇。支柱2 。拦截器。Servlet响应意识;
进口组织。阿帕奇。支柱2 。拦截器。会话感知;
进口组织。阿帕奇。支柱2 。效用。Servlet上下文感知;
导入javax 。小服务程序。服务小程序上下文;
导入javax 。小服务程序。网址。HttpServletRequest ;
导入javax 。小服务程序。网址。HttpServlet 响应;
导入javax 。小服务程序。网址。HTTPSession ;
进口爪哇。效用。地图;
公共 类 HelloAction 实现 ServletRequestAware 、 ServletResponseAware 、 SessionAware 、 ServletContextAware {
private HttpServletRequest httpServletRequest ;
私人HttpServletResponse httpServletResponse ;
私人地图<字符串,对象>会话;
私有ServletContext servletContext ;
公共字符串你好(){
系统。出来。println ( "你好,方法执行了……" ) ;
返回 “成功” ;
}
@Override
public void setServletRequest ( HttpServletRequest httpServletRequest ) {
这个。httpServletRequest = httpServletRequest ;
}
@Override
public void setServletResponse ( HttpServletResponse httpServletResponse ) {
这个。httpServletResponse = httpServletResponse ;
}
@Override
public void setSession ( Map < String , Object > map ) {
这个。会话=地图;
}
@Override
public void setServletContext ( ServletContext servletContext ) {
这个。servletContext = servletContext ;
}
}
struts 2的六个配置文件
Struts2的核心配置文件有两类,一共六个。按照加载顺序分别描述如下:
I类:内置配置文件,不可修改。
(1)default.properties
位置:struts 2-core-2.3.24.jar\ org.apache.struts2 目录
功能:定义一些常量(键值对)。一些功能开关。
(2)struts-default.xml
位置:struts 2-core-2.3.24.jar目录末尾
功能:定义Bean元素、结果集类型、拦截器等。
(3)struts-plugin.xml
位置:插件包根目录
功能:用于扩展的一些配置。
第二类:用户自定义配置文件,可修改
(1)struts.xml
位置:用户项目src下。
功能:用于用户开发的配置,如action、result等。
(2)struts.properties
位置:一般在用户项目的src下。
作用:只能用来配置一些常量(覆盖内置的default.properties中的常量配置)
也不是很好用。可以在struts.xml中直接配置常量
(3)web.xml
位置:WEB-INF目录下作用可以配置struts 2的核心filter和struts 2的一些常量(一般不用来配置常量)
注:这里的加载顺序是指常量的加载顺序struts 2配置的,不是整个web.xml文件,web.xml会在tomcat启动的时候加载。
所有配置文件的读取顺序为:1 default.properties —2、struts-default.xml —3、struts-plugin.xml —4、struts.xml —5、struts.properties —6、web.xml中的常量配置
当然,常量的配置并不是在struts.properties和web.xml中配置,在struts.xml中配置即可。
这些加载顺序都体现在struts 2的核心控制器中,源码如下:
在init方法中,调用init的initDispatcher方法加载配置文件,进入代码:
我们会发现这个方法调用调度员的 init 方法再次。进入init方法:
这一系列代码用于加载struts 2的配置文件。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习