利用Ext4弄了一个图片上传的模块,现在把struts2框架结合了进去,发现图片上传不了了,原因是被struts2的拦截器拦截了,原先,图片上传通过post的方式提交到一个servlet上的,通过servlet来保存图片,根据网上的说法,改Web.xml的配置还是不行,各位有什么办法,附上代码:
Web.xml;
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.yazs.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/WebContent/page/admin/add_photo/upload</url-pattern>
</servlet-mapping>
<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>
servlet:public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


String path = request.getSession().getServletContext().getRealPath("\\images");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
for (FileItem fileItem : list) {
String fileName = fileItem.getName();
File file = new File(path + fileName);
System.out.println(path +"\\" +fileName);
fileItem.write(file);
fileItem.delete();
}
} catch (Exception e) {
e.printStackTrace();

}
}给位有什么方法吗?我试着把这个servlet改成Action但是获取不到数据,struts2正在学习中……

解决方案 »

  1.   

    我的问题就是怎么样才可以在struts2中使用servlet能上传图片,或者怎么把servlet改成Action,完成图片上传的功能,呵呵,没说明白
      

  2.   

    action文件上传从前台到后台都有相应设置,你只给这点代码难以回答你的问题。
    目前从你的代码中这句:
    for (FileItem fileItem : list) {...
     fileItem是要判断的,即:
     if (item.isFormField()) {// 判断是文件还是文本信息
      

  3.   

    public class UploadServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    String path = this.getServletContext().getRealPath("/")+"/upload";
    File folder = new File(path);
    if(!folder.exists())
    folder.mkdirs();
    String result = null;
    long maxsize=2*1024*1024;
    try{
    SmartUpload upfile=new SmartUpload();       //实例化对象 
    upfile.initialize(this.getServletConfig(),request,response);     //执行初始化操作 
    upfile.upload();                            //上传文件到服务器

    Files file=upfile.getFiles();              // 获取文件组
    if(file.getSize()>maxsize){                 //判断文件大小是否符合
    result="太大了!";
    }
    com.jspsmart.upload.File files=file.getFile(0);                  //实例化文件对象

    if((!files.isMissing())&&(file.getSize()<maxsize)){
    String fname=files.getFileName();       //获取文件名 
    //String s= URLEncoder.encode(fname,"utf-8");
    upfile.save("/upload/");                //保存上传的文件
    result="上传成功!";
    }
    }
    catch(Exception e){
    e.printStackTrace();
    }
    //将信息发送到指定页面 
    request.setAttribute("result", result);
    RequestDispatcher rd=request.getRequestDispatcher("secc.jsp");
    rd.forward(request, response);
    }
    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    }}