Java Jetty servlet重写扩展读取文件
我试图在Jetty上创建一个servlet,它覆盖文件扩展名,但仍然需要读取正在访问的文件。 我一直在利用资源进行尝试,但仍然一事无成。到目前为止,我已经尝试了这段代码,正如您将看到的,资源在那里,但不知何故我无法访问它们:Java Jetty servlet重写扩展读取文件,java,servlets,resources,jetty,getresource,Java,Servlets,Resources,Jetty,Getresource,我试图在Jetty上创建一个servlet,它覆盖文件扩展名,但仍然需要读取正在访问的文件。 我一直在利用资源进行尝试,但仍然一事无成。到目前为止,我已经尝试了这段代码,正如您将看到的,资源在那里,但不知何故我无法访问它们: package valarionch.lab0.webapp.todo; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java
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);
}
}
我也尝试了下一个代码,但也没有成功:
getClass().getClassLoader().getResource(".").toString()+"../.."+req.getRequestURI()
因此getClass.getClassLoader.getResource..toString转到WEB-INF/classess,+../..+req.getRequestURI选择实际文件
我是否遗漏了一些关于资源如何工作的信息?还有其他读取文件的方法吗?您可以使用getServletContext.getRealPath执行此任务。假设您在webapps文件夹中有文件myText.txt:
代码将打开该文件并将其内容转储到控制台。这也不起作用,因此它让我认为问题出在其他地方,所以我再次检查,这就是我意识到的。。。服务器是从非ascii路径执行的,所以我移动了项目,现在它就像一个符咒一样工作。无论如何,不要使用../。。web项目中的点段。如果需要访问/WEB-INF/类之外的代码,请使用相对于项目根的路径。
getClass().getClassLoader().getResource(".").toString()+"../.."+req.getRequestURI()
@SuppressWarnings("serial")
@WebServlet(urlPatterns = { "*.ToDo" })
public class UseGetRealPath extends HttpServlet {
public void doGet( HttpServletRequest req, HttpServletResponse res )
throws ServletException, IOException {
String todoFile = getServletContext().getRealPath("/myText.txt");
FileReader fr = new FileReader( todoFile );
for( int c = fr.read(); c != -1; c = fr.read() ) {
System.out.print( (char) c );
}
fr.close();
res.getWriter().println( "check the console!" );
}
}