2014-10-06 2 views
0


파일 확장자를 덮어 쓰지 만 여전히 액세스중인 파일을 읽어야하는 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()은 실제 파일을 선택합니다.

리소스 사용 방법에 대한 정보가 누락 되었습니까? 파일을 읽는 다른 방법이 있습니까?

답변

0

이러한 작업에는 getServletContext().getRealPath()을 사용할 수 있습니다. 의 당신이 webapps 폴더에 파일 myText.txt을 가정 해 봅시다 :

@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!"); 
    } 
    } 

코드는 파일을 열고 콘솔의 내용을 덤프합니다.

+0

그 중 하나가 작동하지 않아 문제가 다른 곳에 있어야한다고 생각해서 다시 확인 했으므로 서버가 비 ASCII 경로에서 실행되고 있으므로 프로젝트를 옮겼고 지금은 매력처럼 작동합니다. – valarion

+0

어쨌든 웹 프로젝트에서'../ ..'(점 세그먼트)를 사용하지 마십시오. '/ WEB-INF/class' 외부의 코드에 접근 할 필요가 있다면 프로젝트의 루트를 기준으로 경로를 사용하십시오. –

관련 문제