初学struts2·出现action找不到问题
废话少说·发代码
JSP页面:<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'myfilterJSP.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head>
<body>
<form action="user/myfilterAction" method="post">
<input type="text" name="name"/><br>
<input type="password" name="pwd"/>
<input type="submit" value="走">
</form>
</body>
</html>配置文件:<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK" /><!-- internationalization -->
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd"
class="com.bjsxt.struts2.user.action.UserAction" method="add">
<result>/user_add_success.jsp</result>
</action>
<action name="user"
class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
<action name="myfilterAction"
class="com.cme.cen.action.MyFilterAction" method="getMessage">
<result name="myfilter">/success.jsp</result>
</action>
</package>
</struts>action类:package com.cme.cen.action;import com.opensymphony.xwork2.ActionSupport;public class MyFilterAction extends ActionSupport {
String name;
String paw;
public String getMessage() {
System.out.println(name);
System.out.println(paw);
return "myfilter";
}
public void setName(String name) {
this.name=name;
}
public void setPaw(String paw){
this.paw=paw;
}
public String getName() {
return name;
}
public String getpaw() {
return paw;
}
}为何访问不了action·出现了404错误?
顺便提一下,我原先是用默认的过滤器,结果是可以访问的,但是我自己编写一个过滤器,并且使用它的时候,就报错了,但是过滤器已经运行了,顺便贴出我的过滤器代码:package com.cme.cen.myfilter;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;/*
* 这个类是自己写的一个过滤器类,用于过滤乱中文码问题
*/
public class Myfilter implements Filter { public void destroy() {
}
//这个方法可以在servlet获取到参数之前先做好过滤·,对象arg2表示一个练·即执行完过滤之后将数据继续往下传递
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain china) throws IOException, ServletException {
request.setCharacterEncoding("GBK");
System.out.println("************************"+request.getParameter("name"));
china.doFilter(request, response);//继续往下传递参数
}
public void init(FilterConfig arg0) throws ServletException { }}
顺带web.xml文件:<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- 配置一个过滤器,调用的类是源代码包里写好的 --> <filter>
<filter-name>chanise</filter-name>
<filter-class>com.cme.cen.myfilter.Myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>chanise</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></web-app>
代码比较多·只要能解决问题·我立马结贴·没并且全部分数奉上·拜托各位了!
废话少说·发代码
JSP页面:<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'myfilterJSP.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head>
<body>
<form action="user/myfilterAction" method="post">
<input type="text" name="name"/><br>
<input type="password" name="pwd"/>
<input type="submit" value="走">
</form>
</body>
</html>配置文件:<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK" /><!-- internationalization -->
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd"
class="com.bjsxt.struts2.user.action.UserAction" method="add">
<result>/user_add_success.jsp</result>
</action>
<action name="user"
class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
<action name="myfilterAction"
class="com.cme.cen.action.MyFilterAction" method="getMessage">
<result name="myfilter">/success.jsp</result>
</action>
</package>
</struts>action类:package com.cme.cen.action;import com.opensymphony.xwork2.ActionSupport;public class MyFilterAction extends ActionSupport {
String name;
String paw;
public String getMessage() {
System.out.println(name);
System.out.println(paw);
return "myfilter";
}
public void setName(String name) {
this.name=name;
}
public void setPaw(String paw){
this.paw=paw;
}
public String getName() {
return name;
}
public String getpaw() {
return paw;
}
}为何访问不了action·出现了404错误?
顺便提一下,我原先是用默认的过滤器,结果是可以访问的,但是我自己编写一个过滤器,并且使用它的时候,就报错了,但是过滤器已经运行了,顺便贴出我的过滤器代码:package com.cme.cen.myfilter;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;/*
* 这个类是自己写的一个过滤器类,用于过滤乱中文码问题
*/
public class Myfilter implements Filter { public void destroy() {
}
//这个方法可以在servlet获取到参数之前先做好过滤·,对象arg2表示一个练·即执行完过滤之后将数据继续往下传递
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain china) throws IOException, ServletException {
request.setCharacterEncoding("GBK");
System.out.println("************************"+request.getParameter("name"));
china.doFilter(request, response);//继续往下传递参数
}
public void init(FilterConfig arg0) throws ServletException { }}
顺带web.xml文件:<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- 配置一个过滤器,调用的类是源代码包里写好的 --> <filter>
<filter-name>chanise</filter-name>
<filter-class>com.cme.cen.myfilter.Myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>chanise</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></web-app>
代码比较多·只要能解决问题·我立马结贴·没并且全部分数奉上·拜托各位了!
解决方案 »
- 判断配置文件是否符合特定的规则
- JAVA Struts2应用问题,那位大侠帮忙
- struts2里面的struts.xml头文件有谁知道内部原理吗?
- 如何在javascript里面获取 struts2标签的 <s:hidden /> 的值
- 如何用超链接读取文件,将文件内容直接显示在页面里?
- 求高手:日期正则表达式怎么写................
- Hibernate在Oracle中插入数据,不执行insert
- 为什么我在本地的LINUX下的java应用可以正常的创建目录和文件 移到服务器上的就出错?
- org.springframework.aop.framework.ProxyFactoryBean 求教!!
- Hibernate中关于sessio的二级缓存问题,急,在线等解答!
- 一个分布式计算的毕业设计,求帮助!
- 关于SSH框架,启动tomcat1.6问题
HTTP Status 404 - /Struts2_1000_CharacterEncoding/user/myfilterAction--------------------------------------------------------------------------------type Status reportmessage /Struts2_1000_CharacterEncoding/user/myfilterActiondescription The requested resource (/Struts2_1000_CharacterEncoding/user/myfilterAction) is not available.
--------------------------------------------------------------------------------Apache Tomcat/6.0.29
具体的包 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
为何访问不了action·出现了404错误?
顺便提一下,我原先是用默认的过滤器,结果是可以访问的,但是我自己编写一个过滤器,并且使用它的时候,就报错了,但是过滤器已经运行了,顺便贴出我的过滤器代码:你写的过滤器只是设置编码格式,想要实现分发还得加上struts的过滤器,由它来寻找action
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
如果你web配置文件没改的话应该是.action提交
如果默认的过滤器的话,那重写的过滤器就需要到下一层才执行啦··但是两个的映射都一样··所以我想只用我的过滤器来顾虑掉乱码··
而默认的提交路径应该是<url-pattern>*.action</url-pattern>
所以你表单提交的时候应该这样写
<form action="struts中action的名字" method="post" namespace="/">
试试
不是必须的。 可以配置成 namespace=""
http:localhost:8080/xxx/aaa/dosomething.action
http:localhost:8080/xxx/aaa/bbb/dosomething.action
http:localhost:8080/xxx/aaa/bbb/ccc/dosomething.action
都可以匹配到这个package如果你配置成namespace="/user"的话,
你要访问
http:localhost:9090/xxx/user/dosomething.action
你说的struts2的过滤器指的是什么? 难道是指mvc框架的核心拦截器啊?
你指的是它?
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter我不知道你为什么不用这个而自己写一个,如果你用的是struts2.1.6版本或者以下版本,想自己解决编码bug的话。 你可以自己写一个Fitler并且配置在核心过滤器之前工作。懂我的意思了吗?
也就是说public class Myfilter implements Filter { public void destroy() {
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain china) throws IOException, ServletException {
request.setCharacterEncoding("GBK");
System.out.println("************************"+request.getParameter("name"));
china.doFilter(request, response);//继续往下传递参数
}
public void init(FilterConfig arg0) throws ServletException { }} <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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">
<filter>
<filter-name>myf</filter-name>
<filter-class>com.cme.cen.myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myf</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.cme.cen.myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
核心控制必须要的,没有它struts无法工作。
你的辅助功能的过滤器,要放在核心过滤器之前!