当前位置: 首页 > news >正文

北海建设网站成都高端网站制作公司

北海建设网站,成都高端网站制作公司,河北网络公司有哪些,seo关键词推广渠道SpringMVC 1. 学习⽬标2. 什么叫MVC#xff1f;3. SpringMVC 框架概念与特点4. SpringMVC 请求流程5. Spring MVC 环境搭建6. URL 地址映射配置7. 参数绑定8. JSON 数据开发JSON普通数组步骤1:pom.xml添加依赖步骤2#xff1a; 修改配置⽂件步骤3. 注解使⽤ 1. 学习⽬标 2. 什… SpringMVC 1. 学习⽬标2. 什么叫MVC3. SpringMVC 框架概念与特点4. SpringMVC 请求流程5. Spring MVC 环境搭建6. URL 地址映射配置7. 参数绑定8. JSON 数据开发JSON普通数组步骤1:pom.xml添加依赖步骤2 修改配置⽂件步骤3. 注解使⽤ 1. 学习⽬标 2. 什么叫MVC 模型-视图-控制器MVC是⼀个众所周知的以设计界⾯应⽤程序为基础的设计思想。它主要通过**分离模型、视图 及 控制器在应⽤程序中的⻆⾊将业务逻辑从界⾯中解耦。通常模型负责封装应⽤程序数据在视图层展示。视图仅仅只是展示这些数据不包含任何业务逻辑。控制器负责接收来⾃⽤户的请求并调⽤后台服务service或者dao来处理业务逻辑。处理后后台业务层可能会返回了⼀些数据在视图层展示。控制器收集这些数据及准备模型在视图层展示。MVC模式的核⼼思想是将业务逻辑从界⾯中分离出来允许它们单独改变⽽不会相互影响。 3. SpringMVC 框架概念与特点 Spring MVC是什么? Spring MVC是Spring家族中的⼀个web成员它是⼀种基于Java的实现了Web MVC设计思想的请求驱动类型的轻量级Web框架即使⽤了MVC架构模式的思想将web层进⾏职责解耦基于请求驱动指的就是使⽤请求-响应模型框架的⽬的就是帮助我们简化开发SpringMVC也是要简化我们⽇常Web开发的。 Spring MVC能帮我们做什么? 1. 让我们能⾮常简单的设计出⼲净的Web层 2. 进⾏更简洁的Web层的开发 3. 天⽣与Spring框架集成如IOC容器、AOP等 4. 提供强⼤的约定⼤于配置的契约式编程⽀持 5. 能简单的进⾏Web层的单元测试 6. ⽀持灵活的URL到⻚⾯控制器的映射 7. ⾮常容易与其他视图技术集成如jsp、Velocity、FreeMarker等等因为模型数据不放在特定的 API⾥⽽是放在⼀个Model⾥Map数据结构实现因此很容易被其他框架使⽤ 8. ⾮常灵活的数据验证、格式化和数据绑定机制能使⽤任何对象进⾏数据绑定不必实现特定框 架的API 9. ⽀持灵活的本地化等解析 10. 更加简单的异常处理 11. 对静态资源的⽀持 12. ⽀持Restful⻛格4. SpringMVC 请求流程 Spring MVC 请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架并且使⽤了前端控制器模式是⽤来提供⼀个集 中的请求处理机制所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计再根据请求映射规则分发 给相应的⻚⾯控制器动作/处理器进⾏处理。⾸先让我们整体看⼀下Spring MVC处理请求的流程1. ⾸先⽤户发送请求,请求被SpringMvc前端控制器DispatherServlet捕获 2. 前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调⽤HandlerMapping 3. 前端控制器(DispatherServlet)获得返回的HandlerExecutionChain包括Handler对象以及Handler对 象对应的拦截器 4. DispatcherServlet 根据获得的HandlerExecutionChain选择⼀个合适的HandlerAdapter。附注 如果成功获得HandlerAdapter后此时将开始执⾏拦截器的preHandler(...)⽅法 5. HandlerAdapter根据请求的Handler适配并执⾏对应的HandlerHandlerAdapter(提取Request中的 模型数据填充Handler⼊参开始执⾏HandlerController)。 在填充Handler的⼊参过程中根 据配置Spring将做⼀些额外的⼯作 HttpMessageConveter 将请求消息如Json、xml等数据转换成⼀个对象将对象转换为指定 的响应信息。 数据转换对请求消息进⾏数据转换。如String转换成Integer、Double等数据格式化 数据格式化。 如将字符串转换成格式化数字或格式化⽇期等 数据验证 验证数据的有效性⻓度、格式等验证结果存储到BindingResult或Error中 6. Handler执⾏完毕返回⼀个ModelAndView(即模型和视图)给HandlerAdaptor 7. HandlerAdaptor适配器将执⾏结果ModelAndView返回给前端控制器。 8. 前端控制器接收到ModelAndView后请求对应的视图解析器。 9. 视图解析器解析ModelAndView后返回对应View; 10. 渲染视图并返回渲染后的视图给前端控制器。 11、最终前端控制器将渲染后的⻚⾯响应给⽤户或客户端5. Spring MVC 环境搭建 开发环境 Idea Maven Jdk1.8 Jetty新建 Maven webApp Idea 下创建 springmvc01 ⼯程pom.xml 坐标添加 将pom.xml中多余的内容删除掉再添加SpringMVC需要的依赖 propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependencies!-- spring web --dependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion5.2.4.RELEASE/version/dependency!-- spring mvc --dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.4.RELEASE/version/dependency!-- web servlet --dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.0.1/version/dependency/dependencies buildplugins!-- 编译环境插件 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion2.3.2/versionconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/plugin!-- jetty插件 --plugingroupIdorg.eclipse.jetty/groupIdartifactIdjetty-maven-plugin/artifactIdversion9.4.27.v20200227/versionconfigurationscanIntervalSeconds10/scanIntervalSeconds!-- 设置端⼝ --httpConnectorport8080/port/httpConnector!-- 设置项⽬路径 --webAppConfigcontextPath/springmvc01/contextPath/webAppConfig/configuration/plugin/plugins /build配置 web.xml ?xml version1.0 encodingUTF-8? web-app idWebApp_ID version3.0xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd!-- 编码过滤 utf-8 --filterdescriptionchar encoding filter/descriptionfilter-nameencodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filterclassinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameencodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping!-- servlet请求分发器 --servletservlet-namespringMvc/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:servlet-context.xml/param-value/init-param!-- 表示启动容器时初始化该Servlet --load-on-startup1/load-on-startup/servletservlet-mappingservlet-namespringMvc/servlet-name!-- 这是拦截请求 /代表拦截所有请求*.do拦截所有.do请求 --!-- url-pattern//url-pattern --url-pattern*.do/url-pattern/servlet-mapping /web-app要想启动我们的 SpringMVC 环境⽬前对于 mvc 框架的配置还未进⾏。以上在 web.xml 中引⽤了servlet-context.xml ⽂件 6.servlet-context.xml 配置 beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:mvchttp://www.springframework.org/schema/mvcxmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd!-- 开启扫描器 --context:component-scan base-packagecom.xxxx.springmvc.controller/!-- 使⽤默认的 Servlet 来响应静态⽂件 --mvc:default-servlet-handler/!-- 开启注解驱动--mvc:annotation-driven/!-- 配置视图解析器 --bean classorg.springframework.web.servlet.view.InternalResourceViewResolveridinternalResourceViewResolver!-- 前缀在WEB-INF⽬录下的jsp⽬录下 --property nameprefix value/WEB-INF/jsp//!-- 后缀以.jsp结尾的资源 --property namesuffix value.jsp//bean /beans7.⻚⾯控制器的编写 Controller public class HelloController {/*** 请求映射地址 /hello.do* return*/RequestMapping(/hello)public ModelAndView hello(){ModelAndView mvnew ModelAndView();mv.addObject(hello, hello spring mvc);mv.setViewName(hello);return mv; } }添加视图⻚⾯ 在 WEB-INF 下新建 jsp ⽂件夹 并在⽂件夹下新建 hello.jsp %page languagejava importjava.util.* pageEncodingUTF-8% % String path request.getContextPath(); String basePath request.getScheme()://request.getServerName():request.getServerPort()path/ ; % !DOCTYPE HTML htmlheadbase href%basePath %titleMy JSP hello.jsp starting page/titlemeta http-equivpragma contentno-cachemeta http-equivcache-control contentno-cachemeta http-equivexpires content0 meta http-equivkeywords contentkeyword1,keyword2,keyword3meta http-equivdescription contentThis is my page/headbody!-- el表达式接收参数值 --${hello}/body /html9.启动 jetty 服务器 访问地址 http://localhost:8080/springmvc01/hello.do ⾄此springmvc 环境搭建完毕 6. URL 地址映射配置 6.1. RequestMapping 通过注解 RequestMapping 将请求地址与⽅法进⾏绑定可以在类级别和⽅法级别声明。类级别的注 解负责将⼀个特定的请求路径映射到⼀个控制器上将 url 和类绑定通过⽅法级别的注解可以细化映 射能够将⼀个特定的请求路径映射到某个具体的⽅法上将 url 和类的⽅法绑定。 6.1.1. 映射单个 URL RequestMapping(“”) 或 RequestMapping(value“”) /*** RequestMapping 声明在⽅法上⾯映射单个 URL* 访问地址如果有类路径需要写在⽅法路径前⾯* http://ip:port/springmvc01/test01* return*/ RequestMapping(/test01) // RequestMapping(value /test01) public ModelAndView test01(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test01);modelAndView.setViewName(hello);return modelAndView; } /*** 路径开头是否加 斜杠/ 均可* RequestMapping(/请求路径) 与 RequestMapping(请求路径)均可* 建议加上如RequestMapping(/test02)* 访问地址如果有类路径需要写在⽅法路径前⾯* http://ip:port/springmvc01/test02* return*/ RequestMapping(test02) public ModelAndView test02(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test02);modelAndView.setViewName(hello);return modelAndView; }6.1.3. 映射 URL 在控制器上 ⽤于类上表示类中的所有响应请求的⽅法都是以该地址作为⽗路径 Controller RequestMapping(/url) public class UrlController {/*** RequestMapping 声明在类上⾯类中的的⽅法都是以该地址作为⽗路径* 声明级别* 类级别 ⽅法级别 /类路径/⽅法路径* 访问地址* http://ip:port/springmvc01/url/test04* return*/RequestMapping(/test04)public ModelAndView test04(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test04);modelAndView.setViewName(hello);return modelAndView;} }6.1.4. 设置 URL 映射的请求⽅式 默认没有设置请求⽅式在HTTP 请求中最常⽤的请求⽅法是 GET、POST还有其他的⼀些⽅法 如DELET、PUT、HEAD 等。 可以通过 method 属性设置⽀持的请求⽅式如 methodRequestMethod.POST如设置多种请求⽅ 式以⼤括号包围逗号隔开即可。 /*** 设置请求⽅式* 通过 method 属性设置⽅法⽀持的请求⽅式默认 GET请求和 POST等请求都⽀持。* 设置了请求⽅式则只能按照指定的请求⽅式请求。* 访问地址只能使⽤POST请求访问* http://ip:port/springmvc01/url/test05* return*/ RequestMapping(value /test05,method RequestMethod.POST) public ModelAndView test05(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test05);modelAndView.setViewName(hello);return modelAndView; }6.1.5. 通过参数名称映射 URL /*** 通过参数名称访问* 通过参数的形式访问* 访问地址* http://ip:port/springmvc01/url?test06* return*/ RequestMapping(params test06) public ModelAndView test06(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test06);modelAndView.setViewName(hello);return modelAndView; }7. 参数绑定 客户端请求的参数到控制器功能处理⽅法上的参数的绑定对于参数绑定⾮常灵活。 基本数据类型 /*** 基本类型数据绑定* 参数值必须存在。如果没有指定参数值也没有设置参数默认值则会报500异常。* param age* param money*/ RequestMapping(data01) public void data01(int age, double money){System.out.println(age: age , money: money); } /*** 基本类型数据绑定* 通过注解 RequestParam 标记⼀个形参为请求参数。注解声明在形参的前⾯* 可以通过注解的属性设置相关内容* 设置参数的默认值 defaultValue* param age* param money*/ RequestMapping(data02) public void data02(RequestParam(defaultValue 18) int age, RequestParam(defaultValue 10.0) double money){System.out.println(age: age , money: money); } /*** 基本类型数据绑定* 通过注解 RequestParam 标记⼀个形参为请求参数。注解声明在形参的前⾯* 可以通过注解的属性设置相关内容* 设置参数的参数名别名 name* param age* param money*/ RequestMapping(data03) public void data03(RequestParam(defaultValue 18, name userAge) int age,RequestParam(defaultValue 10.0, name userMoney) double money){System.out.println(age: age , money: money); }包装类型 /*** 包装类型数据绑定 如果数据是基本类型建议使⽤包装类型* 客户端请求参数名与⽅法形参名保持⼀致默认参数值为null* 可以通过 RequestParam 的name属性设置参数的别名defaultValue属性设置参数默认值* param age* param money*/ RequestMapping(data05) public void data05(Integer age, Double money){System.out.println(age: age , money: money); }字符串类型 /*** 字符串数据绑定* 客户端请求参数名与⽅法形参名保持⼀致默认参数值为null* 可以通过 RequestParam 的name属性设置参数的别名defaultValue属性设置参数默认值* param userName* param userPwd*/ RequestMapping(data04) public void data04(String userName, String userPwd){System.out.println(userName: userName , userPwd: userPwd); }数组类型 /*** 数组类型数据绑定* 客户端传参形式ids1ids2ids3* param ids*/ RequestMapping(/data06) public void data06(String[] ids){for(String id : ids){System.out.println(id ---);} }JavaBean 类型 /*** JavaBean 数据绑定* 客户端请求的参数名与JavaBean对象的属性字段名保持⼀致* param user*/ RequestMapping(/data07) public void data07(User user) {System.out.println(user); }User.java package com.xxxx.springmvc.po; public class User {private int id;private String userName;private String userPwd;public int getId() {return id;}public void setId(int id) {this.id id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd userPwd;}Overridepublic String toString() {return User [id id , userName userName , userPwd userPwd ];} }8. JSON 数据开发 现在比较流行的开发方式为异步调用。前后台以异步方式进行交换传输的数据使用的是JSON,所以前端如果发送的是JSON数据后端该如何接收? 对于JSON数据类型我们常见的有三种: json普通数组[“value1”,“value2”,“value3”,…]json对象{key1:value1,key2:value2,…}json对象数组[{key1:value1,…},{key2:value2,…}] 对于上述数据前端如何发送后端如何接收? JSON普通数组 步骤1:pom.xml添加依赖 SpringMVC默认使用的是jackson来处理json的转换所以需要在pom.xml添加jackson依赖 !-- 添加json 依赖jar包 -- dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.10.0/version /dependency dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.10.0/version /dependency dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.10.0/version /dependency步骤2 修改配置⽂件 servlet-context.xml !-- 添加json 依赖jar包 -- dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.10.0/version /dependency dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.10.0/version /dependency dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.10.0/version /dependency 步骤3. 注解使⽤ ResponseBody Controller RequestMapping(/user) public class UserController {/*** ResponseBody 返回的是JOSN格式的数据返回JavaBean对象* 注解设置在⽅法体上* return*/RequestMapping(queryUser01)ResponseBodypublic User queryUser01(){User user new User();user.setId(1);user.setUserName(zhangsan);user.setUserPwd(123456);// 返回的是user对象return user;}/*** ResponseBody 返回的是JOSN格式的数据返回JavaBean对象* 注解设置在⽅法返回对象前修饰符之后* return*/RequestMapping(queryUser02)public ResponseBody User queryUser02(){User user new User();user.setId(2);user.setUserName(lisi);user.setUserPwd(123321);// 返回的是user对象return user;}/*** ResponseBody 返回的是JOSN格式的数据返回集合* return*/RequestMapping(/queryUser03)ResponseBodypublic ListUser queryUser03(){ListUser list new ArrayList();User user01 new User();user01.setId(1);user01.setUserName(zhangsan);user01.setUserPwd(123456);User user02 new User();user02.setId(2);user02.setUserName(lisi);user02.setUserPwd(123321);list.add(user01);list.add(user02);// 返回的是user集合return list;} }RequestBody RequestBody 注解常⽤来处理 content-type 不是默认的 application/x-www-form-urlcoded 类型的内 容⽐如说application/json 或者是application/xml 等。⼀般情况下来说常⽤其来处理 application/json 类型。RequestBody接受的是⼀个 json 格式的字符串⼀定是⼀个字符串。 通过 RequestBody 可以将请求体中的 JSON 字符串绑定到相应的 bean 上当然也可以将其分别绑 定到对应的字符串上。 /*** RequestBody 规定请求的参数是JOSN格式的字符串* 注解设置在形参前⾯* param user* return*/ RequestMapping(/getUser) ResponseBody public User getUser(RequestBody User user){System.out.println(user);return user; } % page contentTypetext/html;charsetUTF-8 languagejava % html headtitleJSON处理/title%-- 引⼊Jquery的核⼼JS⽂件 --%script typetext/javascript srcjs/jquery-3.4.1.js/script /head bodyinput typebutton valueJSON数据测试 onclicktest()/script typetext/javascript/*** 请求传递JSON格式的数据* 返回JSON格式的数据*/function test(){$.ajax({// 请求⽅式 Get|Posttype: post,// 请求路径url: user/getUser,// 预期服务器返回的额数据类型dataType: json,// 设置服务器请求类型的数据类型为JSON格式contentType: application/json;charsetutf-8,// 传递给服务器的参数data:{userName:admin,userPwd:123456},// 回调函数接收服务器返回的响应的结果 函数中的形参⽤来接收服务器返回的数据success:function(data){console.log(data);}})}/script /body /html
http://www.sadfv.cn/news/341631/

