struts 2.1.6 一个郁闷的问题

CodingBySea 2009-07-10 01:16:51
刚接触struts 2,做了一个简单的登陆程序(一个action,3个jsp页面),运行时,struts 2有时会调用action的create方法,有时又调用index方法,有时又会调用execute方法。即便是在action配置中指定了method="execute"方法,仍然是一样的。????
说明:如果form使用struts 标签,每次都调用execute方法,method属性不起作用,但会提示the resource required is not found for action or result success错误.使用html 的form标签时,绝大多数时间是调用create方法,配置method参数不起作用,但运行正常。


非常迷惑,请大侠们解惑!


开发平台:MyEclipse 6.0.1,jdk 6,tomcat 6.0
源程序:
1,LoginAction.java
public class LoginAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private String user;
private String password;

public String create() throws Exception{
user = user+"--create_user";//加上“--create_user是为了测试",下同
password = password+"--create_password";
//user = new String(user.getBytes("ISO-8859-1"),"utf-8");
//String t = user;
return execute();
}

public synchronized String getUser() {
return user;
}

public synchronized void setUser(String user) {
this.user = user;
}

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}

public String index() throws Exception {
user=user+"--index_user";
password=password+"--index_password";
return execute();
}
public synchronized String getPassword() {
return password;
}
public synchronized void setPassword(String password) {
this.password = password;
}
}
2.loginframe.jsp
<body>
<center>
<!--
<s:actionerror/>
<s:form action="userlog" method="post">
<s:textfield name="user" label="用户名"/>
<s:textfield name="password" label="密码"/>
<s:submit value="登陆"></s:submit>
</s:form>
-->

<form action="userlog" method="post">
<table>
<tr>
<td> 用户名:</td><td><input type="text" name="user"/></td>
</tr>
<tr>
<td>密码:</td><td><input type="password" name="password"/>
</td>
<tr>
<td></td><td> <input type="submit" value="登陆"/></td>
</tr>
</table>
</form>
</center>

</body>
</html>
3.loginsuccess.jsp
<body>

<h1> 恭喜你终于登陆成功了!</h1>
您使用的名称是:<s:property value="user" default="none"/><br>
你输入的密码是:<s:property value="password" default="unkown"/>

</body>
</html>
4.loginerror.jsp
<body>
<h4 align="center">对不起,您还没有登陆,不能进行该项操作!</h4>

<s:fielderror/>
</body>
</html>
5.web.xml
<?xml version="1.0" encoding="UTF-8"?>

<web-app id="Thesis_Manager" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Thesis Manager</display-name>


<!-- Filters -->
<!-- START SNIPPET: filter -->
<filter>
<filter-name>action2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- END SNIPPET: filter -->

<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- Welcome file lists -->
<welcome-file-list>
<welcome-file>/login/loginframe.jsp</welcome-file>
</welcome-file-list>

</web-app>

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

<struts>
<package name="thesis.actions" extends="struts-default">
<action name="userlog" class="thesis.actions.LoginAction" method="create">
<result name="success">/login/loginsuccess.jsp</result>
<result name="input">/login/loginerror.jsp</result>
</action>
</package>
<!-- Add packages here -->

</struts>

没有properties文件
...全文
54 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiesoul 2009-07-12
  • 打赏
  • 举报
回复
不明白 为什么你每个方法都要去调用excute()方法
CodingBySea 2009-07-10
  • 打赏
  • 举报
回复
补充:
在这之前还出现过这样的现象:使用struts标签,browser返回:the required resource(/thesis/userlog.xhtml) is not available.也很奇怪?
CodingBySea 2009-07-10
  • 打赏
  • 举报
回复
如果改为< form action="userlog.action" method="post">则browser返回"the requested resource(/thesis/userlog.action)is not available."使用struts 标签和html标签效果相同。
CodingBySea 2009-07-10
  • 打赏
  • 举报
回复
感谢cust_28和sangshusen_1988,重新部署后,正常了。
cust28 2009-07-10
  • 打赏
  • 举报
回复
没遇到过这种情况,
默认情况下 如果不指定method 则调用execute()方法
如果指定了,则调用指定的方法.
<form action="userlog" method="post"> 改成
<form action="userlog.action" method="post"> 试试呢?
sangshusen_1988 2009-07-10
  • 打赏
  • 举报
