javaweb框架之springmvc第二天
来源:互联网 发布:精美的php个人网站源码 编辑:程序博客网 时间:2024/06/06 13:19
1、springmvc数据模型
1.1.使用注解和常用类
1.1.1. 常用类
1.Model(最常用的方式)
//这种方式最常用@RequestMapping("/listUser1")public String listUser(Model model){ //向域中设置list对象,key是字符串list model.addAttribute("list", list); return "list";}
2.ModelMap
//实现类map接口的类@RequestMapping("/listUser2")public String listUser(ModelMap map){ //向域中设置list对象,key是字符串list map.addAttribute("list", list); return "list";}
3.ModelAndView
@RequestMapping("/listUser3")public ModelAndView listUser(){ ModelAndView mv = new ModelAndView(); mv.addObject("list", list); mv.setViewName("list"); return mv;}
1.1.2. 注解
1.@ModelAttribute
能把变量设置到域中
//@ModelAttribute能够把对象设置到域中@RequestMapping("/saveUser")public String saveUser(@ModelAttribute("u") User user){ System.out.println(user); return "result";}
2.@SessionAttribute
//将user信息在放到session//需要作用在类上@SessionAttributes("loginUser") @RequestMapping("/login") public String login(Model model){ model.addAttribute("loginUser", new User("张三",123)); return "result"; }
2、servletapi
要使用Sevlet的一些API,只要直接将其作为参数传入即可。你需要request,就传入request, 需要response,就传入response。springmvc支持传入的Sevlet原生api一共有以下这些:
- HttpServletRequest
- HttpServletResponse
- HttpSession
- Java.security.Principal
- Locale
- InputStream
- OutputStream
- Reader
- Writer
代码示例:
@RequestMapping("/saveUser")public void saveUser(HttpServletRequest request, HttpServletResponse response) throws IOException{ String name = request.getParameter("name"); String age = request.getParameter("age"); System.out.println(name+" "+ age); System.out.println("服务器路径:"+request.getContextPath()); response.sendRedirect("http://www.baidu.com");}
3、json数据处理
@RequestBody
处理请求是json格式的数据,能够将json格式的数据转为java对象,依赖HttpMessageConverter,需要在后台配置
@ResponseBody
能够将返回数据处理成json格式数据,依赖HttpMessageConverter,需要在后台配置
3.1 配置springmvc.xml,使springmvc能够解析json格式的数据
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <value>text/json;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 将StringHttpMessageConverter的默认编码设为UTF-8 --> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> </mvc:message-converters></mvc:annotation-driven>
3.1 引入解析json的包
<!--spring-json依赖 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.4.2</version> </dependency>
3.2 使用@ResponseBody来处理返回数据
//该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。@ResponseBody@RequestMapping("/listProduct")public List<Product> listProduct(){ List<Product> list = new ArrayList<Product>(); list.add(new Product(1,"iPhone8",7000,2)); list.add(new Product(2,"mac book",12000,1)); list.add(new Product(3,"meta9",3500,2)); list.add(new Product(4,"s8",7000,1)); list.add(new Product(5,"oppo",1000,5)); return list;}
3.3 使用@RequestBody来处理请求数据
Controller代码:
@ResponseBody@RequestMapping("/saveProduct")public boolean saveProduct(@RequestBody Product product){ System.out.println(product); return true;}
请求代码:
$(function(){ $("#btn").click(function(){ //将form的数据序列化成数组 var params = $("form").serializeArray(); var _json = {}; for (var item in params) { //循环数据,将数据封装成json格式 _json[params[item].name] = params[item].value; } $.ajax({ type:"post", url:"${pageContext.request.contextPath}/saveProduct", data:JSON.stringify(_json), dataType:'json', headers:{ Accept:"application/json", "Content-Type":"application/json" }, success:function (data) { if(data){ alert("添加成功!"); } }, error:function () { alert("请求失败"); } }); });});
4、restful风格接口
rest风格的接口,是目前最流行的轻量级接口,交互的内容是基于json格式。
在Rest 基础设计中,资源使用以下动词进行操作,也意味着,你作为Rest 服务开发者或者客户,应该遵循这些的标准。:
• 创建资源 : 使用 HTTP POST
• 获取资源 : 使用 HTTP GET
• 更新资源 : 使用 HTTP PUT
• 删除资源 : 使用 HTTP DELETE
我们提供的rest服务,应满足一下场景:
• GET 方式请求/user/ 返回用户列表
• GET 方式请求/user/1返回id为1的用户
• POST 方式请求/user/ 通过user对象的JSON 参数创建新的user对象
• PUT 方式请求/user/1 更新id为1的发送json格式的用户对象
• DELETE 方式请求/user/1删除 ID为1的user对象
• DELETE 方式请求/user/删除所有user
4.1.Cotroller实现
@RestController//等于@Controller+@ResponseBodypublic class UserController { Map<Integer, User> map = new HashMap<Integer, User>(); public UserController(){ //初始化用户,因为SpringMVC Controller是单例模式,因此可以在系统启动时初始化数据 map.put(1, new User("张三丰",100,"太极")); map.put(2, new User("东方不败",20,"葵花宝典")); map.put(3, new User("风清扬",50,"独孤九剑")); map.put(4, new User("扫地僧",60,"易筋经")); } @RequestMapping(value="/user", method=RequestMethod.GET) public List<User> listUser(){ List<User> list = new ArrayList<User>(); Set<Map.Entry<Integer, User>> set = map.entrySet(); for (Map.Entry<Integer, User> entry : set) { list.add(entry.getValue()); } return list; } @RequestMapping(value="/user/{id}", method=RequestMethod.GET) public User listUser(@PathVariable("id") int id){ return map.get(id); } @RequestMapping(value="/user/{id}",method=RequestMethod.DELETE) public List<User> deleteUser(@PathVariable("id") int id){ //根据ID删除用户 map.remove(id); return listUser(); } @RequestMapping(value="/user", method=RequestMethod.POST) public List<User> addUser(@RequestBody User user){ //临时用一下,存在安全隐患 int id = map.size()+1; map.put(id, user); return listUser(); } @RequestMapping(value="/user/{id}", method=RequestMethod.PUT) public List<User> updateUser(@PathVariable("id") int id, @RequestBody User user){ //更新用户 map.put(id, user); return listUser(); }}
4.2.rest测试:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><script type="text/javascript" src="js/jquery-1.8.3.js"></script><script type="text/javascript">$(function(){ $("#btn1").click(function(){ $.ajax({ type:"get", url:"user", data:{}, success:function (data) { for(var i=0;i<data.length;i++){ alert(data[i].name+" "+data[i].age+" "+data[i].hobby); } }, error:function () { alert("请求失败"); } }); }); $("#btn2").click(function(){ $.ajax({ type:"get", url:"user/1", data:{}, success:function (data) { alert(data.name+" "+data.age+" "+data.hobby); }, error:function () { alert("请求失败"); } }); }); $("#btn3").click(function(){ var data = {"name":"乔峰","age":"30","hobby":"降龙十八掌"}; $.ajax({ type:"post", url:"user", //注意,json串对象转换为json字符串 data:JSON.stringify(data), dataType:"json", headers:{ Accept:"application/json", "Content-Type":"application/json" }, success:function (data) { for(var i=0;i<data.length;i++){ alert(data[i].name+" "+data[i].age+" "+data[i].hobby); } }, error:function () { alert("请求失败"); } }); }); $("#btn4").click(function(){ var data = {"name":"虚竹","age":"28","hobby":"北冥神功"}; $.ajax({ type:"put", url:"user/4", //注意,json串对象转换为json字符串 data:JSON.stringify(data), dataType:"json", headers:{ Accept:"application/json", "Content-Type":"application/json" }, success:function (data) { for(var i=0;i<data.length;i++){ alert(data[i].name+" "+data[i].age+" "+data[i].hobby); } }, error:function () { alert("请求失败"); } }); }); $("#btn5").click(function(){ $.ajax({ type:"delete", url:"user/1", data:{}, success:function (data) { for(var i=0;i<data.length;i++){ alert(data[i].name+" "+data[i].age+" "+data[i].hobby); } }, error:function () { alert("请求失败"); } }); });});</script></head><body><input type="button" value="查询所有用户" id="btn1"><input type="button" value="查询单个用户" id="btn2"><input type="button" value="新增用户" id="btn3"><input type="button" value="修改用户" id="btn4"><input type="button" value="删除用户" id="btn5"></body></html>
4.3.常用的测试工具:
• firefox浏览器的httprequest插件
• chrome浏览器的postman
• soapui
• postman
- javaweb框架之springmvc第二天
- javaweb框架之springmvc
- javaweb框架之springmvc第三天
- JavaWeb---框架SpringMvc+Mybatis开发项目第二季(共三季)
- 【javaWeb第二天】-反射
- JavaWeb入门第二天
- JavaWeb配置详解(结合框架SpringMVC)
- javaweb-----springmvc框架额使用2
- JavaWeb框架-SpringMVC-2-增删改查
- SpringMVC 入门------ 第一个SpringMVC框架的JavaWeb项目
- javaweb之自定义JDBC框架
- javaWeb--Struts2框架之三
- WebMVC框架 之 SpringMVC
- 框架之SpringMVC
- SpringMVC之框架概述
- SpringMVC之框架概述
- SpringMVC框架之HelloWorld
- JAVAweb学习日记第二天
- ioc 与di的区别和联系
- python字符串排序(按输入顺序/按字符出现次数/按字符)
- select语句for update
- xjoi奋斗群群赛13
- Qpainter绘制文本
- javaweb框架之springmvc第二天
- javaweb框架之springmvc第三天
- jstree的基本应用----记录
- 009 极限的四则运算定理(加、减、乘、除)
- 作为软件连接件的区块链(上)【渡鸦论文系列】
- 实验一 Linux操作系统的安装
- 每日区块链:福布斯:区块链大规模应用的阻碍因素;能源公司Origin联合Power Ledger试验区块链能源共享
- 区块宝研究院月报:《区块链:价值互联时代的引擎(2017)》
- JsTree3.3动态加载树节点