springmvc运算-基础练手项目(3)-删除操作

springmvc错误心得:请求路径问题

1、浏览器地址栏:域名(也叫根目录)/文件目录/a.jsp
如果:网页中超链接

<a href="/emp/${emp.id}">Delete</a>

则浏览器跳转地址:   域名(也叫根目录)/emp/数字id

如果:网站中超链接

<a href="emp/${emp.id}">Delete</a>

则浏览器跳转地址:  域名(也叫根目录)/文件目录/emp/数字id
=============================================
相对路径:是相对当前浏览器路径来说的。
如果浏览器地址:根目录/abc/1005 页面中 超链接是
<a href=”abc/1008″>scan</a>
点击超链接的结果是:根目录/abc/abc/1008       [这个需要注意啦]

关于:
request.getContextPath()得到的是   项目所在目录   :
如果项目为根目录,则得到一个””,即空的字条串【在浏览器看来:等价于-> 域名】
如果项目名为dzjc,将得到/dzjc 【在浏览器看来等价于 ->域名/dzjc】

比如下面的超链接:如果网站名不在根目录(也就是不等于域名),比如在/dzjc(也就是域名/dzjc)
<a href="${pageContext.request.contextPath }/emp">hh</a>
效果等价于 <a href="/dzjc/emp" >hh</a>

<a href=”XXX.jsp”> 应该就是指当前路径下的这个xxx.jsp页面,有时候也可以在head里设置html:base来解决路径的问题,不过用的最多的还是request.getContextPath。

用EL来表示相同功能的EL为:${pageContext.request.getContextPath()}
=============================================
2、服务端控制器中:

在springmvc中,@RequestMapping的值可以/xxx,也可以是xxx,效果一样

@RequestMapping(value="/emp/{id}",method=RequestMethod.DELETE)

特别注意一下,在rest风格中 请求页面如果是 “emp/${emp.id}  ,那么处理器的RequestMapping值也要是 /emp/{id}   不要写错成 /emp 导致无法访问

另一方面:控制器的返回值   return “redirect:/emps”; 指明重定向和转发的都要用用绝对路径,否则路径解析就出错了。


一、配置文件

web.xml 配置文件和查询所有雇员信息的配置相同。
springmvc.xml配置文件,因为需要请求静态资源(加载js文件),然后利用js发送post请求。
所以要在 springmvc.xml【即转发配置器】中,添加请求静态资源的代码:

   <!--  
		default-servlet-handler 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler,
		它会对进入 DispatcherServlet 的请求进行筛查, 如果发现是没有经过映射的请求, 就将该请求交由 WEB 应用服务器默认的 
		Servlet 处理. 如果不是静态资源的请求,才由 DispatcherServlet 继续处理

		一般 WEB 应用服务器默认的 Servlet 的名称都是 default.
		若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定
		
	-->
	<mvc:default-servlet-handler/>
	<!-- 前面的 mvc:default-servlet-handler 可以解决静态资源了,但是让其他经过handler的请求,又失效了,所以配置了下面的 mvc:annotation-driven 来解决问题 -->
	<mvc:annotation-driven></mvc:annotation-driven>	

已经在springmvc基础-配置开发环境中提到过了。

二、请求测试页

第一步,跳转到待删除页
其实就是/emps请求,跳转到showGetEmps.jsp

第二步,在showGetEmps.jsp页面中配置   删除模块的超链接。

<td><a class="delete" href="emp/${emp.id}">Delete</a></td>

因为是删除方法,必须要提供post方法传递。所以需要js,而加载js属于请求静态资源。所以上文介绍了如何编辑配置文件,用来支持加载静态资源。

第三步,在showGetEmps.jsp页面中配置  form表单。

<body>
    <form action="" method="POST">
       <input type="hidden" name="_method" value="DELETE"/>
    </form>
  ...
</body>

第四步,在showGetEmps.jsp页面中,用js控制 删除的超链接以post方式发送。

<!--  
	SpringMVC 处理静态资源:
	1. 为什么会有这样的问题:
	优雅的 REST 风格的资源URL 不希望带 .html 或 .do 等后缀
	若将 DispatcherServlet 请求映射配置为 /, 
	则 Spring MVC 将捕获 WEB 容器的所有请求, 包括静态资源的请求, 
        SpringMVC 会将他们当成一个普通请求处理, 因找不到对应处理器将导致错误。
	2. 解决: 在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/>
-->
<script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
	$(function(){
		alert("hello jquery");
		$(".delete").click(function(){
			var href = $(this).attr("href");
			$("form").attr("action", href).submit();
			return false;
		});
	})
</script>

三、结果响应页

还是返回showGetEmps.jsp页面

四、编辑控制器

//在所有雇员信息页,进行删除雇员操作 //跳转部分不需要了,本身就是跳转到显示有雇员信息页
@RequestMapping(value="/emp/{id}",method=RequestMethod.DELETE)
public String deleteEmp(@PathVariable("id") Integer id){
        employeeDao.delete(id);	
        System.out.println("hello delete");
	return "redirect:/emps";
}

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments