Я пытаюсь сделать сервлет на 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
I судимого со следующим кодом тоже, но не работал:...
getClass().getClassLoader().getResource(".").toString()+"../.."+req.getRequestURI()
так GetClass() getClassLoader() getResource ("") ToString() идет к WEB-INF/classess и + "../ .." + req.getRequestURI() выбирает фактический файл.
Я пропустил что-то о том, как работают ресурсы? Есть ли другой способ прочитать файл?
Это тоже не сработало, поэтому мне показалось, что проблема должна быть где-то в другом месте, поэтому я снова проверил, и вот где я понял ... сервер выполнялся с пути, отличного от ascii, поэтому я переместил проект, и теперь он работает как шарм. – valarion
В любом случае, не используйте '../ ..' (dot-сегменты) в своих веб-проектах. Если вам нужно получить доступ к коду вне путей использования '/ WEB-INF/class' относительно корня вашего проекта. –