struts学习笔记--解决了struts action中的execute方法不执行的问题
2009-08-19 22:04
716 查看
最近开始学struts。先是抱着书看了几天,然后就动手想写个简单的登录程序。但是在写的过程中发现了页面上提交的请求可以被转发到自己写的action,但是action中的方法execute不执行,怎么都调不好。然后写了一个超级简单的程序,只有提交的操作,还是不行,郁闷。第二天跟别人一起找问题,最后终于解决了。
先说一下环境吧: MyEclipse5.5(机子太烂,版本高了跑不动),JAVASDK1.6,struts1.3.10。
项目的结构: page1.jsp,page2.jsp,PageAction.java。 page1提交请求到PageAction.do,PageAction在控制台上打印"success",返回一个"success"。跳转到page2.jsp。
原始代码:
page1.jsp
===========================================
<%@ page contentType="text/html; charset=UTF-8" %>
<form method="POST" action="PageAction.do">
<input type="submit" value="submit" />
</form>
===========================================
page2.jsp
===========================================
<%@ page contentType="text/html; charset=UTF-8" %>
<%
out.println("This is page2.jsp");
%>
===========================================
PageAction.java
===========================================
package com.action;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class PageAction extends Action {
public ActionForward execute(ActionMapping mapping,ActionForm form, ServletRequest request,
ServletResponse response) throws Exception {
System.out.println("success");
return mapping.findForward("success");
}
}
============================================
web.xml
============================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
=============================================
struts-config.xml
=============================================
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<action-mappings>
<action path="/PageAction" type="com.action.PageAction" >
<forward name="success" path="/page2.jsp" />
</action>
</action-mappings>
</struts-config>
==============================================
最开始的时候总是点击page1上的按钮后显示一个空白页面,后台也不报错,超郁闷。怎么改都不行。后来看
Action 的源码发现 Action 把 execute 方法重载了。分别是:
=======================================================
public ActionForward execute(ActionMapping mapping, ActionForm form,
ServletRequest request, ServletResponse response)
throws Exception {
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
}
=======================================================
然后跟踪程序的执行流程。 发现流程里有这样一个方法:
protected ActionForward processActionPerform(HttpServletRequest request,
HttpServletResponse response, Action action, ActionForm form,
ActionMapping mapping)
throws IOException, ServletException {
try {
return (action.execute(mapping, form, request, response));
} catch (Exception e) {
return (processException(request, response, e, form, mapping));
}
}
调用的是上边的第二个 execute 。把自己的 PageAction 中的 execute改了就能执行到 execute 了。终于搞定了。在网上看到有好多人都有这个问题,不知道大家和我遇到的情况一样不。
总结一下吧,学习还是不能急,遇到问题自己要慢慢找答案,这样能记得更牢,还有就是寻找错误要按照一定的步骤来,不能瞎找。第一次写博客,写得不怎么样,光贴代码了,呵呵。
先说一下环境吧: MyEclipse5.5(机子太烂,版本高了跑不动),JAVASDK1.6,struts1.3.10。
项目的结构: page1.jsp,page2.jsp,PageAction.java。 page1提交请求到PageAction.do,PageAction在控制台上打印"success",返回一个"success"。跳转到page2.jsp。
原始代码:
page1.jsp
===========================================
<%@ page contentType="text/html; charset=UTF-8" %>
<form method="POST" action="PageAction.do">
<input type="submit" value="submit" />
</form>
===========================================
page2.jsp
===========================================
<%@ page contentType="text/html; charset=UTF-8" %>
<%
out.println("This is page2.jsp");
%>
===========================================
PageAction.java
===========================================
package com.action;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class PageAction extends Action {
public ActionForward execute(ActionMapping mapping,ActionForm form, ServletRequest request,
ServletResponse response) throws Exception {
System.out.println("success");
return mapping.findForward("success");
}
}
============================================
web.xml
============================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
=============================================
struts-config.xml
=============================================
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<action-mappings>
<action path="/PageAction" type="com.action.PageAction" >
<forward name="success" path="/page2.jsp" />
</action>
</action-mappings>
</struts-config>
==============================================
最开始的时候总是点击page1上的按钮后显示一个空白页面,后台也不报错,超郁闷。怎么改都不行。后来看
Action 的源码发现 Action 把 execute 方法重载了。分别是:
=======================================================
public ActionForward execute(ActionMapping mapping, ActionForm form,
ServletRequest request, ServletResponse response)
throws Exception {
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
}
=======================================================
然后跟踪程序的执行流程。 发现流程里有这样一个方法:
protected ActionForward processActionPerform(HttpServletRequest request,
HttpServletResponse response, Action action, ActionForm form,
ActionMapping mapping)
throws IOException, ServletException {
try {
return (action.execute(mapping, form, request, response));
} catch (Exception e) {
return (processException(request, response, e, form, mapping));
}
}
调用的是上边的第二个 execute 。把自己的 PageAction 中的 execute改了就能执行到 execute 了。终于搞定了。在网上看到有好多人都有这个问题,不知道大家和我遇到的情况一样不。
总结一下吧,学习还是不能急,遇到问题自己要慢慢找答案,这样能记得更牢,还有就是寻找错误要按照一定的步骤来,不能瞎找。第一次写博客,写得不怎么样,光贴代码了,呵呵。
相关文章推荐
- 安卓学习笔记-屏幕适配问题0px解决方法
- struts2的配置之could not find action or result 问题的解决方法(struts.xml文件路径)
- java:struts学习(3)-jsp传递中文到action的解决方法,简易!!
- 学习笔记:Maven构造版本号的方法解决浏览器缓存问题
- query.executeQuery()方法不向下执行问题解决方法
- ESXi(ESXi 4.1)相关问题解决方法和操作学习笔记
- iOS学习笔记24—URL传参的问题和解决方法
- 黑马程序员_学习笔记5多线程在的应用遇到的主要问题及解决方法。
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- 解决struts验证失败后导致其他Action方法不能执行
- 关于eclipse+struts action找不到问题解决方法 There is no Action mapped for namespace
- 设计模式学习笔记(三):模板方法模式【Template Method】(二) 问题解决
- 使用<a>标签提交action会执行两次后台方法的原因(反射机制小实例问题的解决)
- ◆◆◆Angular2学习笔记-问题解决方法
- struts学习笔记:三种方法配置action
- <学习html>第三天笔记-链接标签;锚点定位、<base />标签;遇到标签之间关系的问题及解决方法
- springmvc学习笔记-返回json的日期格式问题的解决方法
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- WPF学习笔记 - ”指定的元素已经是另一个元素的逻辑子元素。请先将其断开连接。“问题的解决方法之一
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法