SSH框架入门(一)——Struts2基础及查错步骤
来源:互联网 发布:特效字幕制作软件 编辑:程序博客网 时间:2024/06/15 15:48
示例功能1:访问某一路径下的Action由Action跳转到jsp页面
访问login.do进入login.jsp页面
注意,以下所有的访问路径即配置信息均区分大小写
1.保证Struts2拦截器已经配入了WebService:
检查项目Web.xml中是否含有如下代码,及代码的拦截标准是否正确
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter><pre name="code" class="html"> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
其中:
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>这一段表示struts2的包引入的路径,在Myecilpse中按Ctrl+左键点击能进行跳转并出现类似以下页面表示书写正确:
另外下面这一段代码
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>表示被Struts2所拦截的请求,其中的<filter-name>中内容应与上面一段代码的<filter-name>保持一致,/*表示拦截所有格式的请求,此处也可能会出现/*.action或/*.do表示仅拦截以.action或.do结尾的请求.
比如我有一个这样的访问:若我的拦截格式配置为/*.action再进行访问就会出现如下错误页面,控制台不报错:
该错误意为WebService没有找到/BBS/login.do这一路径下的页面.原因是我们的请求不满足/*.action这样的以action结尾的格式,所以并没有进入Struts2内部进行处理,并且我们也没有一个网页文件在这一路径下,所以WebService即会报出404.
2.保证为访问的Action配置了正确的访问路径.
我们进入Struts.xml文件,文件内部分为一个或多个package包,如
<package name="default" namespace="/" extends="json-default">首先我们检查我们的package是否用extends关键字继承或者间接继承了json-default,即继承了其他的包其所继承的包最终也继承了json-default
同时记录一下包的namespace名称空间,若不为/则代表我们访问这一包内部所配置的Action时都需在访问路径前增加namespace后面的字符串.
还以这一路径举例:
我的这一路径对应的Action原本放在名称空间为/的包下,若我将其改放在名称空间为/abc的包下再次访问这一路径则会显示如下页面:
同时控制台也会输出:
2016-07-10 20:04:15,951 [org.apache.struts2.dispatcher.Dispatcher]-[WARN] Could not find action or result
There is no Action mapped for namespace / and action name login. - [unknown location]
以及错误堆栈
意思是:无法在名称空间/下找到对应的名为login的Action
此时我们可以用这一路径访问到刚刚正确的页面,即在项目名和访问路径中间加入了所在包配置的namespace名称空间/abc/
另外我们需要找到我们路径对应的action,比如我这里是这样配置的:
请求会进入与对应name相同的Action中,即要想访问配置的某一个Action,那么需要访问的路径为:[IP地址]:[端口号]/[项目名]/[所在包的名称空间]/[Action的name属性].action
如果访问的name出错时,同样会报出上面的无法在名称空间下找到对应的名字的Action的错误.
另外使用Struts2默认配置时访问Action的路径尾部需要加上.action或者.do的后缀.
若不加后缀访问的话会报出本篇的第一个错误,即404页面.
3.保证正确配置了action对应的JAVA类.
我们看到,struts.xml中action标签下有一个class属性,这一属性配置的就是action对应的java类的包路径.我上面之所以直接写了名称是因为我在集成了Spring之后只需要在此处写上对应的Spring对应的bean容器名.如果暂时没有集成Spring的话,此处应该这样写:
可以按住Ctrl左键单击路径进到对应的类说明配置对了.
如果集成了Spring的话其实也是一样的道理,我们一样需要在Spring的配置文件中配置其对应的类,配置了之后我们就可以在Action的class属性处直接使用Spring配置文件中配置的这个对应的Java类的id属性,比如我的Spring中的配置如下:
这里如果配错了,比如我吧我的action的class属性误写成了bbsusersAction1,就会出现如下界面:
上面那句话的意思是,Struts2无法实例化这个bbsusersAction1路径下的Action,因为这一路径下并没有对应的java类.
而如果是Spring配置文件中的路径写错了的话,应该会在tomcat等Web服务启动时就会由Spring的启动检查在控制台报出错误.也有可能没有打开Spring启动检查,但这里不再详述
4.保证正确编写了对应的java类
现在进入我们的action对应的java类,这个类应该继承struts的ActionSupport类:
另外应该有我们在struts.xml中配置的methord属性命名的方法,该方法返回值为String且应用public修饰
如我的Action这样配置:
那么,我的java类中就应该有一个getLogin方法:
并且我这个方法的返回值应该与配置文件中action标签内部的result标签的name一致,这里有多个result,当我们的java类对应的方法返回的字符串与某一条result的name相同时,浏览器页面便会跳转到该result内部写的路径下的jsp页面.
如果java类中没有名与配置文件中method属性一样的方法时,就会发生500错误.同时定位到你method处定义的方法名.并抛出NoSuchMethodException异常
比如我将method处定义为a而又不在java类中添加a()方法,那么我在访问时就会出现如下界面
该错误意思是找不到该cn.com.sundy.action.TitleListAction类下的该a()方法.
另外我们注意到,我有一个result是这样写的,
使用type=chain可以将请求重新转发到另一个action,即名字叫index的action然后由另一个action处理.若不加这一属性则不能将请求转发,只能返回浏览器一个jsp/html等页面文件.
- SSH框架入门(一)——Struts2基础及查错步骤
- SSH框架入门(1)——struts2(1)
- SSH框架入门(2)——struts2(2)
- SSH框架入门(3)——struts2(3)
- struts2入门基础之自定义MVC框架(一)
- 带你逐步深入了解SSH框架——struts2入门
- SSH框架——走进Struts2
- ssh框架学习一之开发步骤
- 学习SSH框架记录片1----Struts2入门
- SSH框架基础知识及搭建步骤
- SSH框架搭建步骤及思路
- SSH-Hibernate(一)—入门
- Struts2——SSH (Spring+Struts+Hibernate)框架搭建之配置文件序列一
- SSH框架整合(一) —— Spring与Struts2整合
- 胖子实习(一)——SSH(spring3+Struts2+Hibernate4)简单构建框架
- SSH学习(一)Struts2入门
- grails框架入门小结(一)—后台基础搭建
- SSH进阶(4)——Spring框架入门及环境搭建
- Express4+Angularjs+Bootstrap3环境搭建
- HADOOP-RPC机制
- EasyUI小图标设置
- hdu 3613 扩展kmp求回文串
- Spring AOP 动态多数据源
- SSH框架入门(一)——Struts2基础及查错步骤
- list遍历
- [Genymotion] Unable to start the virtual device
- Java中级开发工程师知识点归纳
- luogg_java重新学习_第二章:基本语法01(概念)
- TabLayout
- [数据集]新浪微博数据集MicroblogPCU
- 【解题报告】CodeVS 4600 程序自动分析
- 《诗经》的注释