暑假学习总结

暑期在一网络公司进行实习,期间因工作需要,对于SSH三个框架进行学习,之前也对SSH进行过简单的学习了解;当时应用最熟的是struts1,现在学习struts2,虽然两者之间改变很大,但学起来并没有感到有什么困难,当然深入了解其中机制就是另一回事了,在此只说使用方面的情况;struts2的简单配置已在另一篇文章中记录了,在此再写一遍:

在web.xml中配置如下,利用过滤器对访问进行拦截。

 

 

	<filter>
	<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 struts.xml成为其核心配置文件。其中配置:

 

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>

    <include file="example.xml"/>

    <!-- Add packages here -->

</struts>

 所有的配置内容应包含在<struts></struts>标签内,

<constant/>标签

 

<!-- 指定Web应用的默认编码集,相当于调用 HttpServletRequest的setCharacterEncoding方法 -->   
    <constant name="struts.i18n.encoding" value="UTF-8" />   
   <!--    该 属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即 所有匹配*.action的请求都由Struts 2处理。如 果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开 -->   
   <constant name="struts.action.extension" value="do" />   
   <!-- 设 置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好 关闭 -->   
   <constant name="struts.serve.static.browserCache " value="false" />   
   <!-- 当 struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生 产环境下使用),开发阶段最好打开 -->   
   <constant name="struts.configuration.xml.reload" value="true" />   
   <!-- 开 发模式下使用,这样可以打印出更详细的错误信息 -->   
<constant name="struts.devMode" value="true" />   
   <!-- 默 认的视图主题 -->   
   <constant name="struts.ui.theme" value="simple" />   
   <!-- 该 属性指定Struts 2中的action由Spring容器创 建 -->   
<constant name="struts.objectFactory" value="spring" /> 


struts.serve.static.browserCache 

该属性设置浏览器是否缓存静态内容。当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false。 

struts.enable.DynamicMethodInvocation 

该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。 

struts.enable.SlashesInActionNames 

该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true。 

struts.tag.altSyntax 

该属性指定是否允许在Struts 2标签中使用表达式语法,因为通常都需要在标签中使用表达式语法,故此属性应该设置为true,该属性的默认值是true。 

struts.devMode 

该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值,该属性的 默认值是false。通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,则该属性设置为false。 

struts.i18n.reload 

该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件。该属性默认值是false。在开发阶段将该属性设置为true会更有利于开发, 但在产品发布阶段应将该属性设置为false。 

提示 开发阶段将该属性设置了true,将可以在每次请求时都重新加载国际化资源文件,从而可以让开发者看到实时开发效果;产品发布阶段应该将该属性设置为 false,是为了提供响应性能,每次请求都需要重新加载资源文件会大大降低应用的性能。 

struts.ui.theme 

该属性指定视图标签默认的视图主题,该属性的默认值是xhtml。 

struts.ui.templateDir 

该属性指定视图主题所需要模板文件的位置,该属性的默认值是template,即默认加载template路径下的模板文件。 

struts.ui.templateSuffix 

该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、 Velocity和JSP模板。 

struts.configuration.xml.reload 

该属性设置当struts.xml文件改变后,系统是否自动重新加载该文件。该属性的默认值是false。 

struts.velocity.configfile 

该属性指定Velocity框架所需的velocity.properties文件的位置。该属性的默认值为 velocity.properties。 

struts.velocity.contexts 

该属性指定Velocity框架的Context位置,如果该框架有多个Context,则多个Context之间以英文逗号(,)隔开。 

struts.velocity.toolboxlocation 

该属性指定Velocity框架的toolbox的位置。 

struts.url.http.port 

该属性指定Web应用所在的监听端口。该属性通常没有太大的用户,只是当Struts 2需要生成URL时(例如Url标签),该属性才提供Web应用的默认端口。 

struts.url.https.port 

该属性类似于struts.url.http.port属性的作用,区别是该属性指定的是Web应用的加密服务端口。 

struts.url.includeParams 

该属性指定Struts 2生成URL时是否包含请求参数。该属性接受none、get和all三个属性值,分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。 


struts.custom.i18n.resources 

该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开。 


struts.dispatcher.parametersWorkaround 

对于某些Java EE服务器,不支持HttpServlet Request调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题。该属性的默认值是false。对于 WebLogic、Orion和OC4J服务器,通常应该设置该属性为true。 

struts.freemarker.manager.classname 

该属性指定Struts 2使用的FreeMarker管理器。该属性的默认值是org.apache.struts2.views.freemarker.FreemarkerManager,这是 Struts 2内建的FreeMarker管理器。 

struts.freemarker.wrapper.altMap 

该属性只支持true和false两个属性值,默认值是true。通常无需修改该属性值。 

struts.xslt.nocache 

该属性指定XSLT Result是否使用样式表缓存。当应用处于开发阶段时,该属性通常被设置为true;当应用处于产品使用阶段时,该属性通常被设置为false。 

struts.configuration.files 

