今天在做一个Struts2的项目的时候,要使用到验证码,当时就去配置了web.xml中的servlet标签,结果在页面上不管怎么弄结果就是不显示出来,这个时候突然想到了可能是struts2中的过滤器惹的祸,顺便找了一些文章,最后把问题给解决了,下面我便列出3种解决方案:
1.这种方法很简单就是在struts2的过滤器的url配置成/*.*,当然这种方法其实并不可取!
2.改变下servlet的请求路径!
就可以用 http://localhost:8080/xxx/my.servlet
3.定义一个action用来转发servlet请求!
例如定义了一个servlet:
如果你在页面中使用该servlet,则要用action转发到<url-pattern>/validate</url-pattern>
的路径/tu.
如你的页面里有个 <img>元素来显示图片,如果使用<img src="tu" width="60" height="20"/>肯定不行,你必须定义一个action 如
然后在struts.xml中配置该Action
最终在那个<img>中这么使用<img src="graphics" width="60" height="20"/>,这样就可以用servlet了。
1.这种方法很简单就是在struts2的过滤器的url配置成/*.*,当然这种方法其实并不可取!
2.改变下servlet的请求路径!
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/my.servlet</url-pattern>
</servlet-mapping>
就可以用 http://localhost:8080/xxx/my.servlet
3.定义一个action用来转发servlet请求!
例如定义了一个servlet:
<servlet>
<servlet-name>validate</servlet-name>
<servlet-class>com.xxx.util.GeneratorValidateChar</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>validate</servlet-name>
<url-pattern>/validate</url-pattern>
</servlet-mapping>
如果你在页面中使用该servlet,则要用action转发到<url-pattern>/validate</url-pattern>
的路径/tu.
如你的页面里有个 <img>元素来显示图片,如果使用<img src="tu" width="60" height="20"/>肯定不行,你必须定义一个action 如
package com.xxx.actions;
public class GotchaGraphics implements Action {
public String execute(){
return SUCCESS;
}
}
然后在struts.xml中配置该Action
<package name="common" namespace="/" extends="struts-default">
....
<action name="graphics" class="com.xxx.actions.GotchaGraphics">
<result>/validate</result>
</action>
....
</package>
最终在那个<img>中这么使用<img src="graphics" width="60" height="20"/>,这样就可以用servlet了。