struts 2 的 上传文件问题

 

struts 2 的 上传文件问题
今天写了一个上传文件的Web 程序,结果,一直报错。

错误如下:
No result defined for action action.UploadAction and result list

 

然后,上网一直发帖,找资料。最后,发现,居然是struts.xml 文件里面有错。

原先的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="main" extends="struts-default">


        <action name="loginPerson"
        class="action.Login">
        <result name="login">/Login.jsp</result>
        <result name="success">/Success.jsp</result>
        </action>

       <action name="upload"
       class="action.UploadAction">
       <result name="input">/Success.jsp</result>
       <result name="list">/Uploadlist.jsp</result>
       </action>

      </package>
</struts>   

 

居然是 action 名字<action name="upload" 与struts 的关键字冲突(百度上面这么说的。)
于是,修改了action 名字和 相关配置,就好了。
<action name="fileupload"
       class="action.UploadAction">
       <result name="input">/Success.jsp</result>
       <result name="list">/Uploadlist.jsp</result>
       </action>


接下去写文件的下载,又有问题了。MD,这次是有中文名的文件下载出错了。
找了N多资料,最终,还是要用上次那招对付中文乱码的方法。
首先,写个过滤器。
这是它在web-xml里面的代码
<filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>helloweenvsfei.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>characterEncoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <param-name>enabled</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>

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

注:如果有struts 2 的 filter,书上说要把Struts 2的分发器Filter最为最后一个Filter。

下面是helloweenvsfei.CharacterEncodingFilter的代码
package helloweenvsfei;

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 CharacterEncodingFilter implements Filter
{
   
 private String characterEncoding;
 private boolean enabled;
 
 
 public void destroy() {
  characterEncoding = null;

 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException
 {
    if(enabled || characterEncoding !=null)
    {
     request.setCharacterEncoding(characterEncoding);
     response.setCharacterEncoding(characterEncoding);
    }
       chain.doFilter(request, response);
 }

 public void init(FilterConfig config) throws ServletException
 {
    characterEncoding =  config.getInitParameter("characterEncoding");
       enabled = "true".equalsIgnoreCase(config.getInitParameter("enabled").trim());
 }

}

最后,还要修改那个Tomcat的编码格式(当年,很傻逼地去修改了那个安装Tomcat的地方,结果,发现,这

个是错的。)
先去看Tomcat的位置。 window-〉Preferences->MyEclipse Tomcat 6,看Tomcat base directory
根据那个目录,找到conf->server.xml,再修改server.xml文件,指定URIEncoding。(不然,默认为
ISO-8859-)
改这句话<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8" />
最后,搞定这件事。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值