该属性指定Struts 2框架默认加载的配置文件,如果需要指定默认加载多个配置文件,则多个配置文件的文件名之间以英文逗号(,)隔开。该属性的默认值为struts- default.xml,struts-plugin.xml,struts.xml,看到该属性值,读者应该明白为什么Struts 2框架默认加载struts.xml文件了。 

struts.objectFactory 

该属性指定Struts 2中的action由哪个容器创建 

 以上引自http://lian.iteye.com/blog/647177

 

<include/>标签:

 

通过其file属性将目标文件包含进来:
<include file="example.xml"/>

 <package></package>标签:

 

    <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
    <include file="struts-default.xml"></include>
    
    
    <!-- package提供了将多个Action组织为一个模块的方式
        package的名字必须是唯一的 package可以扩展 当一个package扩展自
        另一个package时该package会在本身配置的基础上加入扩展的package
        的配置 父package必须在子package前配置 
        name:package名称
        extends:继承的父package名称
        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
        namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
     -->
    <package name="com.kay.struts2" extends="struts-default" namespace="/test">
        <interceptors>
            <!-- 定义拦截器 
                name:拦截器名称
                class:拦截器类路径
             -->
            <interceptor name="timer" class="com.kay.timer"></interceptor>
            <interceptor name="logger" class="com.kay.logger"></interceptor>
            <!-- 定义拦截器栈 -->
            <interceptor-stack name="mystack">
                <interceptor-ref name="timer"></interceptor-ref>
                <interceptor-ref name="logger"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        
        <!-- 定义默认的拦截器 每个Action都会自动引用
         如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
        <default-interceptor-ref name="mystack"></default-interceptor-ref>
        
        
        <!-- 全局results配置 -->
        <global-results>
            <result name="input">/error.jsp</result>
        </global-results>
        
        <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
             name:action名称
             class: 对应的类的路径
             method: 调用Action中的方法名
        -->
        <action name="hello" class="com.kay.struts2.Action.LoginAction">
            <!-- 引用拦截器
                name:拦截器名称或拦截器栈名称
             -->
            <interceptor-ref name="timer"></interceptor-ref>
        
            <!-- 节点配置
                name : result名称 和Action中返回的值相同
                type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
             -->
         <result name="success" type="dispatcher">/talk.jsp</result>
         <!-- 参数设置 
             name:对应Action中的get/set方法 
         -->
         <param name="url">http://www.sina.com</param>
        </action>
    </package>
 

 

以上引自:http://www.cnblogs.com/kay/archive/2007/11/28/976120.html

 

struts2中action不必一定继承自ActionSupport,其默认访问方法仍为execute,struts2中的方法没有自带request和response因此若要使用这两种对象需手动加入,如:

 

private javax.servlet.http.HttpServletRequest request;
	public void setServletRequest(HttpServletRequest request) {
		// TODO Auto-generated method stub
		if(null!=request){
			this.request = request;
		}
	}

 此时action需实现ServletRequestAware接口(以便通过拦截器对request进行赋值)。

 

至于Hibernate和Spring的具体配置在此就不说了,内容太多,网上查一下比较好。Spring3.0及其以后的版本与之前版本有些不同,方便Spring分拆进行使用。

Spring与struts2、hibernate整合:

web.xml中配置:

	<context-param>  
	     <param-name>contextConfigLocation</param-name>  
	     <param-value>/WEB-INF/classes/applicationContext.xml</param-value>   
	</context-param>  
	 <listener>   
	    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
	 </listener>  

 applicationContext.xml中配置:

	 <!-- 数据源 -->  
    <bean id="dataSource"  
        class="org.apache.commons.dbcp.BasicDataSource">  
        <property name="driverClassName"  
            value="com.mysql.jdbc.Driver">  
        </property>  
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/xxx"></property>  
        <property name="username" value="xxx"></property>  
        <property name="password" value="xxx"></property>  
          
    </bean>


	<bean id="sessionFactory"  
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="dataSource">  
            <ref bean="dataSource" />  
        </property>  
        <property name="hibernateProperties">  
            <props>  
                <prop key="hibernate.dialect">  
                    org.hibernate.dialect.MySQLDialect  
                </prop>  
            </props>  
        </property>  
      
        <property name="mappingResources">  
            <list>  
                <value>news/NewsAction.hbm.xml</value>  
            </list>  
        </property>  
    </bean>

	<aop:aspectj-autoproxy/> 
	<bean id="dbAspect" class="aspect.DBAspect">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>

	<bean id="hDB" class="sshDB.HibernateDB">
	</bean>

	<bean id="newsAction" class="news.NewsAction">
		<property name="hDB" ref="hDB"/>
	</bean>
	<bean id="adminAction" class="admin.AdminAction">
	</bean>
	<bean id="userManager" class="UserManagerImpl">
	</bean>
 此时,Hibernate的配置文件 hibernate.cfg.xml 不再需要,SessionFactory也已在Spring中配置好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值