1.SpringMVC静态资源请求:
期望实现的功能,应在显示所有员工之前,弹出一个对话框显示,内容为------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<!-- 引入jquery库 -->
<script type="text/javascript" src="scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
alert("----------");
});
</script>
</head>
<body>
<form action="" method="post">
<input type="hidden" name="_method" value="DELETE">
</form>
<h1 align="center">员工信息</h1>
<table border="1px" width="70%" align="center" cellpadding="0px">
<tr>
<th>ID</th>
<th>lastName</th>
<th>Email</th>
<th>Gender</th>
<th>DepartmentName</th>
<th>Operation</th>
</tr>
<c:forEach items="${requestScope.emps}" var="emp">
<tr align="center">
<td>${emp.id}</td>
<td>${emp.lastName}</td>
<td>${emp.email}</td>
<td>${emp.gender==0?'女':'男'}</td>
<td>${emp.department.departmentName}</td>
<td><a href="employeeDel/${emp.id}" class="_delete">Delete</a>
<a href="employee/${emp.id} ">Edit</a></td>
</tr>
</c:forEach>
</table>
<h2 align="center"><a href="employeeAddpage">add New Emp</a></h2>
</body>
</html>
出现问题
2.如何解决
- 原因:
DispatcherServlet的<url-pattern>中配置的是/, 则会匹配到所有客户端的请求,都交给DispatcherServlet进行处理。
当发送静态资源请求(请求项目下的静态文件html txt js jpg...),也会被DispatcherServlet进行处理, 此时,是找不到当前请求所对应的请求处理方法,则控制台输出警告: No mapping found for HTTP request with URI [xxxxx] in DispatcherServlet
当我们想通过alter("------")弹出对话框时,需要先访问js文件的,它属于一个静态资源请求处理的过程,也会被DispatcherServlet进行处理
- 解决:
(1)在sprinigmvc.xml中配置<mvc:default-servlet-handler/> ,该配置会在SpringMVC的上下文装配一个DefaultServletHttpRequestHandler的Bean。 会过滤进入到DispatcherServlet的请求,如果请求是经过映射的, 也就是能找到当前请求对应的请求处理方法,则把该请求交给DispatcherServlet进行处理。 如果请求是没有经过映射的, 则不交给DispatcherServlet进行处理,而是交给WEB应用服务器的默认的Servlet进行处理。
默认的Servlet参考: Tomcat中 web.xml中的配置. 默认的servlet会尝试查找当前请求对应的静态资源.
如果使用的默认的Servlet的 servlet-name 不叫 default,则需要使用default-servlet-name 在<mvc:default-servlet-handler>中 进行明确的指定。
<mvc:default-servlet-handler/>
但此时又会出现404
(2)当加入<mvc:default-servlet-handler/>后,会导致@RequestMapping的映射失效, 需要再加入一个配置<mvc:annotation-driven/>解决@RequestMapping失效的问题。
在springmvc.xml中加入
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
访问就可以显示了