JavaEE SSH集成框架(两) struts2 本地加载dtd文件,action组态

1. 载入中struts2的dtd文件。使struts.xml网络无法验证,和eclipse有技巧

在src在创建struts.xml:

<?

xmlversion="1.0"encoding="UTF-8"?

>

<!DOCTYPE strutsPUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

解压struts2/lib下的core.jar。

找到struts-2.3.dtd,解压出来。

eclipse > 首选项 > xml > xml catalog > user specified entries> add

location 选择本地dtd文件。key type为选uri;uri为 http://struts.apache.org/dtds/struts-2.3.dtd

2. <struts></struts>中的元素为:

<beans />  <constant /> <include /> <package /> <unknown-handler-stack />

经常使用的常量constant:

<!-- 开发模式为true时,即时生效。改动struts配置文件时不用又一次部署 -->

<constant name="struts.devMode" value="true"/>

<!-- 动态方法调用 默认关闭的 听说不安全 调用时匹配规则:actionName!methodName.action  后缀.action可省略-->

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

package的使用:

<!--

在struts-default.xml中定义了一个package名为 struts-default

extends继承自struts-default

namespace:表示訪问时的url地址前缀 即訪问路径为:/appName/abc/xxx.action   .action能够省略

-->

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

3. package中的元素顺序为:

result-types

interceptors

default-interceptor-ref

default-action-ref

default-class-ref

global-results

global-exception-mappings

action*(全部action放到最后)

不遵循该顺序会xml验证会报错

4. action配置

4.1 直接跳转

<action name="forward">
    <result>/WEB-INF/test.jsp</result>
</action>

訪问地址:http://.../appName/forward.action     .action能够省略

4.2 依据action-class的返回值进行跳转

<!--
class 是一个含有详细action方法的类。未指明method属性时。默认调用execute方法 -->
<action name="TestAction" class="com.stone.action.MyAction">
<!-- result 为方法的返回值 -->
    <result name="success">/WEB-INF/test.jsp</result>
</action>

訪问地址:http://.../appName/TestAction      运行com.stone.action.MyAction的
execute方法。返回值为success则跳转到对应页面

4.3 指明action-class的method

<!-- class 是一个含有详细action方法的类, 指定了方法
Struts2在依据action元素的method属性查找方法时有两种途径:
  1.查找与method属性值全然一致的方法.    方法名为methodAction
  2.查找doMethod()形式的方法           或方法名为doMethodAction
-->
<action name="methodAction"class="com.stone.action.MyAction" method="testMethod">
   <result name="test2">/WEB-INF/test2.jsp</result>
</action>

訪问地址:http://.../appName/methodAction
   运行com.stone.action.MyAction的testMethod或者是doTestMethod方法,其返回值与result-name匹配

4.4 不指明action-class的method。依据訪问的形式进行Action的动态方法调用

须要先开启动态方法调用,即配置相关常量。

<action name="testDynamic" class="com.stone.action.EditAction">
    <result name="add">/WEB-INF/edit_add.jsp</result>
    <result name="delete">/WEB-INF/edit_delete.jsp</result>
</action>

訪问地址:http://.../appName/testDynamic!add  运行com.stone.action.EditAction的add方法

若訪问地址为  .../testDynamic!delete 则运行EditAction的delete方法。

4.5 通配符和占位符匹配

4.5.1  通配符* 表示随意字符

<action name="edit*" class="com.stone.action.EditAction" method="add">
    <result name="add" type="redirect">http://www.baidu.com</result>
</action>

訪问地址:http://.../appName/edit后接随意字符
运行com.stone.action.EditAction的add方法

方法返回add时,重定向到baidu

4.5.2 通配符和占位符一起使用,class中有占位符

<action name="news*" class="com.stone.action.News{1}Action">
     <result name="{1}" type="dispatcher">/WEB-INF/jsp/News_{1}.jsp</result>
</action>

{1}即表示第1个通配符*所代表的字符串
 如有多个通配符 即 {1}  {2} {3} ...

訪问地址:http://.../appName/newsAdd  运行com.stone.action.NewsAddAction的execute方法

方法返回Add时,跳转到/WEB-INF/jsp/News_Add.jsp

注意:当前占位符放在class中时。可能会出现找不到class定义的情况,这时通过定义struts的全局异常处理

也是没有作用的。

由于全局异常处理,仅仅是处理action 中的异常。

所以一般不要在class中使用占位符进行匹配

4.5.3 通配符和占位符一起使用 method中有占位符

<action name="book_*" class="com.stone.action.BookAction" method="{1}">
    <result name="{1}" type="dispatcher">/WEB-INF/jsp/book_{1}.jsp</result>
</action>

