1

通过HttpServletRequest.getRequestURI我们可以获取用户在访问 servlet 时输入的路径。

如何编写将这些 URI 映射到我的主目录中的文件的 servlet。例如,如果用户输入 servlet 的 URL

“http://localhost:8080/webbtechnologies/html/index.html”

发送文件

C:\Users\User\My Documents\Web Technologies\html\index.html

给用户。

到目前为止,这是我的代码:

public class SimpleFileManagerServlet extends HttpServlet {
private String location;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html; charset=UTF-8");
resp.setStatus(HttpServletResponse.SC_OK);
PrintWriter out = resp.getWriter();
location = req.getRequestURI(); 
}

public static void main(String... args) throws Exception {
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.addServlet(SimpleFileManagerServlet.class, "/");

Server server = new Server(8080);
server.setHandler(context);
server.start();
server.join();
}


}
4

2 回答 2

1

看看码头的 DefaultServlet ,它完全符合您的要求。如果您想做其他事情,您可以使用 DefaultServlet 中的代码并对其进行扩展。

但是,对您的用例 DefaultServlet 进行描述对您来说就足够了。

这是javadoc:http: //download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/servlet/DefaultServlet.html

查看分发版提供的测试 webapp,了解如何在 web.xml 等中配置它。

于 2012-12-06T09:06:54.730 回答
0

Jetty'sDefaultServlet会为你做这件事。你真正需要做的就是告诉它在你的服务器上从哪里提供文件。

尝试这个:

import org.eclipse.jetty.servlet.DefaultServlet;

public static void main(String... args) throws Exception {

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);

    context.setResourceBase("file:///C:/Users/User/My Documents/Web Technologies");
    context.setContextPath("/");
    context.addServlet(new ServletHolder("default", DefaultServlet.class), "/*");

    Server server = new Server(8080);
    server.setHandler(context);
    server.start();
    server.join();
}
于 2016-05-06T14:31:53.703 回答