Struts2能进入Action,但不执行里面包括execute的任何方法!!求帮助!!

坚果壳不是硬壳 2014-01-08 03:16:32
login.jsp页
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆系统</title>
</head>
<body>
<%@include file="common/header.jsp"%>
<table width="780" align="center" background="<%=ctx%>/images/bodybg.jpg">
<tr>
<td>
<h6>请输入用户名和密码来登陆<br></h6>
<s:if test="tip!=null">
<div class="error">
<s:property value="tip"/>
</div>
</s:if>
<s:actionerror cssClass="error"/>
<s:form action="login.action" name="form1" method="execute">
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密码"/>
<tr>
<td colspan="2">
<s:submit value="登录" theme="simple"/>
<s:reset theme="simple" value="重置" />
</td>
</tr>
</s:form>
</td>
</tr>
</table>
<%@include file="common/footer.jsp"%>
</body>
</html>

struts配置:
<struts>
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
<!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" /> -->
<!-- 允许action的名字中出现"/" -->
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<!-- 配置了系列常量 -->
<constant name="struts.custom.i18n.resources" value="mess"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>

<package name="default" extends="struts-default" abstract="true">
<!-- 定义全局Result映射 -->
<global-results>
<result name="exception">/WEB-INF/jsp/error/error.jsp</result>
<!-- 定义login逻辑视图对应的视图资源 -->
<result name="login">/WEB-INF/jsp/login.jsp</result>

</global-results>
<global-exception-mappings>
<!-- 定义全局异常映射 -->
<exception-mapping result="exception" exception="java.lang.Exception" />
</global-exception-mappings>

</package>

<package name="custom-default" extends="default" namespace="/WEB-INF/jsp">
<action name="login" class="cn.RptSystem.web.action.LoginAction">
<result name="success">/WEB-INF/jsp/success.jsp</result>
<result name="input">/WEB-INF/jsp/login.jsp</result>
<result name="fail">/WEB-INF/jsp/login.jsp</result>
</action>

</package>



</struts>

LoginAction:
public class LoginAction extends UserBaseAction {

//登录的用户名
private String username;
//登录的密码
private String password;
//处理登录后的提示信息
private String tip;
public String getUsername() {
return username;
}
public void setUsername(String username) {
System.out.println("username");
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}

//处理用户请求
public String execute() throws Exception {
//创建ActionContext实例
ActionContext ctx = ActionContext.getContext();
//调用业务逻辑方法来处理登录请求
int loginResult = userService.Login(getUsername(), getPassword());
System.out.println(getUsername());
System.out.println(getPassword());
if(loginResult == userService.LOGIN_SUCCESS) {
ctx.getSession().put(Constants.USER, username);
setTip("您已经成功登陆系统");
return Constants.LOGIN_SUCCESS;
} else { //用户名和密码不匹配
setTip("用户名/密码不匹配");
return Constants.LOGIN_FAIL;
}
}
}

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>RptSystem</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 通用配置开始 -->
<!-- 配置Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- 加载多个Spring配置文件 -->
<param-value>
classpath:applicationContext.xml ,
classpath:cn/RptSystem/dao/applicationContext-hibernate.xml ,
classpath:cn/RptSystem/service/applicationContext-service.xml
</param-value>
</context-param>
<!-- 使用ContextLoaderListener初始化Spring容器 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 通用配置结束 -->

<!-- 设置web环境上下文(方便JSP页面获取)开始 -->
<filter>
<filter-name>Set Context Path</filter-name>
<filter-class>cn.RptSystem.commons.web.filter.ContextPathFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Context Path</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 设置web环境上下文(方便JSP页面获取)结束 -->

<!-- 字符编码过滤器(防止乱码)开始 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 字符编码过滤器(防止乱码)结束 -->

<!-- Struts2.x前端控制器配置开始 -->
<!-- 定义Struts2的FilterDispathcer的Filter -->
<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>
<!-- Struts2.x前端控制器配置结束 -->

</web-app>


输入用户名和密码之后,地址栏显示跳转进入LoginAction,但是调试后发现里面的方法并不执行

求解!
...全文
878 45 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
suciver 2014-01-09
  • 打赏
  • 举报
回复
引用 41 楼 u012895467 的回复:
我改成<meta http-equiv="refresh" content="0;URL=index.action"> 代替<jsp:forward page="index.action"/> 就行了 但,这是为什么呢?
我上面已经说了你自己看清楚你的namespace以及你index.jsp的路径action的请求为namespace/actionName
  • 打赏
  • 举报
回复
引用 40 楼 suciver 的回复:
[quote=引用 38 楼 u012895467 的回复:] 这又是为什么呢
404都是路径问题自己检查下namespace,请求的路径是namespace/actionName如果[/quote] 我改成<meta http-equiv="refresh" content="0;URL=index.action"> 代替<jsp:forward page="index.action"/> 就行了 但,这是为什么呢?
suciver 2014-01-09
  • 打赏
  • 举报
