暑期在一网络公司进行实习,期间因工作需要,对于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中配置好。
分享到:
相关推荐
高中生暑假学习总结(范文)..doc
【中学生暑假学习总结】 暑假是中学生巩固学习成果、自我提升的重要时期。在这个阶段,学生需要合理规划时间,自主安排学习与休闲活动,以保持良好的学习状态。然而,从暑假学习总结来看,存在一些普遍问题和挑战。...
骨干教师暑期学习总结学习总结.doc
小学生暑假个人学习总结范文_暑假学习总结5篇.docx
【教师暑假学习总结】 本次暑假,侯村中学数学教研组的教师们参与了一次为期10天的暑期培训,这是一次集理论与实践于一体的深度学习活动。在培训过程中,教师们不仅对教学目标、教学评价、教学组织以及特殊学生的...
【标题】: 初中暑假学习总结 【主要内容解析】: 初中暑假是学生们巩固知识、提升能力的关键时期,尤其对于即将升入初三的学生而言。赵主任的《初三寒假学习方法指导》提供了宝贵的学习策略,强调了规划、稳定性和...
学校暑期学习总结
【大学生暑假学习总结报告】 暑假期间,大学生们有机会通过实习深入了解社会,积累实践经验,为未来就业和职业生涯奠定基础。以下是对大学生暑假学习总结报告的主要知识点的详细解析: 1. **实习的意义**:实习是...
【初中暑假学习总结】 在暑假期间,学习是一个重要的任务,特别是对于初中生而言,这个阶段是为中考打下坚实基础的关键时期。赵主任提出的《初三寒假学习方法指导》提供了宝贵的建议,强调了制定计划、研究考试说明...
学校暑期学习总结.doc
【2021骨干教师暑期学习总结】 暑期的“领雁工程”科学骨干教师培训班为我提供了一次宝贵的提升自我专业素养的机会。这次培训中,我深入理解到反思型教师的重要性,以及如何在科学课堂中真正实现以学生为中心的教学...
教师暑期学习总结主要聚焦在教育理念的更新、教师角色的转变和学生地位的提升,这些都是新课程改革的核心要素。在教育行业中,不断的学习和自我提升是至关重要的,尤其是在快速发展的教育环境中。 首先,教师的教学...
这篇文档主要围绕中考作文范文和暑假学习总结展开,揭示了学习和写作的关键在于勤奋与观察。作者通过自身的学习经历,阐述了勤奋对于学业的重要性,并以此鼓励同学们面对学习挑战时要坚持不懈。 首先,作者强调了...
【教师暑假学习总结范文】 暑假期间,教师们并未停下学习的脚步,反而利用这段时间进行自我提升,以期在新的学期更好地服务于教育事业。这次东北之行的培训活动,为教师们提供了一个宝贵的提升平台,让我们来看看...
骨干教师暑期学习总结.doc
英语组暑期学习总结.doc
一年级语文暑假学习总结归纳.doc
暑假远程教育学习总结 在21世纪的教育领域,远程教育已经成为了不可或缺的一部分,它以其灵活性和便捷性深受广大师生的欢迎。今年暑假,我有幸参加了中小学教师远程教育培训,这是一次富有成果的学习经历,让我对...
【标题】:2021暑假个人学习总结 【描述】:本文是对2021年暑假期间个人学习经历的回顾和总结,作者通过参与本科学习和在海宁教师博客网的写作,体会到了持续学习和提升自身素质的重要性。 【标签】:个人学习、...
考研政治的暑期学习是整个考研复习的关键阶段,其目的是在有限的时间里高效地掌握知识点,提升分析和解决问题的能力。以下是对这一阶段复习策略的详细解析: 首先,考生需要树立科学的考研理念,对每一门学科都要有...