springmvc的REST_CRUD

一、REST_CRUD步骤

① 配置环境

1)配置web.xml

<!-- 配置 SpringMVC 的DispatcherServlet -->

<!-- 配置 HiddenHttpMethodFilter: 把 POST 请求转为 DELETE、PUT 请求 -->

2) 配置springmvc.xml

<!-- 配置自动扫描的包 -->

<!-- 配置视图解析器 -->

② 建实体类和DAO(包含注解)

③ 建Handle(包含注解)

在对应的显示界面,由于SpringMVC没有遍历标签,这里使用JSTL标签,<c:>。可以直接把数据放在map中,springmvc会自动的存入到作用域中。

二、jsp的遍历

    entities、dao、handlers  (要使用Spring的Annotation注解来注入)

    注: 其中,SpringMvc不支持像Struts2里面的遍历方式,所以还是得使用jstl的C标签if else循环语句来取值。

<c:if test="${emptyrequestScope.employees }">

              没有任何员工信息.

</c:if>

<c:if test="${!emptyrequestScope.employees }">

       <tableborder="1" cellpadding="10" cellspacing="0">  …………………………

<c:forEach items="${requestScope.employees}" var="emp">

   ……<td>${emp.id}</td>……

   ……<td>${emp.gender== 0 ? 'Female' : 'Male' }</td>……. //可用于显示男女

</c:forEach>

</c:if>

三、form标签使用

    <%@ taglib prefix="form"uri="http://www.springframework.org/tags/form" %>

    使用 form 标签原因:可以更快速的开发出表单页面, 也可以更方便的进行表单值的回显。

    使用 form 标签注意:可以通过 modelAttribute 属性指定绑定的模型属性,若没有指定该属性,则默认从 request 域对象中读取 command 的表单 bean,如果该属性值也不

    存在,则会发生错误。因为SpringMCV默认会认为这个表单自动回显的,这时候就会去请求域中寻找这个bean来匹配当前的表单值(即使不需要回显,也要这么做)。

<form:form action="${pageContext.request.contextPath}/emp" method="POST" modelAttribute="employee">

//这里的emplyee就是要读取的表单bean,在handlers中对应的 map.put("employee",new Employee());  

四、使用post的方式来delete数据

由于超链接<a href>一般都是get方式的请求,而在web.xml中配置的过滤器只能把 POST 请求转为 DELETE 或 PUT 请求,所以这时候要引入js来处理(先用form表单将转    为post,然后再转为DELETE,然后再交由js来控制)。

而在引入js时,就是引入了静态资源,SpringMVC 处理静态资源会出错:

① 为什么会有这样的问题:

优雅的 REST 风格的资源URL 不希望带 .html 或 .do 等后缀,若将 DispatcherServlet 请求映射配置为 /, 则 Spring MVC 将捕获 WEB 容器的所有请求, 包括静态资源的请        求, SpringMVC 会将他们当成一个普通请求处理, 因找不到对应处理器将导致错误。

② 解决: 

在 SpringMVC 的配置文件中配置 <mvc:default-servlet-handler/>

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

一般 WEB 应用服务器默认的Servlet 的名称都是 default.,若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定。

当然也要配<mvc:annotation-driven ></mvc:annotation-driven>,不然之前的requestMapping就会出错。       

	对于js中的控制,修改所有form 的action是 .deleted的href
	$(function(){
		$(".delete").click(function(){
			var href = $(this).attr("href");
			$("form").attr("action", href).submit();			
			return false;
		});
	})

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

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

五、使用post的方式来put数据

对于_method 不能使用 form:hidden 标签, 因为form默认是表单回显的,而modelAttribute对应的bean 中没有 _method 这个属性,

    所以不能使用 <form:hiddenpath="_method" value="PUT"/>,应该使用<input type=”hidden” name=”_method”value=”PUT” />

<form:form action="${pageContext.request.contextPath }/emp"method="POST" modelAttribute="employee">             

              <form:errors path="*"></form:errors>    //查看所有的异常错误

              <br>

              <c:iftest="${employee.id == null }">

                     <!--path 属性对应 html 表单标签的 name 属性值 -->

                     LastName:<form:input path="lastName"/>

                     <form:errors path="lastName"></form:errors>

              </c:if>

              <c:iftest="${employee.id != null }">

                     <form:hidden path="id"/>

                     <input type="hidden" name="_method" value="PUT"/>

</c:if>

</form:form>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值