使用Struts2开发web程序 Struts2的配置文件怎么写?主要是Struts.xml和web.xml文件。求高手赐教
解决方案 »
- JNDI的小问题
- 实体类代码
- Hibernate Generic D.A.O. Framework的问题请教
- xml 生成word 再把word转成pdf
- 求j2EE书,<Patterns Of Enterprise Application Architecture >和<domain driver design>
- JavaMail发送html页面内容处理图片的问题
- JBuilder + JBoss + Oracle怎么配置好?
- 初学struts问题:Servlet action is not available
- 各位大侠救命啊!dom4j!
- 初学hibernate遇到的低级问题,请高手指教
- 再发一帖,\("▔□▔)/\("▔□▔)/求救
- 一个Oracle服务无法启动,大家都来看看啊
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"><struts>
<!--<constant name="struts.action.extension" value=".do"></constant>-->
<!-- 这只浏览器时候缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.vrowserCache" value="false"></constant>
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.serve.static.vrowserCache" value="true"></constant>
<!-- 开发模式下使用,这样可以打印出更详细的错误信息
<constant name="struts.devMode" value="true"></constant>
默认的试图主题 -->
<constant name="struts.ui.theme" value="simple"></constant>
<constant name="struts.custom.i18n.resources" value="message"/>
<package name="common" extends="struts-default">
<action name="changeKey" class="changeKey" >
<result name="success" type="json"/>
<param name="excludeProperties">.*hibernateLazyInitializer </param>
</action>
</package></struts>
web.xml<?xml version="1.0" encoding="UTF-8" ?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<result name="success" type="json"/>
<param name="excludeProperties">.*hibernateLazyInitializer </param>
</action>
这个是没删完的 ··· 记得删掉
大体内容:<?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> <!-- 设置form样式 -->
<constant name="struts.ui.theme" value="simple" />
<!-- 和spring关联 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 设置编码为utf-8 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 国际化 -->
<constant name="struts.custom.i18n.resources" value="actionMesg"></constant>
<!-- Filter -->
<include file="config/struts/filter.xml" /> <package name="myPackage" extends="struts-default" namespace="/logon">
<action name="logonAction" class="logonAction" method="doLogon">
<result name="logonSuccess">/jsp/success.jsp</result>
<result name="logonFailure">/jsp/failed.jsp</result>
</action>
<action name="logOutAction" class="logonAction" method="logOut">
<result name="logOutSuccess">/jsp/index.jsp</result>
</action>
</package>
<include file="config/struts/user.xml"></include>
<include file="config/struts/sysprivilege.xml"></include>
<include file="config/struts/role.xml"></include>
</struts>这里有个比较好的东东就是 <include >标签
通过这个标签可以把整个系统配置文件分成多个配置文件,可以按照模块进行分块,这样可读性更高。具体:
先配置Filter<?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> <include file="struts-default.xml" /> <package name="filter" extends="struts-default">
<interceptors>
<interceptor name="authority" class="permissionInterceptor" />
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<global-results>
<result name="nowrights" type="redirect">/jsp/system/lackedPower.jsp</result>
<result name="loginIsNull" type="redirect">/jsp/system/loginIsNull.jsp</result>
<result name="error" type="redirect">/jsp/system/sysError.jsp</result>
</global-results>
</package></struts>通过过滤器可以进行一些session的验证,当然也可以用struts配置的 extends 这个特性,定义一些全局跳转变量。比如:struts。xml里面有个 <include file="config/struts/user.xml"></include>对于 user。xml里面的所有action请求都要进行用户登录的验证、用户权限的验证。这样的话可以按照这种方式配置:
user.xml<?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> <include file="config/struts/filter.xml" />
<!-- 需要注意的就是这一块 extends=“filter”也就是 filter对应的 package的name -->
<package name="userPackage" extends="filter" namespace="/user">
<action name="toCreateUserAction" class="userAction" method="toInitUserCreate">
<result name="success">/jsp/user/createUser.jsp</result>
</action>
<action name="createUserAction" class="userAction" method="createUser">
<result name="success">/jsp/user/userInfo.jsp</result>
<result name="error">/jsp/user/createUser.jsp</result>
</action>
<action name="seeAllUsersAction" class="userAction" method="seeAllUsers">
<result name="success">/jsp/user/userList.jsp</result>
<result name="error">/jsp/user/createUser.jsp</result>
</action>
</package>
</struts>
这里我每个action的result都定义了一个 error , 是因为出现error跳转之后页面跳转的不同,如果你的系统里面出错之后跳转到同一个错误提示页面。那么这里就不需要定义 error了,action里面的返回如果是 “error”的话会直接跳转到 filter里面定义的 error对应的页面。还有一点一定要注意的就是 ,在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>
这样系统才会使用struts2进行系统请求的拦截,struts2 才会生效。
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--我是和spring整合的,这个监听器目的是在解析web.xml的同事解析spring.xml-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<display-name>
struts2.0
</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2.0</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2.0</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring.xml</param-value>
</context-param>
</web-app>
struts.xml<?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>
<package name="struts2.0" extends="struts-default">
<action name="login" class="com.zh.web.action.LoginAction">
<result name="input">/login.jsp</result>
<!--正确后跳转的页面-->
<result name="success">/result.jsp</result>
<result name="failer">/login.jsp</result>
</action>
</package>
</struts>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="com.wawi.gyzs.action" namespace="/gyzs" extends="struts-default">
<result-types>
<result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
<param name="root">jsonRoot</param>
</result-type>
</result-types>
<!-- 项目信息 -->
<action name="projectAction_*" method="{1}" class="com.wawi.gyzs.action.ProjectAction">
<result name="list">/pages/project/projectList.vm</result>
<result name="projectStatus">/pages/project/projectStatus.vm</result>
<result name="changeProjectStatus">/pages/project/changeProjectStatus.vm</result>
<result name="add">/pages/project/addProject.vm</result>
<result name="edit">/pages/project/editProject.vm</result>
<result name="projectcontract">/pages/project/projectcontractlist.vm</result>
<result name="projectcontract2">/pages/project/projectcontract2list.vm</result>
<result name="projectcontract3">/pages/project/projectcontract3list.vm</result>
<result name="changeprojectcontract">/pages/project/changeprojectcontract.vm</result>
<result name="changeprojectcontract2">/pages/project/changeprojectcontract2.vm</result>
<result name="changeprojectcontract3">/pages/project/changeprojectcontract3.vm</result>
<result name="delete" type="redirectAction">projectAction_list.htm</result>
<result name="verifyProject">/pages/project/verifyProjectlist.vm</result>
<result name="verify">/pages/project/verify.vm</result>
<result name="cancelProject">/pages/project/cancelProject.vm</result>
<result name="showProjectStatus">/pages/project/showProjectStatus.vm</result>
<result name="showProjectBlow">/pages/project/showProjectBlow.vm</result>
<result name="showVerifyProject">/pages/project/showVerifyProject.vm</result>
<result name="showProject">/pages/project/showProject.vm</result>
<result name="InvInfoDialog">/pages/project/InvInfoDialog.vm</result>
<result name="chooseInvInfo">/pages/project/chooseInvInfo.vm</result>
<result name="projectBlowList">/pages/project/projectBlowList.vm</result>
<result name="projectBenefit">/pages/projectBenefit/list.vm</result>
</action> <!--项目信息 避免重复提交 -->
<action name="projectActionToken_*" method="{1}" class="com.wawi.gyzs.action.ProjectAction">
<result name="list">/pages/project/projectList.vm</result>
<interceptor-ref name="token"/>
<interceptor-ref name="defaultStack"/>
<result name="invalid.token" type="velocity">/pages/system/error.vm</result>
</action>
<action name="enterprise_*" method="{1}" class="com.wawi.gyzs.action.EnterpriseAction">
<result name="list">/pages/enterprise/list.vm</result>
<result name="add">/pages/enterprise/add.vm</result>
<result name="edit">/pages/enterprise/edit.vm</result>
<result name="view">/pages/enterprise/view.vm</result>
</action>
<action name="managementCategory_*" method="{1}" class="com.wawi.gyzs.action.ManagementCategoryAction">
<result name="list">/pages/managementCategory/list.vm</result>
<result name="add">/pages/managementCategory/add.vm</result>
<result name="edit">/pages/managementCategory/edit.vm</result>
<result name="view">/pages/managementCategory/view.vm</result>
</action>
<action name="projectAvailability_*" method="{1}" class="com.wawi.gyzs.action.ProjectAvailability" >
<result name="projectList">/pages/projectAvailability/projectList.vm</result>
<result name="list">/pages/projectAvailability/list.vm</result>
<result name="add">/pages/projectAvailability/add.vm</result>
<result name="relist" type="redirect">projectAvailability_list.htm?projectId=${projectId}</result>
</action>
<action name="projectBenefit_*" method="{1}" class="com.wawi.gyzs.action.ProjectBenefitAction" >
<result name="projectList">/pages/projectBenefit/projectList.vm</result>
<result name="projectList2">/pages/projectBenefit/projectList2.vm</result>
<result name="list">/pages/projectBenefit/list.vm</result>
<result name="list2">/pages/projectBenefit/list2.vm</result>
<result name="add">/pages/projectBenefit/add.vm</result>
<result name="addIsTrue">/pages/projectBenefit/addIsTrue.vm</result>
<result name="relist" type="redirect"><![CDATA[projectBenefit_list.htm?projectId=${projectId}&add=${add}]]>
</result>
<result name="relist2" type="redirect"><![CDATA[projectBenefit_list.htm?projectId=${projectId}&add=${add}]]></result>
<result name="projectBenefitSaved" type="redirect"><![CDATA[projectAction_projectBenefit.htm?projectId=${projectId}&msgstatus=0]]>
</result>
</action>
<action name="area_*" method="{1}" class="com.wawi.gyzs.action.AreaAction">
<result name="tree">/pages/area/tree.vm</result>
<result name="index">/pages/area/index.vm</result>
<result name="list">/pages/area/list.vm</result>
<result name="add">/pages/area/add.vm</result>
<result name="edit">/pages/area/edit.vm</result>
<result name="delete" type="redirectAction">area_list.htm</result>
</action>
<!--行政区划 避免重复提交 -->
<action name="areaToken_*" method="{1}" class="com.wawi.gyzs.action.AreaAction">
<result name="add">/pages/area/add.vm</result>
<interceptor-ref name="token"/>
<interceptor-ref name="defaultStack"/>
<result name="invalid.token" type="velocity">/pages/system/error.vm</result>
</action>
<action name="industryAction_*" method="{1}" class="com.wawi.gyzs.action.IndustryAction">
<result name="list">/pages/industry/list.vm</result>
<result name="add">/pages/industry/add.vm</result>
<result name="edit">/pages/industry/edit.vm</result>
<result name="view">/pages/industry/view.vm</result>
</action>
<action name="annex_*" method="{1}" class="com.wawi.gyzs.action.AnnexAction">
<result name="download" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
<action name="reporter_*" method="{1}" class="com.wawi.gyzs.action.ReporterAction">
<result name="industry_reporter">/pages/reporter/industry_reporter.vm</result>
<result name="area_reporter">/pages/reporter/area_reporter.vm</result>
<result name="all_reporter">/pages/reporter/all_reporter.vm</result>
<result name="quProject_reporter">/pages/reporter/quProject_reporter.vm</result>
<result name="quProjectList">/pages/reporter/quProjectList.vm</result>
<result name="shiProjectList">/pages/reporter/shiProjectList.vm</result>
<result name="showProject">/pages/reporter/showProject.vm</result>
</action>
</package>
</struts>