配置文件web.xml和struts.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:spring/applicationContext*.xml
</param-value>
</context-param> <!-- 敏感字符过滤器 -->
<filter>
<filter-name>ParamsFilter</filter-name>
<filter-class>cn.com.sinosoft.core.utils.web.ParamsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ParamsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 网销专用过滤器 -->
<filter>
<filter-name>CommonsSaleFilter</filter-name>
<filter-class>cn.com.sinosoft.filter.CommonsSaleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CommonsSaleFilter</filter-name>
<url-pattern>/sale/template/*</url-pattern>
</filter-mapping> <filter>
<filter-name>sessoinFilter</filter-name>
<filter-class>cn.com.sinosoft.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessoinFilter</filter-name>
<url-pattern>/service/*</url-pattern>
</filter-mapping> <filter>
<filter-name>vipFilter</filter-name>
<filter-class>cn.com.sinosoft.filter.VipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>vipFilter</filter-name>
<url-pattern>/service/*</url-pattern>
</filter-mapping> <!-- webservices服务器端 start -->
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- webservices服务器端 end --> <!--Spring ApplicationContext 载入 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- Spring 刷新Introspector防止内存泄露 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener> <!-- 初始化缓存 -->
<listener>
<listener-class>cn.com.sinosoft.listener.InitCache</listener-class>
</listener> <!--Hibernate Open Session in View Filter -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<!-- hibernateFilter位置放在此处是为解决延迟加载和事务提交的问题 -->
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <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>/sale/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/service/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/comment/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/config-browser/*</url-pattern>
</filter-mapping> <filter>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/sale/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/service/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/pay/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/comment/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/config-browser/*</url-pattern>
</filter-mapping> <!-- js,css  资源压缩 -->
<filter>
<filter-name>WebResourceOptimizer</filter-name>
<filter-class>ro.isdc.wro.http.WroFilter</filter-class>
</filter> <filter-mapping>
<filter-name>WebResourceOptimizer</filter-name>
<url-pattern>/wro/*</url-pattern>
</filter-mapping> <!-- 页面元素的GZIP压缩 Filter --> <!-- session超时定义,单位为分钟 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 出错页面定义 -->
<error-page>
<error-code>500</error-code>
<location>/common/page/404.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/common/page/404.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/common/page/404.jsp</location>
</error-page> <jsp-config>
<taglib>
<taglib-uri>fmt</taglib-uri>
<taglib-location>/WEB-INF/tlds/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>core</taglib-uri>
<taglib-location>/WEB-INF/tlds/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>fn</taglib-uri>
<taglib-location>/WEB-INF/tlds/fn.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>ecs</taglib-uri>
<taglib-location>/WEB-INF/tlds/ecs.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>dict</taglib-uri>
<taglib-location>/WEB-INF/tlds/dict.tld</taglib-location>
</taglib>
</jsp-config> <!-- load spring context -->
<servlet>
<servlet-name>InitSpringContextServlet</servlet-name>
<servlet-class>cn.com.sinosoft.core.spring.InitSpringContextServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> </web-app>

定义filter,此处加载struts2过滤器。

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

定义web服务器通知项,即,符合“/*”的URL请求都交给命名为“struts2”的过滤器(即,org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)处理。
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

struts.xml

形如:<constant name="" value=""/>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--开发阶段配置,在web服务器出错时会尽量打印出来,一样也是生产阶段设置为false,避免后台结构被人发现-->
<!-- <constant name="struts.devMode" value="true"/> -->
<!--配置文件修改后是否自动重新部署到服务器,开发阶段需要设置为true,否则需要不时重启服务器-->
<!-- <constant name="struts.convention.classes.reload" value="true"/> --> <!--设置Convention插件定位视图资源的根路径,默认为/WEB-INFO/content -->
<constant name="struts.convention.result.path" value="/"/>
<!--如果设置为false,则可以将视图页面放置Action对应的目录(无需放入WEB-INFO/content) -->
<constant name="struts.convention.result.flatLayout" value="false"/>
<!--Convention搜索Action类的类名后缀,默认为Action -->
<constant name="struts.convention.action.suffix" value=""/>
<!--是否禁止通过包扫描Action,默认是false -->
<constant name="struts.convention.action.disableScanning" value="false"/>
<!--设置即使没有@Action注释,是否依然创建Action映射。默认值为false -->
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<!--设置是否所有实现com.opensymphony.xwork2.Action的Action都创建Action映射,默认是true -->
<constant name="struts.convention.action.checkImplementsAction" value="true"/>
<!--设置Convention映射的Action所在包的默认父包。默认值是convention-default -->
<constant name="struts.convention.default.parent.package" value="json-package"/>
<!--设置映射Action时,是否将Action的name属性值转换为所有字母小写,默认值是true -->
<constant name="struts.convention.action.name.lowercase" value="true"/>
<!--设置映射Action时指定name属性值各单词之间的分隔符。默认值为中画线(“-”) -->
<constant name="struts.convention.action.name.separator" value="-"/>
<!--默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索 -->
<constant name="struts.convention.package.locators" value="web"/>
<!--如果指定了该常量,Convention只会以该常量值开始的包中搜索Action类 -->
<constant name="struts.convention.package.locators.basePackage" value="cn.com.sinosoft"/> <!--设置Convention插件是否从jar包中搜索Action类 [可选] 默认值为true -->
<constant name="struts.convention.action.disableJarScanning" value="true" />
<!-- 设置Convention插件文件协议类型-->
<constant name="struts.convention.action.fileProtocols" value="jar,wsjar" />
<!--设置Convention插件需要搜索的jar包-->
<constant name="struts.convention.action.includeJars" value=".*?/*.*?jar(!/)?" /> <!--指定禁止从Action的根包里搜索Action。默认值为false -->
<constant name="struts.convention.package.locators.disable" value="false"/>
<!--指定排除在搜索Action之外的包。默认值为org.hibernate.* ... -->
<constant name="struts.convention.exclude.packages" value="org.hibernate.*"/>
<!--指定Convention映射的Result时默认支持的结果类型。默认值为dispatcher,velocity,freemarker -->
<constant name="struts.convention.relative.result.types" value="dispatcher,velocity,freemarker"/>
<!--设置是否重定向到斜线(/)。例如用户请求/foo,但/foo不存在时,如果设置该常量为可重定向到/foo/。默认值是true -->
<constant name="struts.convention.redirect.to.slash" value="true"/>
<!-- 文件大小10M -->
<constant name="struts.multipart.maxSize" value="10485760"/> <package name="json-package" extends="convention-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>
</package> </struts>

@Action/@Result:

@Action指定一个类为action,对应配置文件中的<action>....</action>标签,其中可以配置如下属性

  1.results:配置返回的结果集属性,相当于struts2中的<result>列表,可以在{}中配置属性
  2.value:配置action的名字,相当于<action>中的name属性
  3.interceptorRefs:配置拦截器
@Action可以定义在类上,也可以定义在方法上

@Action(value = "testAction",results = {@Result(name="success",location="/success.jsp")})
public class testAction extends ActionSupport { @Override
public String execute() throws Exception {
return SUCCESS;
}
}
public class AccidentSaleAction extends BaseAction {

  @Action(value = "accidentPage", results = {
@Result(name = "paypage", location = "toPayPage", type = "chain"),
@Result(name = "accident/main", location = "accident/main.jsp") ,
@Result(name = "accident/quote", location = "accident/quote.jsp") ,
@Result(name = "accident/fillin", location = "accident/fillin.jsp"),
@Result(name = "accident/confirm", location = "accident/confirm.jsp"),
@Result(name = "fromError", location = "common/page/fromError.jsp")}
)
public String accidentPage() throws Exception {
// TODO 关闭核心接口 用于开发
if (!CommonConstant.isCoreServiceFunctional) {
logger.warn("警告:检测到已关闭核心接口调用,核心返回数据将采用随机生成策略!");
}
  }
}

@Result实现跳转到另一个action

@ParentPackage(value="struts-default")
@Action(value="studentAdd",results={
@Result(name="success",type="chain",location="studentList"),
@Result(name="error",location="/usererror.jsp")
})

chain 用于把相关的几个action连接起来,共同完成一个功能。处于chain中的action属于同一个http请求,共享一个ActionContext

另外补充:同一个action中  一个方法跳转至另一个方法 "user"  为该action的命名

@Result(name = "success", location = "user", type = "chain", params = { "method", "index" })

@Result/@Results:

@Result配置具体返回结果,在results中使用,也可以单独在类上使用,有如下属性

  1. name:对应<result>中的name属性
  2. location:对应<result></result>间的地址
  3. type:对应<result>的type属性

@Result可以在类上声明,也可以和Action配置声明,如果在类上声明,那么就是全局的结果,如下

@Result(name="delete",location = "/delete.jsp")
public class testAction extends ActionSupport {
@Action(value = "add", results = { @Result(name = "add", location = "/add.jsp") })
public String add() throws Exception {
return "add";
} @Action(value = "delete")
public String delete() throws Exception {
return "delete";
}
}
虽然delete方法没有指定返回delete时要跳转到哪个页面页面,但是在类上用@Result声明了,那么就会找到类上面的这个@Result,然后跳转到delete.jsp页面

@Results是用来声明多个结果集,用法和@Actions类似

struts2学习笔记(一)的更多相关文章

  1. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  2. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  3. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  4. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  5. struts2学习笔记 ⑤

    拦截器初探 昨天临睡觉之前看了看拦截器,也在昨天的学习笔记里面胡诌诌了几句,今天就来好好的会会拦截器这个东西.实际上拦截器是一种模块实现的机制<起码我是这么体会的>(至于说书里面说体现了A ...

  6. [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...

  7. struts2学习笔记之二:基本环境搭建

    学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6   首先建立一个web项目,并 ...

  8. 【Struts2学习笔记-4】包含其他配置文件

    包含其他配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLI ...

  9. 【Struts2学习笔记-3】常量配置

    Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...

  10. struts2学习笔记(4)——数据类型转换

    回过头来看昨天的那个例子. 在昨天的例子中,只转换了一个Point类,如果想转换多个Point类怎么办呢?在昨天的例子上面做一个小的修改. 首先在input.jsp页面中修改几个输入框. <s: ...

随机推荐

  1. 个人小爱好:Operating System: three easy pieces—第6章第3小节问题2#进程间的切换

    问题2#:进程间的切换 直接执行的下一个问题是如何实现进程的切换.进程的切换按理说是挺简单的,对吧?不就是决定哪一个进程应该停止,哪一进程应该开始而已,才多大点事情啊?但,事实上这还真的有点棘手:尤其 ...

  2. java 中重写toString()方法

    toString()方法 一般出现在System.out.println(类名.toString()); toString()是一种自我描述方法 本身返回的是 getClass().getName() ...

  3. 1.7Oob对象的创建局部变量

    1:局部变量不会被系统自动初始化,所以局部变量必须进行初始化操作. 2:break是跳出当前循环体,return是跳出当前循环体和方法 并且结束外围循环体和方法,continue是跳过本次循环 3:创 ...

  4. Python+Django 后台view异步接不到参数问题

    因为后台需获取前台的多个ID参数(checkbox) //获取checkbox的每个ID并放到数组内var _items = []; var items = document.getElementsB ...

  5. ZBX_NOTSUPPORTED: Cannot obtain filesystem information: [13] Permission denied

    zabbix有默认两条自动发现规则,其中一条是自动发现已挂载文件系统,但笔者的三个挂载文件系统中两个监控成功了,一个失败 agentd端挂载情况: 仔细研究sdb1的挂载点,发现它是挂载在xiami用 ...

  6. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  7. python基础(7)-函数&命名空间&作用域&闭包

    函数 动态参数 *args def sum(*args): ''' 任何参数都会被args以元组的方式接收 ''' print(type(args)) # result:<class 'tupl ...

  8. 【二次开发】shopxo商城

    https://shopxo.net/ [问题1:配置邮箱注册]https://ask.shopxo.net/article/19

  9. 一个ping大包不通问题的解决过程

    1.问题描述 存在问题: 深圳的采集机MQ程序无法与应用服务器进行通讯,表现为:获取小数据时正常,获取大数据时超时 场景图如下 2.数据下载测试 使用SCP工具和FTP工具进行数据下载测试,主要是想排 ...

  10. pip 更改国内镜像

    2 pip 更改国内镜像 pip 默认不使用国内镜像,但是我们可以自己设置 -[pypi 镜像使用帮助] 临时使用 pip install -i https://pypi.tuna.tsinghua. ...