回复
修改后你重新部署了吗??没部署的话用的是以前的
tyroOfJava 2009-07-10
  • 打赏
  • 举报
回复
不知道
CodingBySea 2009-07-10
  • 打赏
  • 举报
回复
自己顶......
最近温习ssh2整合编程,顺便浏览下struts2有什么更新的消息,下载了新版本的struts2的2.1.8.1版,使用的是MyEclipse8.0开发,但是问题就随之而来了。MyEclipse8.0中自带的struts2版本是2.1.6,spring版本有2.0,2.5的,hibernate版本较多些至3.2,首先选版本就选择最优的,struts2没的选只有2.1.6版的,所以先导入struts2支持,然后是spring选的是2.0,问题就出在struts2中spring的插件上了,没有从MyEclipse8.0中导入2.1.6版本的包,而是选择我本地的一个2.1.8.1版本的包,问题就出来了,报dispatcher 不能初始化,找不到类;更换ok!另外的问题就是spring和hibernate整合的问题了,当时也是一股脑的将hibernate和spring的包全导入进来,然后发布,启动tomcat,查看报错的问题,这个方面到没有出现版本差异的问题,典型的就是缺包,然后报找不到类,添加进来就行了啊!这个就不再详述,具体请看下面,经过详细排查,终于分析完毕相关包的作用,并整理完一套完整的包(由于大小问题没有上传,附图): struts2的包必须版本一致 不能即用2.1.6的包 又用到了2.1.8的包 ,其他版本类似。 另外三大框架的添加顺序也需要注意下,我的添加顺序是 struts2.1.6、spring2.0、hibernate3.2 spring版本差异(包方面)没有研究过,大致雷同,也应该保持版本一致,即在同一个稳定发行包中下载的包。 以下包后面跟的数字意思:(带*号为可选包,根据需要额外增加) 0 一些基本的包需要添加 删除需慎重; 1 spring的相关包,先添加struts2.0的支持时标记的包; 2 struts2的相关包;以struts2-core-2.1.6版本为准; 注:struts2-core-2.1.8有较大变化需要注意替换相关包,注意尾号尽量不要是单号 例子:xwork-2.1.2.jar在2.1.8中xwork-core-2.1.6.jar 具体啥问题没测过 3 hibernate3相关包 antlr-2.7.2.jar //2 aopalliance-1.0.jar //2 asm-attrs.jar //3 asm.jar // 3 cglib-2.1.3.jar //3 commons-beanutils-1.7.0.jar //2 commons-chain-1.2.jar //2 commons-codec-1.3.jar //0 commons-collections-3.1.jar //2 commons-digester-1.8.jar //2 commons-el-1.0.jar //2 * commons-fileupload-1.1.1.jar //2 commons-io-1.1.jar //2 commons-lang-2.1.jar //2 commons-logging-1.0.4.jar //2 commons-logging-api-1.1.jar //2 * commons-validator-1.3.1.jar //2 derbyclient.jar //3 dom4j-1.6.1.jar //3 ehcache-1.2.3.jar //3* ejb3-persistence.jar //3 freemarker-2.3.13.jar //2 hibernate3.jar //3 hibernate-annotations.jar //3 hibernate-commons-annotations.jar //3 hibernate-entitymanager.jar //3 hibernate-validator.jar //3 jaas.jar //3 javassist.jar //3 jaxen-1.1-beta-7.jar //3 jboss-archive-browsing.jar //3 * jdbc2_0-stdext.jar //3 jta.jar //3 jstl-1.1.0.jar //0 json-lib-2.1.jar //2* junit-3.8.2.jar //0 * log4j-1.2.9.jar //0 ognl-2.6.11.jar //2 oro-2.0.8.jar //2 sitemesh-2.4.2.jar //2* spring-beansjar //1 spring-context.jar //1 spring-core.jar //1 spring-dao.jar //3 spring-hibernate3.jar //3 spring-jdbc.jar //3 spring-web-2.5.6.jar //1 struts2-core-2.1.6.jar //2 struts2-convention-plugin-2.1.6.jar //2* struts2-spring-plugin-2.1.6.jar //1 xwork-2.1.2.jar //2 xerces-2.6.2.jar //3 xml-apis.jar //3 注:以下包为数据源连接池 相关 用到那个添加相应的包 c3p0-0.9.1.2.jar //3 commons-pool.jar //3 commons-dbcp.jar //3

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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