菜鸟初学Struts2被无限404蹂躏两夜!求拯救

忆纷飞 2012-09-13 06:19:57
初学Struts2 被无限404折腾两夜了 求拯救
更希望有人能教教我怎么追踪解决这种问题 给满100分 希望有人肯指教
情况是访问任何页面都是404
去掉web.xml flicker元素正常

环境:eclipse for javaee
tomcat 7.0
struts 2.3.4

web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Struts2Dome</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


struts.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<!-- <constant name="struts.custom.il8n.resources" value="mess"></constant>
<constant name="struts.il8n.encoding" value="UTF-8"></constant> -->
<package name="liu" extends = "struts-default">
<action name = "login" class = "liu.LoginAction">
<result name = "input">/login.jsp</result>
<result name = "error">/error.jsp</result>
<result name = "succeed">/welcome.jsp</result>
</action>
</package>
</struts>


login.jsp:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dsdds</title>
</head>
<body>
<form action = "login" method = "post">
<%-- <textfield name = "username" key = "username" />
<textfield name = "password" key = "password" />
<submit key = "login" /> --%>
</form>
</body>
</html>


LoginAction.java :
package liu;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
private String username;
private String password;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

public String execute() throws Exception
{
if(getUsername().equals("liu") && getPassword().equals("liu"))
{
ActionContext.getContext().getSession().put("user", getUsername());
return "succeed";
}
else
{
return "error";
}
}
}

文档结构:
src
struts.xml
liu
----LoginAction.java
WebContent
login.jsp
error.jsp
welcome.jsp
web-INF
----web.xml
----classes
----lib



...全文
980 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dr哒哒 2015-03-26
  • 打赏
  • 举报
回复
告诉大家一个比较坑爹的问题,使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,配置*.do的时候出现404但是配.action却没事 ,坑爹啊
huahuasanji 2015-01-06
  • 打赏
  • 举报
回复
我也是看这本书404的,前来排队
Seven-后会有七 2014-09-04
  • 打赏
  • 举报
回复
我刚刚学习李刚老师的《轻量级JavaEE》确实也报404错误,解决方法就是那个包commons-lang3-3.1.jar 没有导入……坑死我了
freezer_glp 2014-08-14
  • 打赏
  • 举报
回复
引用 13 楼 s33126521 的回复:
好吧 问题已解决 我没导入commons-lang3-3.1.jar 我承认自己脑残了一会 但是这坑爹的教材上根本没让导入这玩意说7个核心包足矣...而且刚开始学struts不清楚lib里都有啥 献丑麻烦大家了
我也遇到了这个问题,按照你说的添加了包就解决了。莫非你看的也是《轻量级javaee》李刚那个?
zhanglujie2008 2012-09-13
  • 打赏
  • 举报
回复
还有就是你用的Struts2的jsp标签不正确;
<s:form action="login" theme="simple">
<s:text name="user_login" />
<br />
<s:text name="user_name" />
<s:textfield name="user.name" />
<br />
<s:text name="user_password" />
<s:password name="user.password" />
<br />
<s:text name="user_age" />
<s:textfield name="user.age" />
<br />
<s:submit name="submit" />

</s:form>
zhanglujie2008 2012-09-13
  • 打赏
  • 举报
回复
楼主从以下几个方面找找:
若你创建的是一个dynamic Web project 工程,
首先,你看看工程properties——>java build path——>source——>default output folder————>projectName/WebContent/WEB-INF/classes(没改之前是projectName/build/classes)
其次,要看你选择的是server发布工程还是Tomcat启动发布,如果是每次启动/关闭Tomcat的话,那你就看看你的工程properties——>Tomcat——>选中 is a Tomcat project、
写入contextname-->/project name(一般是)
写入subdirectory set as web application root——> /WebContent
再次,看看你的D:\apache-tomcat-6.0.10\conf\Catalina\localhost目录下边是否有(context name)——>project name.xml
如果这些都配置没问题的话,那你就贴出异常信息我看看吧。
pl3121605999 2012-09-13
  • 打赏
  • 举报
