在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下移动资源