为什么在Struts 2中使用文件上传找不到文件

问题描述 投票:0回答:1

我在 JSP 程序中使用

org.apache.commons.*
org.apache.commons.disk.*
org.apache.commons.fileupload.servlet.*
包进行文件上传,不需要 Struts,它工作得很好,数据很容易使用,但是当我将 Struts 2 核心库添加到中时我使用 MyEclipse 8.5 的 Web 项目无法正常工作,并且没有找到任何字段。可能程序是有
upload.parseRequest
的。 坦白说,我无法理解这个问题,所以我也分享我的程序

AddCategory.jsp
:

<html>
<head>
  <meta http-equiv="refresh" content="30">
</head>

<script type="text/javascript">
  function blank() {


    if (document.cate.cat.value == "Enter New Category") {
      alert(" Category must not be blanked !!!");
      document.cate.cat.focus();
      return false;
    }
    else if (!document.getElementById("file1").value) {
      alert("No file selected");
      return false;
    }
    else {
      return true;
    }
  }

</script>
<form name="cate" action="CategoryAdded.jsp" method="post" enctype="multipart/form-data" onsubmit="return blank()">
  <table width="100%" border="0">
    <tr>
      <th colspan="2" scope="col">
        <div align="center">Create New Category</div>
      </th>
    </tr>
    <tr>
      <td width="50%">
        <div align="right">Enter New Category:</div>
      </td>
      <td width="50%">
        <input name="cat" type="text" id="cat" value="Enter New Category"
               onFocus="if(this.value== 'Enter New Category'){   this.value='' ; this.style.background='white';}"
               onBlur="if(this.value==''){this.value='Enter New Category';  this.style.background='lightyellow'}">
      </td>
    </tr>

    <tr>
      <td width="50%">
        <div align="right">Upload photo:</div>
      </td>
      <td width="50%"><input name="file1" type="file" id="file1"></td>
    </tr>


    <tr>
      <td colspan="2">
        <div align="center">
          <input type="submit" name="Submit" value="Add Category">
        </div>
      </td>
    </tr>
  </table>
</form>
</html>

    

CategoryAdded.jsp
:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%@page import="java.io.*" %>
<%@ page language="java" errorPage="" %>
<%@ page import="java.sql.*" %>
<%@ page import="org.apache.commons.io.*" %>
<%@page import="java.util.Iterator,java.util.List" %>
<%@page import="org.apache.commons.*,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.*" %>
<%@ page import="java.util.*" %>
<%@page import="org.apache.commons.fileupload.FileItemFactory" %>
<%@page import="org.apache.commons.fileupload.FileItem" %>
<%@page import="org.apache.commons.fileupload.FileUploadException" %>
<%@page import="p1.DBInfo" %>
<%@page import="p1.Identy" %>
<%
  String path = request.getContextPath();
  String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<%
  String pname = "";
  Identy id = new Identy();
  String cod = id.code();

  boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);
  if (!isMultipartContent) {
    System.out.println("No multipart found");
    return;
  }


  FileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  try {
    List<FileItem> fields = upload.parseRequest(request);
    Iterator<FileItem> it = fields.iterator();

    if (!it.hasNext()) {
      System.out.println("No fields     found");
      return;
    }


    DBInfo obj = new DBInfo();
    Connection cn = obj.getConn();
    PreparedStatement ps = cn.prepareStatement("insert into category values(?,?,?)");

    while (it.hasNext()) {

      FileItem fileItem = it.next();

      if (fileItem.getFieldName().equals("cat")) {
        pname = fileItem.getString();
        System.out.println("category name is " + pname);
      }

      boolean isFormField = fileItem.isFormField();

      if (!isFormField) {
        String s = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\") + 1);

        fileItem.write(new File("D:\\Practice\\ShoppingCart\\WebRoot\\images\\" + s));
        System.out.println(s);
        fileItem.getOutputStream().close();

        ps.setString(3, "D:\\Practice\\ShoppingCart\\WebRoot\\images\\" + s);
      }
    }

    ps.setString(1, pname);
    ps.setString(2, pname + cod);

    int i = ps.executeUpdate();

    if (i == 1) {
%>
<head>


  <script type="text/javascript">
    function myFunction() {


      var r = confirm("New Category Added Successfully!!!\nIf you Want to Add more New Category then Press Ok!!!");
      if (r == true) {

        window.location = "AddCategory.jsp";


      }
      else {
        window.location = "Tryy.jsp";
      }

    }
  </script>


</head>

<body onload="myFunction()">
</body>

<%
    }
    cn.close();

  } catch (Exception e) {
    e.printStackTrace();
  }
%>
</html>
java jsp file-upload struts2 myeclipse
1个回答
0
投票

最好的办法是重写 JSP 以删除 scriptlet 并将业务逻辑移至操作类。

您还可以使用 Struts2

<s:if>
<s:else>
标签来有条件地呈现内容。

commons-fileUpload
是Struts2中上传文件的默认实现,要正确使用它,您可以运行一个示例Struts2项目,如struts-2-upload-multiple-files-example

© www.soinside.com 2019 - 2024. All rights reserved.