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