Servlet/JSP: "Access Denied" 尝试添加图像时出错

Servlet/JSP: "Access Denied" error when trying to add an image

我在 jsp/Servlet 中添加图像时遇到问题。我收到以下错误:

C:\Users\palex\eclipse-workspace\AgendaJSP_Path\img(拒绝访问)

我有windows10个;没看懂是操作系统问题还是其他。

我放项目的结构

以及我添加图片的代码:

package pack_person;

import java.io.File;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class addpersonimage
 */
@WebServlet("/addpersonimage")
@MultipartConfig(fileSizeThreshold=1024*1024*2, 
        maxFileSize=1024*1024*10,      
        maxRequestSize=1024*1024*50)   

public class addpersonimage extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public addpersonimage() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
                
                String name=request.getParameter("name");
                
                Part part=request.getPart("file");
                String namefile=extractFileName(part);
                String path="C:\Users\palex\eclipse-workspace\AgendaJSP_Path\img" + File.separator  + namefile;
                File fileSaveDir= new File(path);
                
                part.write(path + File.separator);
                String message=null;
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/persons","root","pssw");
                    PreparedStatement pst = con.prepareStatement("insert into persons values (?,?,?)");
                    pst.setString(1, name);
                    pst.setString(2, namefile);
                    pst.setString(3, path);
                    int row = pst.executeUpdate();
                    if(row>0) {
                        message= "Successfully";
                        }
                    } catch (Exception e) {
                    out.println(e);
                }
                request.setAttribute("Message", message);
                 
                getServletContext().getRequestDispatcher("/Message.jsp").forward(request, response);
                
        }
           
        private String extractFileName(Part part) {
            String contentDisp = part.getHeader("content-disposition");
            String[] items = contentDisp.split(";");
            for (String s : items) {
                if (s.trim().startsWith("namefile")) {
                    return s.substring(s.indexOf("=") + 2, s.length()-1);
                }
            }
            return "";
        }
    }

阅读 servlet 规范。这是一件好事。它的存在是为了防止黑客利用您的网站渗透您的计算机。

该规范还提供了您需要知道的信息,您可以知道在哪里可以存储图像,以及如何覆盖默认值。

所以你正在尝试将文件写入路径 C:\Users\palex\eclipse-workspace\AgendaJSP_Path\img 然后你得到“访问被拒绝”

  1. 分配给该路径的文件访问权限是什么? 服务器为 运行 的用户帐户是否具有写入权限 到这条路?
  2. 你 运行 servlet 在哪个服务器? 一些服务器,例如 Tomcat Apache,是沙盒的,只能 写入沙箱允许的路径。再次为 Tomcat 你需要 将您的文件写入这些路径之一或将您的路径添加到 tomcat9.service Ubuntu 在 /usr/lib/systemd/system (其中 9 是 tomcat 的当前版本号) 所以检查路径权限并检查服务器沙箱。