파일 확장자를 덮어 쓰지 만 여전히 액세스중인 파일을 읽어야하는 Jetty에서 서블릿을 만들려고한다.
저는 자원으로 노력했지만 아직 아무 것도 얻을 수 없습니다.Jetty 서블릿이 확장 읽기 파일을 덮어 쓴다.
package valarionch.lab0.webapp.todo;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
@WebServlet(urlPatterns = { "*.ToDo" })
public class ToDoHandler extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
String s = req.getParameter("s");
boolean small = (s != null && s.equals("1"));
PrintWriter out = resp.getWriter();
if (!small) {
out.println("<html><head><title>ToDo list</title></head>"
+ "<body>");
}
for (String res : getServletContext().getResourcePaths("/")) {
System.out.println("Resource: " + res);
System.out.println("ResourceURL: " + getServletContext().getResource(res));
System.out.println("ResourceStream: " + getServletContext().getResourceAsStream(res));
}
InputStream input = getServletContext().getResourceAsStream(req.getRequestURI());
System.out.println(input);
ToDoFormatter.parse(input, out, req.getParameter("q"));
if (!small) {
out.println("</body></html>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
이 코드를 인쇄이 :
Resource: /META-INF/
ResourceURL: null
ResourceStream: null
Resource: /WEB-INF/
ResourceURL: null
ResourceStream: null
Resource: /index.html
ResourceURL: null
ResourceStream: null
Resource: /ToDoList.ToDo
ResourceURL: null
ResourceStream: null
null
나는 tryed이 당신이 볼 수와 같이 자원이 있지만, 어떻게 든 그들에 액세스 할 수 없습니다, 지금까지이 코드를 tryed 및했습니다 .. 너무뿐만 아니라 일을하지 않았다 다음 코드 :.
getClass().getClassLoader().getResource(".").toString()+"../.."+req.getRequestURI()
그래서 getClass() getClassLoader를()의 getResource (".") toString()는 WEB-INF로 이동/수업을 통해 및 + "../ .."+ req.getRequestURI()은 실제 파일을 선택합니다.
리소스 사용 방법에 대한 정보가 누락 되었습니까? 파일을 읽는 다른 방법이 있습니까?
그 중 하나가 작동하지 않아 문제가 다른 곳에 있어야한다고 생각해서 다시 확인 했으므로 서버가 비 ASCII 경로에서 실행되고 있으므로 프로젝트를 옮겼고 지금은 매력처럼 작동합니다. – valarion
어쨌든 웹 프로젝트에서'../ ..'(점 세그먼트)를 사용하지 마십시오. '/ WEB-INF/class' 외부의 코드에 접근 할 필요가 있다면 프로젝트의 루트를 기준으로 경로를 사용하십시오. –