在jsp / java ee Web应用程序中加载images / css / javascript

今天我刚刚上了Java ee和动态网络项目的第一堂课……我有一个问题要问你。

我的老师要求我们用一个非常基本的mvc概念创建一个控制器。

她给了我们一些代码示例,并要求我们从控制器调用一个视图。 好的,它的确有效! 但是,如果我尝试添加图像 ,我认为我的控制器重新路由文件夹images / img.jpg,我的图像/ img.jpg是一种类型文件头中的文字……

任何帮助,将不胜感激…

这是我的servlet Controller.java

 package ca.qc.lacmegantic.ville; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Controller */ @WebServlet("/Controller") public class Controller extends HttpServlet { private static final long serialVersionUID = 1L; /** * Processes requests for both HTTP GET and POST * methods. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String urlCP = request.getRequestURI(); String url = urlCP.substring(request.getContextPath().length()); if (url.equals("/") || url.equals("")) { request.getRequestDispatcher("WEB-INF/views/view.jsp").forward(request, response); } } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } } 

这是我的web.xml

    Controller ca.qc.lacmegantic.ville.Controller   Controller /   30   

这是我的view.jsp

      Hello World!   

Hello World!

文件结构: 文件结构

您不应该在/的URL模式上映射前端控制器servlet。 这将覆盖servletcontainer的“默认”servlet,它负责提供静态资源,如图像。 这不是你想要的。

将控制器映射到更具体的URL模式,例如/pages/*或其他。 或者/Controller ,就像你在@WebServlet注释中那样,实际上根本没有注册,因为你的web.xml没有被声明为符合Servlet 3.0。

  Controller /Controller  

您的另一个问题是您已将图像放在/WEB-INF文件夹中。 此文件夹中的内容无法公开访问。 它仅用于JSP文件,它们应该由前端控制器servlet或其他JSP转发或包含。 将/images文件夹向上移动一级,位于/WEB-INF文件夹之外。

也可以看看:

  • 我们的servlet wiki页面 – 包含一些hello world示例
  • servlet映射url模式中/和/ *之间的区别
  • 在调用转发到JSP的Servlet时,浏览器无法访问/查找CSS,图像和链接等相关资源
  • 在WEB-INF下移动资源