zoukankan      html  css  js  c++  java
  • struts2学习笔记(一)

    配置文件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类似
  • 相关阅读:
    [UE4]九宫格图片拉伸
    [UE4]IsValid方法妙用
    [UE4]蓝图函数库
    [UE4]创建KillInfoPanel
    [UE4]条件语句Select
    [UE4]控件模板参数
    [UE4]控件模板
    [UE4]不推荐的UI更新方式
    [UE4]事件驱动的UI更新:事件调度器
    [UE4]更新UI的三种方式
  • 原文地址:https://www.cnblogs.com/goujh/p/8664538.html
Copyright © 2011-2022 走看看