回复
直接访问 login.jsp 也是404? 如果是的话。那明显是 项目没有被部署。。或者 项目 有错误。。中间件 在加载项目的时候 报错了。。没有加载 进来。。如果可以访问login.jsp 的话 就看报404的时候 是哪个文件没有找到。。看路径是否和项目中的匹配
dw_java08 2012-09-13
  • 打赏
  • 举报
回复
public String execute() throws Exception
{
System.out.println("方法开始执行");
if(getUsername().equals("liu") && getPassword().equals("liu"))
{
ActionContext.getContext().getSession().put("user", getUsername());
System.out.println("方法执行结束");
return "succeed";
}
else
{
return "error";
}
}
}

楼主加两条打印语句,然后服务启动看后台有没有打印出来,如果两个都打印出来了,说明方法没问题,然后你分析跳转的问题,方法没问题那就是跳转的路径问题了
还有你加上这个属性:
<package name="liu" extends = "struts-default" namespace="/">
雍寇德 2012-09-13
  • 打赏
  • 举报
回复
404 的问题解决方式 、
1、 首先查看自己的请求发送到Action中没有
2、 看execute()方法执行没有
3、 执行后返回的String是一个url 在struts.xml
查看你的String对应的result是否正确
dengsilinming 2012-09-13
  • 打赏
  • 举报
回复
404说明网页不存在,这个应该是配置的问题。你在访问出错时报的什么错误呢,把异常信息贴出来。在将要执行的方法(你这里是execute())中加上一条打印语句,看看有没有执行那个方法
zhanglujie2008 2012-09-13
  • 打赏
  • 举报
回复
还挺客气呀 呵呵
忆纷飞 2012-09-13
  • 打赏
  • 举报
回复
好吧 问题已解决 我没导入commons-lang3-3.1.jar 我承认自己脑残了一会 但是这坑爹的教材上根本没让导入这玩意说7个核心包足矣...而且刚开始学struts不清楚lib里都有啥 献丑麻烦大家了
zc499498753 2012-09-13
  • 打赏
  • 举报
回复
检查配置。
nai598455803 2012-09-13
  • 打赏
  • 举报
回复
lz 启动的时候有没有报错
caomeiliang 2012-09-13
  • 打赏
  • 举报
回复
我都服了
java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
这么明显的错误
忆纷飞 2012-09-13
  • 打赏
  • 举报
回复
另外 感谢5楼zhanglujie2008给的建议 但是 我在 properties里没有找到tomcat 而且Catalina\localhost下没有您说的那个project name.xml 只有第一条我已经修改了
我是自己买的书学的 所以学的不太全面后面这两项不知道有什么影响
it491328322 2012-09-13
  • 打赏
  • 举报
回复
楼主。。。。

我来解释一下原因吧。。。

你的struts2配置的filter使用的拦截url为/*

这也就意味着任何请求都会被你的struts2的filter给拦截下来,login.jsp的请求也不例外,那么这个时候,你的struts2的配置文件当中,有没有对应的这个名称呢?

很显然,你的login.jsp是不能被struts2拦截的。只有你的LoginAction.java请求才需要通过struts2的filter拦截进入。

所以,通常,我们会把struts2的核心过滤器的拦截url设置成*.action。

如果你仍然想将struts2的核心过滤器的拦截url配置成/*的话。。。那么你就需要在struts.xml中配置放行的请求了。配置方法如下:

<constant name="struts.action.excludePattern" value="/*.jsp"></constant>

当中的value和filter的url拦截配置一样,可以使用通配符的。
上面的标签应该写在<struts>标签中。。。
忆纷飞 2012-09-13
  • 打赏
  • 举报
回复
严重: Exception starting filter struts2
java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:209)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:102)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:210)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:437)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
... 22 more
原来console太小 上面是有异常的啊....原来没注意看到
这个异常我看是 核心filter没找到
但是无论是web-inf下的lib里还是 javaResource下的Libraries下的Web App Libraries都有struts2-core-2.3.4.1.jar 并且里面找到了org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter为什么说找不到呢? 另外感谢大家的帮助了

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