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等页面文件.

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 集水池中沉积大量污泥怎么办 电脑qq截图不好使怎么办 捡了个手机需要指纹怎么办 手机锁屏锁住了怎么办 三星屏锁忘记了怎么办 文字下面有蓝色直线怎么办 苹果x不能截屏了怎么办 u盘在电脑上打不开怎么办 电脑桌面上文档剪切了怎么办 苹果官网查不到保修日期怎么办 吃了发霉的花生怎么办 鸡吃大蒜多了怎么办 玖瑰花叶子黄怎么办 羊偷吃腥油和花生饼吃多了怎么办 肉牛眼睛有点变黄少吃东西怎么办 黑坑草鱼不开口怎么办 花生和瓜子受潮皮了怎么办? 菜叶上长了腻虫怎么办 磨辊耐磨层脱落怎么办 磨辊耐磨层小块脱落怎么办 密封胶皮圈松了怎么办 汽筒里胶皮垫密封不严怎么办 磁耦气缸脱磁了怎么办 无杆气缸行程大怎么办 c4d中模型变成线怎么办 内径槽异性需要车一刀怎么办 轴承太紧影响转速怎么办 电动车前轮蝶刹抱死怎么办 摩托三轮车油刹抱死怎么办 手动档汽车离合抱死怎么办 别克gl8后轮吃胎怎么办 扭力梁后轮吃胎怎么办 非独立悬挂吃胎怎么办 货车半轴法兰盘裂纹怎么办 小天才平板裂屏了怎么办 新车撞了个坑怎么办 新车碰了个坑怎么办 汽车顶被砸了个坑怎么办 途观l前减震异响怎么办 锦明8代声音太大怎么办 手机网页无法加载插件怎么办