struts2 <s:action/>的小问题

web.xml:

struts2
*.action

jsp页面:

就会报错。

将web.xml,.action改成/就正常
我想不将web.xml改掉,有办法解决吗?

你不用改任何东西,你只需要在跳入你的页面的时候不要直接进入,而是通过action跳转进入。

改成
[quote] [/quote]
试试呢

[code="html"] [/code]

这是web.xml文件对于路径的规定,需要以/开头。

贴错误吧。

:oops: 不会没有加
[code="html"]<%@taglib prefix="s" uri="/struts-tags"%>[/code]吧

改为
[quote] [/quote]
试试

[quote]不好意思,还是那错。 [/quote]
前面多了个斜杠哦

以 / 开头和以 /* 结尾的是用来做路径映射的
以前缀 *. 开头的是用来做扩展映射的
/ 是用来定义default servlet映射的

我知道了,你进入这个页面的时候必须经过action,不能直接显示这个页面。

研究下servlet规范对于web.xml文件的配置规范 给你推荐一篇文章http://www.360doc.com/content/07/0611/18/18995_552388.shtml

对于filter配置那样的url肯定是有问题的,必须以/开头。

因为这个页面用了struts2标签,是需要过滤的 我猜想你是直接跳到这个页面而没有经过action来跳。

肯定得改你的web.xml,那就看你想做成什么样了。

[quote]以 / 开头和以 /* 结尾的是用来做路径映射的
以前缀 *. 开头的是用来做扩展映射的
/ 是用来定义default servlet映射的
[/quote]
那struts1的web.xml中为什么可以这么配置呢
[quote]

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>


[/quote]

我知道了,你进入这个页面的时候必须经过action,不能直接显示这个页面。
因为这个页面用了struts2标签,是需要过滤的 我猜想你是直接跳到这个页面而没有经过action来跳。

兄弟 就是这个原因,试试就知道。

你的 index 这个action 在 struts.xml 中是怎么配置的呢?

关键这是filter的url-pattern啊

[quote]我都说了。web.xml那一段改掉之后一切没问题。[/quote]
晕 就是因为你/*这样了 所以才拦截了所以 ,所以就可以直接用jsp。
而你*.action这个是要拦截.action的,而你直接用jsp当然就没有啦

搞不定 我跳黄浦江。

那请问你的filter对你的servlet和action会产生影响吗?如果没有,修改你的filter路径,只是让你的servlet或action经过了过滤器,实际上过滤器对它没有产生任何影响,我觉得这样并不会产生什么问题。

哥哥我不蛋定了 拜托你试试我说的方案你就明白啦

比如你现在估计是直接进入页面或者redirect a.jsp
现在不要这样,你编写一个a.action然后fowward进入a.jsp。
那么a.jsp里面的struts2的标签才会起作用。

5分钟之内搞定啊 不然哥真的去跳了

用 / 吧,别用 /*

[code="java"]

[/code]
类似这样的使用,我在自己的项目里面跑没问题呢!!????

[quote]恩,是没有错了。
可是这样子很不方便。

我只要把web.xml那里改一下 直接进入这个页面是可以的。
只要直接进入这个页面 ,是不是就得必须改web.mlx里?[/quote]

struts2的配置就得配置action,不是这样不方便,而是得遵循规律。
还有就是你要是配置成 /*这样的话,你以后会很麻烦,而且效率很低,比如你要引用个图片什么的都得跑过来过滤,那得过滤多少东西。而且假如要做权限,你以后也会很麻烦。

[quote]只要直接进入这个页面 ,是不是就得必须改web.mlx里? [/quote]貌似没有其他办法啊。

所以除了编码过滤器 其他都别配置成所有 /*

结贴吧 :oops:

/action/ 你的action路径
/servlet/ 你的servlet路径

我用的就是:[code="java"]

struts2
*.action

[/code]
这样的啊!

[quote]难道还有servlet单独管理配置的吗[/quote]
每个servlet当然都得配置啊。

[quote]我知道有问题的。有冲突的。你自己建一个测试一下吗 十分钟啊,
web.xml*.action 然后在建立一个servlet 然后你跳转一下。[/quote]

哥哥我做了几百个这样的了,你目前的情况是:
servlet和filter完全没弄明白,刚才解释了那么多,你一点都不理解。

我只能说:
1,你过滤器没有过滤到你的任何页面,那么你的任何页面想用struts2的标签那是妄想。
2,你servlet配置跟action没有半毛钱的关系,除非你真傻到乱配置。

[quote]我方正是改成/*的话,servlet就有关系了。无效了。 [/quote]
那你就乱配置去吧。 :idea:

我觉得你假如把配置里面加一句java代码,估计对整个项目都起作用了。 8)

[quote]本来默认的就是/*,后来为了servlet有效 我这才改成*.action的。[/quote]
我只能说你即使把servlet配置成/*了,仍然可以对action有用。只是你不会做罢了。下班闪人了,回家疗伤。

[quote]现在我都怀疑你有没有碰上我说的那种情况。[/quote]
别自以为是 要不咱们打个赌吧

[code="java"]

struts配置文件,struts-execute
struts-execute
org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter


struts-execute
*.action
FORWARD
REQUEST

<filter>
    <description>cleanup</description>
    <filter-name>struts-cleanup</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts-cleanup</filter-name>
    <url-pattern>*.action</url-pattern>
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping>

[/code]
这个是我的配置,你可以试试,我也不知道你的问题是怎么处理的。

[quote]我绝对的没有自以为是,不相信加我qq 我发你项目 就是一个测试的,很小的,我发给你吧 [/quote]
留下qq

解决了请一定记得在评论中说清楚,我也开始迷惑了,这个问题怎么就这么纠结,谢谢。

request -->HomeAction-->redirect或forward-->index.jsp

index.jsp页面包含如下:








如上所述,通过HomeAction再重定向或转发到jsp,jsp页面中包含头部与底部,头部与底问没有通过指令,而是通过struts2的 action标签来载入.

现在的问题是,在web.xml中

struts2
/*

这种拦截,web程序正确执行并显示 jsp页面

但如果如下拦截

struts2
*.action

web程序就报错,错误指向 <s:action

真的很奇怪。