訪问地址:http://.../appName/book_add 运行com.stone.action.BookAction的add方法

方法返回add时,跳转到/WEB-INF/jsp/book_add.jsp

注:该action。假设訪问的是以book_开头。可是method訪问不到。 则适用action中出异常这样的情况,能够由struts捕获处理

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-12-14 18:11:19

JavaEE SSH集成框架(两) struts2 本地加载dtd文件,action组态的相关文章

Android 如何本地加载pdf文件

大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开. 这样的需求要怎么实现呢?上网查了一些资料,发现了一个很好用PDF开源库. 使用起来也很简单,首先添加PDFView的引用 compile 'com.github.barteksc:android-pdf-viewer:2.4.0' 布局中引用PdfView <LinearLayout xmlns:android="ht

两种动态加载JavaScript文件的方法

两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看下 动态加载script到页面大约有俩方法 第一种便是利用ajax方式,把script文件代码从背景加载到前台,而后对加载到的内容经过eval()实施代码.第二种是,动静创建一个script标签,配置其src属性,经过把script标签插入到页面head来加载js,相当于正在head中写了一个<sc

struts2设置加载非默认路径的struts.xml文件解决方案

方案一:   首先我们要明白struts2加载配置文件都是从它自己的jar包和\WEB-INF\classes两个默认的位置加载的,如果你想改变strusts2中的文件的默认加载路径,可以在web项目的web.xml配置过滤器的时候指定. 如(配置过虑器的部分代码):     <filter>       <filter-name>struts2</filter-name>         <filter-class> org.apache.struts2.

Yaf框架下类的自动加载

前面两篇博客分别讲述了PHP自带的类加载和composer中类的自动加载,其实Yaf框架也实现了基于PSR0和PSR4的类的自动加载.根据我对Yaf下类的自动加载方式的理解写下这篇博客.由于接触Yaf框架时间不长,因此如果有不对之处,还望大家不吝指教. 要理解Yaf框架下类的自动加载方式,还是需要PSR0和PSR4规范作为基础,对于PSR0和PSR4的具体规范,本文不做详细解释.Yaf下类的自动加载可以分为全局类和本地类的自动加载.与MVC框架相关的类的自动加载,下面分别做相应的介绍. 一.Ya

180729-Quick-Task 动态脚本支持框架之任务动态加载

Quick-Task 动态脚本支持框架之任务动态加载 前面几篇博文分别介绍了整个项目的基本架构,使用说明,以及整体框架的设计与实现初稿,接下来则进入更细节的实现篇,将整个工程中核心实现捞出来,从为什么这么设计到最终的实现给予说明 相关系列博文: 180702-QuickTask动态脚本支持框架整体介绍篇 180719-Quick-Task 动态脚本支持框架之使用介绍篇 180723-Quick-Task 动态脚本支持框架之结构设计篇 I. 任务动态加载 这个动态脚本调度框架,最大的一个功能点就是

Qt5的插件机制(1)--Qt 框架中的插件加载机制概述

概述 Qt的源码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件加载机制, 这个机制可用于加载特定种类的插件.比如通过 QPlatformIntegrationFactory\QPlatformIntegrationPlugin\QPlatformIntegration 三个类可以实现平台类QPA插件(PlatformIntegration)的加载,通过QPlatformI

Afianl框架里面的FinalBitmap加载网络图片

在Afianl框架里,FinalBitmap如何加载网络图片?有什么简单的方法吗?现在让麦子学院的android开发老师讲讲afina框架里面的finalbitmap加载网络图片的方法,Afinal里边FinalBitmap:用于显现bitmap图像,而无需思考线程并发和oom等疑问. 1.测验恳求 运用页面翻开http://avatar.csdn.net/C/6/8/1_bz419927089.jpg"可以看到一张图像. 2.新建FinalBitmap目标 1 FinalBitmap bitm

【.NET】VS 本地调试 无法加载Json文件

1.如果要是发布到iis,还加载不出来,那就要配置一下MIME类型: 2.本地调试时,无法加载json文件: 解决方案: 在web.config中添加如下配置:mimeMap <system.webServer> <defaultDocument> <files> <clear /> <add value="default.aspx" /> </files> </defaultDocument> <

框架开发(五)----自动加载类

一 . 为什么自动加载 自动加载字面的意思就不解释了.我这里自动加载类解析下 是自动加载类文件的意思.__autoload方法完全可行,但是不要问为什么,还是用spl_autoload_register.不只是灵活,而且就是灵活,还是灵活,体现在__autoload只能这么命名,spl_auto_register() 能调用不同的函数. 二  自动加载函数原理   通常情况下,一个类的定义都是一个文件,当类与类需要相互引用的时候,就需要include(require)相应的类文件,带来的问题就是