相关文章:

  • 寻找东莞微信网站建设哈尔滨免费做网站
  • 怎么提高网站响应速度seo优化推广软件
  • 怎么区分网站的好坏wordpress菜单页面
  • 动漫网站建设赚钱吗项目介绍ppt模板
  • 有哪些好用的设计网站有哪些内容一个网站推广
  • 开发网站性能监控个人网页设计作品ps
  • 设计需要了解的网站WordPress 磁力
  • 网站建设合同书简单版网站本科报考官网
  • 做视频资源网站有哪些难点做网站前端用什么软件
  • 在线制作视频的网站如何网上外贸接单
  • 浙江新中环建设有限公司 网站长春怎样建网站?
  • 深圳培训网站开发杭州做电商网站
  • 果洛州商城网站建设乐清女孩
  • 网站affiliate怎么做wordpress前端
  • 网站建设组织管理怎么写长沙有哪些网络平台公司
  • 青年旅行社网站建设规划书注册公司网址
  • 怎么在百度做网站推广网站开发过程 知乎
  • qq官方官网入口seo关键词教程
  • 龙岩做网站哪家好祁连县公司网站建设
  • 上海做网站去哪里临沂做网站电话
  • 宁夏电力建设工程公司门户网站深圳网站建设首选
  • 网站设计欣赏导航wordpress获取自定义文章列表
  • 那里可以做工作室做网站创意logo图片大全
  • 赣榆城乡建设局网站百度快照推广一年要多少钱
  • 长沙做网站工作室自己做电影网站需要什么
  • 怎么把网站做的小程序网站加载页面怎么做
  • 如何更改网站备案号2015年做哪些网站致富
  • 燕十八html教程网站建设公司可以做网站吗
  • 和林格尔网站制作清远网站建设推广
  • 为什么做腾讯网站运城注册公司