四:springmvc RESTRUL CRUD
来源:互联网 发布:上海培训java 编辑:程序博客网 时间:2024/06/09 04:08
需求:通过点击 index.jsp 页面的 show 按钮,在list.jsp页面显示所有 entity.(对应请求为 GET)
可以在 list.jsp 页面点击 ADD 到 input.jsp 页面进行添加 entity 操作.
可以在 list.jsp 页面对每个 entity 进行 DELETE 操作.
可以在 list.jsp 通过点击修改按钮 进入 input.jsp 页面. 此时的input.jsp 页面需要回显,并完成修改操作
一. 显示所有 User(entity).
编写 entity User , 属性为 Integer id , String userName , String password. 并给出对应 set ,get 方法
编写 UserDao , 方法包括: getAll(), get(), save() , delete(). 用 @Repository 修饰类.
save() 方法说明: 此方法应该包含 Update 功能, 当传入的 User 有 id 的时候为save 否则为 Update.
由于没有数据库,采用静态块在项目启动的时候创建一个 Map 充当数据库.
静态代码块 such as:
<code>
private staict Integer id = 0;
pirvate staict Map<Integer,User> map;
staict{
map.put(id,new User(id++,"AA","aa"));
etc.
}
</code>
注入 handler 私有成员 UserDao 并用 @Autowired 标识.
编写 handler 的 show 方法. method 为GET such as: @RequestMapping(value="/show",method=RequestMethod.GET)
通过 UserDao 方法获取全部 User 放去 map.返回 list.
二.添加一个 User
利用 a 标签到一个 handler 方法 uri 为user method 为 GET
new 一个 user 放入 map (four chapter hava explain)
返回 input
为 handler 添加一个方法 input , method 为 POST 相应 uri 为 /user
调用 UserDao.save() 方法.
返回 redirect:/show. (调用 show 方法).
注:后有补充。修改也应用 input 页面
三.删除一个 User
前提:
form 表单 method 属性没有 值为 DELETE 和 PUT 请求。
所以从浏览器发送过来的请求只有 POST 和 GET 两种请求。
spirngmvc 可以配置一个 filter 来将 POST 请求转为 DELETE 请求或者是 PUT 请求。
在 web.xml 中加入 org.springframework.web.filter.HiddenHttpMethodFilter
<filter>
<filter-name> hiddenHttpMethodFilter</filter-name >
<filter-class> org.springframework.web.filter.HiddenHttpMethodFilter</filter-class >
</filter>
<filter-mapping>
<filter-name> hiddenHttpMethodFilter</filter-name >
<url-pattern> /*</ url-pattern>
</filter-mapping>
然后我们只需要在form表单增加一个 hidden 类型的 input ,mame 值为 _method value 的可选值一般为 : DELETE PUT;
即可通过 HiddenHttpMethodFilter 拦截器将 method 方法改为 DELETE or PUT ,(注意:此时的 request 并不是原生的 request 了. 可以通过在方法的参数中传入 requst 用getClass.getName(),方法得知.这是一个被包装过的 request)
还需处理的一件事:
DELETE 操作一般为一对 a 标签来完成, a 标签并不具备 method 属性. So,可以采用 JQ . 利用 JQ 来触发一个 from 的提交.
such as:
<a class="delete" href="user/${user.id}">Delete</a>
<form action="" method="POST">
<input type="hidden" name="_method" value="DELETE"/>
</form>
<script type="text/javascript">
$(function(){
$(".delete").click(function(){
var href = $(this).attr("href");
$("form").attr("action", href).submit();
return false;
});
})
</script>
正文:
编写 handler 的 Dle 方法, method 为 DELETE uri 为 /user/{id}.
获取 id 的注解在 三.handler 方法常用注解与map
调用 userDao.delete(),方法,
返回 redirect:/show
发现错误:
错误: JQ 不好用.
错误原因: jq 静态资源文件被 springmvc 给拦截了. 因为没有给出处理方法.
解决办法: springmvc 为我们提供了默认的 servlet 来处理静态资源文件(参加 一:springmvc配置)
<mvc:default-servlet-handler/>
配置完成后在 jsp 页面查看源代码,点击 jq 的连接的确可以看到 jq 的代码.
然而发现所有请求都不好使了.解决办法是在 springmvc.xml 中在添加一个配置
<mvc:annotation-driven></mvc:annotation-driven>
四:更改一个 User
在页面中写一对 a 标签用来转到 input.jsp 页面.因为需要修改我们需要回显.
所以必须经过 handler 来获取 User 的信息.
<a href="user/${user.id}">Edit</a>
handler 中编写一个 input 方法来处理这个请求
uri 为/user/{id} mechod 为 GET
根据 id 用 userDao 获取 user 放入 map 返回 input
二的补充:关于input.jsp
根据传进来的 user 的 id 来判断这是需要修改的还是新加的,可以使用 springmvc 提供的 form 标签 其中 path 与 普通标签的 name 大致相同.
这也就是为什么添加操作转向 input 页面需要 new 一个新的 user 的原因. 因为 input 页面需要 user 的 id 来判断是修改操作还是添加操作.
有些时候我们希望某些字段要隐藏(比如 user 的密码不能被修改.当然也不能说放入 hidden 里面,查看源代码还是可以看到密码,不安全,所以页面上是不可以有這个值的)不给页面实现,如果這样那么传回来的 user 会少某些字段,這样我们做更新操作的时候,会把這个字段更新为空,这是一个错误的结果,处理办法是 springmvc 给我们提供了一个注解.@ModeAttribute.
被 @ModeAttribute 注解的方法会在请求方法(被@RequestMapping注释的方法)之前调用,当這个被 @RequestMapping 注解的方法参数中有被 @ModeAttribute 注解方法中放入map的对象(value 必须为类名首字母小写)时.springmvc 会把在 @ModeAttribute 放入 map 的对象传入被 @RequestMapping 注解的方法参数中. @ModeAttribute 常根据 @RequestParam 注解获取 id
如果 id 不为 null,则调用 userDao.get(id) 获取 user 并根据命名规则放入 map 中.
such as:
ModeAttribute 使用样例
@ModelAttribute
publicvoidgetUser(@RequestParam(value="id",required=false) Integerid,
Map<String,Object>map){
if(id!=null){
map.put("user",userDao.getById(id));
}
}
对于springmvc 的 map 里面的值是怎么个运行流程,可以打断点去看下,目前没时间解析.
编写 handler 的 Edit 方法 uri 为 /user method 为 PUT 参数为 User user 這个 user 是 ModeAttribute 给的.
0 0
- 四:springmvc RESTRUL CRUD
- SpringMVC CRUD
- SpringMVC-CRUD
- 10017---SpringMVC--RESTful SpringMVC CRUD
- springmvc--注解crud
- SpringMVC+Hibernate CRUD Application
- springMVC CRUD模板代码
- spring+springmvc+hibernate crud
- springmvc实现简单CRUD
- springmvc Rest 风格的 CRUD
- springmvc学习指南-springmvc的CRUD入门
- Struts2 之四:初探CRUD
- MongoDB java[CRUD](四)
- SpringMVC+Hibernate +MySql+ EasyUI实现CRUD
- SpringMVC REST实现入门级的CRUD
- SpringMVC+easyUI CRUD 增加数据C
- SpringMVC+easyUI CRUD 删除数据D
- SpringMVC REST实现入门级的CRUD
- Set Matrix Zeroes
- angularjs ui-view替换掉父标签
- 三:handler 方法常用注解与map
- Apache 和tomcat 的环境搭建 (修正版)
- C++ 拼接字符串的两种方法
- 四:springmvc RESTRUL CRUD
- JS高级程序设计-笔记
- mysql如何实现插入数据时如果不存在则插入如果存在则更新的操作
- 常用的工具网站和收藏文章
- 黑马程序员--#import和@class的区别
- h.264编码库x264实例
- 使用openURL实现程序间带参数跳转详解
- android动态加载jar包
- Android Studio的奇技淫巧