回复
引用 38 楼 u012895467 的回复:
这又是为什么呢
404都是路径问题自己检查下namespace,请求的路径是namespace/actionName如果
tony4geek 2014-01-09
  • 打赏
  • 举报
回复
ttp://localhost:8080/RptSystem/index.jsp 看看
  • 打赏
  • 举报
回复
引用 27 楼 suciver 的回复:

引用 36 楼 fw347969680 的回复:

引用 33 楼 rui888 的回复:
是的,不过 你这里的namespace="/WEB-INF/jsp">
相当于 这样访问 http://localhost:8080/RptSystem/WEB-INF/jsp
这样是不可以的。 WEB-INF 底下的文件时受保护的 。

别人是这样的。<result name="input">/WEB-INF/jsp/login.jsp</result>
这样的方式是可以的/

我知道自己哪里错了,现在做了下修改:
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%@taglib prefix="s" uri="/struts-tags"%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
<jsp:forward page="index.action"/>
</body>
</html>

struts配置文件:
<action name="index" class="cn.RptSystem.web.action.IndexAction">
<result>/WEB-INF/jsp/login.jsp</result>
</action>

但是测试的时候,我敲http://localhost:8080/RptSystem的时候显示
控制台没有信息输出
直接访问index.action可以访问到这个Action

并且控制台输出测试信息“Welcome”
LoginAction.java
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("Welcome");
return super.execute();
}

这又是为什么呢



UDown 2014-01-09
  • 打赏
  • 举报
回复
两种方式修改: 一、
namespace="/WEB-INF/jsp"
改成
namespace="/"
二、更改地址栏的访问路径用:http://localhost:8080/RptSystem/WEB-INF/jsp/index.jsp
fw347969680 2014-01-09
  • 打赏
  • 举报
回复
引用 29 楼 u012895467 的回复:
开始 什么也不输点登录之后
看到你的地址栏就感觉被坑了。
fw347969680 2014-01-09
  • 打赏
  • 举报
回复
引用 44 楼 fw347969680 的回复:
找到了!!!http://yanln.iteye.com/blog/1602770。 以后你自己百度下再来问吧。。。
问题原因:struts2拦截器把forward这个请求拦截了。
fw347969680 2014-01-09
  • 打赏
  • 举报
回复
找到了!!!http://yanln.iteye.com/blog/1602770。 以后你自己百度下再来问吧。。。
fw347969680 2014-01-09
  • 打赏
  • 举报
回复
原因我也不清,但是书上看到一段:在JSP页面中使用<jsp:forward>标准动作实际上实现的是控制逻辑的转移,在MVC体系结构中,控制逻辑应该由Servlet实现而不应该由JSP页面实现。因此,尽可能不在JSP页面使用<jsp:forward>动作转发请求。
mjygz 2014-01-08
  • 打赏
  • 举报
回复
form 中的action=login 不写 action= login.action
cao_yunfei 2014-01-08
  • 打赏
  • 举报
回复
Action 根本没有进去! 你action截取的路径有问题! 要不你在action中加一个 static{ System.out.println("进来了!"); } 试试有没有进来!
tony4geek 2014-01-08
  • 打赏
  • 举报
回复
是的,不过 你这里的namespace="/WEB-INF/jsp"> 相当于 这样访问 http://localhost:8080/RptSystem/WEB-INF/jsp 这样是不可以的。 WEB-INF 底下的文件时受保护的 。 别人是这样的。<result name="input">/WEB-INF/jsp/login.jsp</result> 这样的方式是可以的/
  • 打赏
  • 举报
回复
引用 31 楼 rui888 的回复:
namespace="/WEB-INF/jsp"> 这个改了
为什么我看别人的项目结构都是放在/WEB-INF下的,连index也是,是有什么是我没有注意到的吗?
tony4geek 2014-01-08
  • 打赏
  • 举报
回复
namespace="/WEB-INF/jsp"> 这个改了
tony4geek 2014-01-08
  • 打赏
  • 举报
回复
action 都不走 , 直接 访问WEB-INF 是不可以的。。就像你 地址敲web-inf 是不可以访问的。 得通过内部跳转。一直说方法不走。
  • 打赏
  • 举报
回复
开始

什么也不输点登录之后
zdkiller 2014-01-08
  • 打赏
  • 举报
回复
login.action没有找到,没有配置吧
suciver 2014-01-08
  • 打赏
  • 举报
回复
引用 24 楼 u012895467 的回复:
servlet跳转能够访问/WEB-INF目录下的文件,直接访问确实会被拦截,这也是我们放在/WEB-INF的原因,防止用户直接通过URL调用这些文件,不是吗?
后台跳转才可以访问WEB-INF目录下的文件的,而你的action跳转是在前台页面的表单提交的action,根本就无法访问WEB-INF目录下的文件的,你action的namespace变成WEB-INF等于你页面的请求根本就无法访问的.
  • 打赏
  • 举报
回复
引用 20 楼 rui888 的回复:
哎,看不出来。现在是 action 进来了, 其他都走只是 execute 不走是吧。
都不走
加载更多回复(25)

81,122

社区成员

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

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