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

海口免费网站建站模板国内网站用django做的

海口免费网站建站模板,国内网站用django做的,东莞网站建设是什么意思,门户网站建设不断目录 MVC核心组件RequestMapping注解域对象共享数据视图RESTful请求与响应HttpMessageConverter请求响应 拦截器配置异常处理基于配置的异常处理基于注解的异常处理 配置类与注解配置MVC执行流程 Spring MVC是Spring Framework提供的Web组件#xff0c;全称是Spring Web MVCRequestMapping注解域对象共享数据视图RESTful请求与响应HttpMessageConverter请求响应 拦截器配置异常处理基于配置的异常处理基于注解的异常处理 配置类与注解配置MVC执行流程 Spring MVC是Spring Framework提供的Web组件全称是Spring Web MVC是目前主流的实现MVC设计模式的框架提供前端路由映射、视图解析等功能。 MVC是一种软件架构思想把软件按照模型视图控制器来划分。 View视图层指工程中的html,jsp等页面作用是和用户进行交互展示数据。 Controler控制层指工程中的Servlet作用是接收请求和响应浏览器调用业务逻辑。 Model模型层指工程中的JavaBean进行数据交互用来处理数据。 JavaBean分成两类 一实体类Bean专门用来存储业务数据的实体类。 一业务处理Bean 指Servlet或Dao对象专门用来处理业务逻辑和数据访问。 服务端三层架构 表现层 业务逻辑层 数据访问层 Spring MVC Spring MyBatis MVC核心组件 DispatcherServlet前置控制器负责调度其他组件的执行可以降低不同组件之间的耦合性。 Handler处理器完成具体的业务逻辑相当于Servlet。 HandlerMappingDispatcherServlet是通过 HandlerMapping把请求映射到不同的Handler。 HandlerInterceptor处理器拦截器如果我们需要进行一些拦截处理可以通过实现该接口完成。 HandlerExecutionChain处理器执行链。 HandlerAdapter处理器适配器Handler执行业务方法之前需要进行一系列的操作包括数据类型转换、把表单数据封装等这些一系列的操作都是由HandlerAdapter完成DispatcherServlet通过HandlerAdapter执行不同的Handler。 ModelAndView封装了模型数据和视图信息作为Handler的处理结果返回给DispatcherServlet。 ViewResolver视图解析器DispatcherServlet通过它把逻辑视图解析为物理视图最终把渲染的结果响应给客户端 mvc响应流程 客户端请求被DispatcherServlet接收根据HandlerMapping映射到Handler生成Handler和HandlerInterceptorHandler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServletDispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理返回一个ModelAndView对象给DispatcherServletDispatcherServlet把获取的ModelAndView对象传给ViewResolver视图解析器把逻辑视图解析成物理视图。ViewResolver返回一个View把模型填充到视图中DispatcherServlet把渲染后的视图响应给客户端。 RequestMapping注解 底层是Maping注解作用在类、接口和方法上主要属性有name、value、method和params其他属性如下。 String name() default ; //path和value一样 AliasFor(path) String[] value() default {}; //value一个字符串数组 AliasFor(value) String[] path() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {};value属性必须配置当有多个时能够匹配多个请求。支持ant风格路径?表示匹配任意单个字符(不为空、?和斜线)*表示匹配任意的0或多个字符(不为?和斜线)**表示匹配任意一层或多层目录或路径(0层也匹配)必须为/**/test左右不添任何字符。 RequestMapping(/a?c/test) public String test(){return test; } //?a th:href{/abc/test}/a //*a th:href{/ac/test}/a //**a th:href{/test}/aSpring MVC支持路径中的占位符原始方式/test?id1Rest风格/test/1。 RequestMapping(/test/{id}) public String test(PathVariable(id)Integer Id){System.out.println(idID);return test; } //a th:href{/test/1}/a好处是可以在路径中传入参数。 method属性可以通过请求方式匹配请求比如get(参数放请求头、无请求体、速度快)、post(安全、参数放请求体传数据量大)没有配置则匹配任意方式请求不支持的请求方式浏览器报405。 RequestMapping(value{/user,/admin},method{RequestMethod.get,RequestMethod.post})派生注解GetMapping、PostMapping、DeleteMapping、PutMapping对应不同的请求方式。 而目前浏览器只支持get、post两种请求方式其他请求方式默认通过get请求设置hidden隐藏域完成。这一点在spring boot原理解析有讲。 form action/user methodpostinput name_method typehidden valuedelete/input typesubmit valuedelete提交/ /formSpringBoot中手动开启。 spring:mvc:hiddenmethod:filter:enabled: true #开启页面表单的Rest功能设置自定义的methodFilter编写webconfig配置类创建filter对象调用HiddenHttpMethodFilter的setMethodParam方法。 params属性同样也是一个数组参数设置为多个时请求参数必须全部满足才能匹配并执行方法不满足则报400错误。 RequestMapping(value{/user,/admin},params{usernameadmin,pass}) //a th:href{/admin(usernameadmin,pass123456)}/a //a th:href{/admin?usernameadminpass123456}/a 也可以不用params属性获取参数只要方法中的形参与请求中的参数名保持一致便能获取参数值。 其他方式获取请求参数 1ServletAPI获取请求参数 RequestMapping(/test) public String test(HttpServletRequest r){String username r.getParameter(username);String password r.getParameter(pass);System.out.println(username:password);return test; } //a th:href{/admin?usernameadminpass123456}/a 2springMVC获取多个请求参数 hobby为一个参数数组或集合若请求参数中出现多个同名的参数可以在方法中设置形参为字符串类型或字符串数组接收参数若为字符串则参数值用逗号拼接。 RequestMapping(/test) public String test(String username,String password,String hobby){System.out.println(username;password;hobby);return test; }(3) 通过RequestParam注解 RequestParam将建立请求参数与控制器方法中的形参之间的映射关系含有属性value(请求参数)布尔属性required默认true必须传入该请求参数。默认值defaultValue属性为该参数设置一个默认值。 RequestMapping(/test) public String test(RequestParam(user_name)String username,String password,String[] hobby){System.out.println(username;password;Arrays.toString(hobby));return test; }(4通过实体类对象接收请求参数 这种方式要求实体类的对象属性与请求参数对应并一致名字必须相同。 RequestMapping(/test) public String test(User user){System.out.println(user);return test; }Headers属性同样也是一个数组设置header请求头参数信息比如Accept、Host、User-Agent等不符合Header参数则浏览器报404错误。 RequestMapping(value{/user,/admin},header{Hostlocalhost:8080})RequestHeader注解建立请求头与方法中形参之间的映射他与RequestParam一样具有相同的属性。 CookieValue注解将Cookie数据与控制器方法的形参建立映射关系属性与上述一样用法也一样。 CharacterEncodingFilter处理请求参数乱码问题 !--web.xml中配置过滤器-- filterfilter-nameencoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueutf-8/param-value/init-paraminit-paramparam-nameforceEncoding/param-nameparam-valuetrue/param-value/init-param /filter域对象共享数据 域对象request、session、applicationcontext 1通过Servlet在request共享数据 RequestMapping(/test) public String test(HttpServletRequest r){//namevaluer.setAttribute(testScope,helloworld);return test; } //获取a th:text${testScope}/2通过ModelAndView向request共享数据 RequestMapping(/test) public ModelAndView test(){ModelAndView mav new ModelAndView();mav.addObject(testScope,helloworld);mav.setViewName(test);return mav; } //获取a th:text${testScope}/3通过Model向request共享数据 RequestMapping(/test) public String test(Model model){model.addAttribute(testScope,helloworld)return test; } //获取a th:text${testScope}/4通过Map向request共享数据 RequestMapping(/test) public String test(MapString,Object map){map.put(testScope,helloworld)return test; } //获取a th:text${testScope}/5通过ModelMap向request共享数据 RequestMapping(/test) public String test(ModelMap modelMap){modelMap.addAttribute(testScope,helloworld)return test; }不管使用何种方式共享数据返回页面最终将通过DispatcherServlet封装在一个ModelAndView中并通过视图解析器解析。 向session中共享数据: RequestMapping(/test) public String test(HttpSession httpSession){//namevaluehttpSession.setAttribute(testScope,helloworld);return test; } //获取a th:text${session.testScope}/向application中共享数据: RequestMapping(/test) public String test(HttpSession httpSession){//request也可以获取applicationServletContext application httpSession.getServletContext();application.setAttribute(testScope,helloworld);return test; } //获取a th:text${application.testScope}/视图 springMVC的视图是View接口用于渲染数据把model中的数据放入view中展示。默认视图种类有重定向Redirect和转发Forward。当控制器中的视图名称无任何前缀此时视图会被配置的视图解析器解析最终通过转发出去比如ThymeleafResolver。 RequestMapping(/test) public String test(){return test; }转发视图InternalResourceViewResolver RequestMapping(/test) public String test(){return forward:/test2; } RequestMapping(/test2) public String test(){return test; }重定向视图RedirectViewResolver 此时视图名不会被配置的视图解析器解析而是创建一个重定向视图解析器去掉redirect:重定向到另一个请求。 RequestMapping(/test) public String test(){return redirect:/test2; }使用视图控制器view-controller 在类路径下SpringMVC.xml配置文件中使用view-controller标签配置请求路径与视图名称的对应关系。 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsdcontext:component-scan base-packagecom.example.mvc.controller/bean idviewResolver classorg.thymeleaf.spring5.view.ThymeleafViewResolverproperty nameorder value1 /property namecharacterEncoding valueUTF-8 /property nametemplateEnginebean classorg.thymeleaf.spring5.SpringTemplateEngineproperty nametemplateResolverbean classorg.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolverproperty nameprefix value/WEB-INF/templates/ /property namesuffix value.html /property nametemplateMode valueHTML5 /property namecharacterEncoding valueUTF-8 //bean/property/bean/property/beanmvc:view-controller path/ view-nameindex/mvc:view-controller /beans 如果既使用了视图控制器又使用了控制器方法需要开启注解。 mvc:annotation-driven/mvc:annotation-driven开启对静态资源的访问 mvc:default-servlet-handler/RESTful REST: Representational State Transfer表现层资源状态转移。 特点 1不同的请求方式对应不同的控制器处理方法get,post,delete,put 2请求参数融入URL中成为一个完整URL/user/1而不是用问号开头 3虽然请求方式不同但请求地址的路径大致相同比如以同样的开头/user/user/{id} 由于浏览器普通只支持get和post请求所以这里只介绍通过表单隐藏域方式实现put和delete请求处理。 上述条件请求方式为postAjax除外请求参数中有_method用于替换请求方式type为hidden隐藏。 1delete删除请求 DeleteMapping(/user/{id}) public String deleteUserById(PathVariable(id)Integer Id){System.out.println(删除用户idID的用户);return redirect:/user; }删除用户: a th:href{/user/}${user.id}删除/a 或 a th:href{/user/${user.id} }删除/a1put修改请求 put请求处理 PutMapping(/user/{id}) public String updateUserById(PathVariable(id)Integer Id){System.out.println(修改用户idID的用户);return redirect:/user; }修改用户表单: form action/user methodpostinput name_method typehidden valuePUT/input nameid typehidden th:value${user.id}/用户名input typetext valueusername/密码input typepassword valuepassword/input typesubmit value修改/ /form请求与响应 HttpMessageConverter http消息转换器将请求报文信息转换为java对象或将java对象转换为响应报文。它提供了两个注解和两个类型RequestBody、ResponseBody、RequestEntity、ResponseEntity。 请求 1RequestBody 获取请求体需要在控制器方法中设置形参并用该注解标识。 RequestMapping(/test) public String test(RequestBody String requestBody){System.out.println(RequestBodyrequestBody);return test; }2RequestEntity 封装请求报文的java类型在控制器方法中的参数前设置可以获取请求头、请求体等信息。 RequestMapping(/test) public String test(RequestEntityString requestEntity){System.out.println(请求头requestEntity.getHeaders());System.out.println(请求体requestEntity.getBody());return test; }响应 使用HttpServletResponse实现响应数据 RequestMapping(/test) public String test(HttpServletResponse response) throws IOException{//将helloworld作为响应体返回response.getWriter().print(helloworld); }3ResponseBody 在控制器方法上标识将该方法的返回值作为响应报文的响应体返回给浏览器。 RequestMapping(/test) ResponseBody public String test(RequestEntityString requestEntity){String test abc;return test; }ResponseBody处理json对象 springboot自动配置了默认的jackson依赖只需要在核心配置文件中进行配置 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: Asia/Shanghai如何使用springMVC则需要导入依赖在springmvc的核心配置文件中配置注解驱动在处理器方法上使用ResponseBody注解标识并将Java对象作为方法返回值返回就会自动转换为json格式的字符串。 RestController注解 RestController是一个复合注解标识在类上相当于为类添加Controller注解为类中的所有方法添加ResponseBody注解。 4ResponseEntity 将该类型的数据作为控制器方法的返回值该返回值就是响应报文即可以自定义响应报文。 MultiValueMapString,String headers new HttpHeaders(); headers.add(Content-Disposition,attchment;filenamexx.jpg); ResponseEntitybyte[] responseEntity new ResponseEntity(bytes,headers,statuscode) ;使用ResponseEntity文件下载使用ServletContext获取下载文件真实路径并创建输入流对象创建字节数组输入流读入字节数组创建响应头对象HttpHeaders和状态码HttpStatus设置下载方式和文件名最后根据响应头、状态码、读入流创建ResponseEntity对象并返回。 文件上传控制器方法接收MultipartFile类型的文件数据先通过session获得ServletContext对象查看文件名是否在对应路径中存在若存在使用UUID作为文件名拼接文件名后缀上传若文件不存在创建文件上传路径MultipartFile上传对象调用tranferTo方法上传即可。 form th:action{/fileupload} methodpost enctypemultipart/formdata文件input typefile valuephoto/input typesubmit value上传/ /form拦截器配置 SpringMVC中拦截器用于拦截控制器方法拦截器必须实现HandlerInterceptor接口(ctrl±o)重写preHandle方法或者继承HandlerInterceptorAdapter类。拦截器在配置文件或配置类中配置config配置类须实现WebMvcConfigurer 的配置接口重写addInterceptor方法注册拦截器。 public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//获取sessionHttpSession httpSession request.getSession();if(httpSession.getAttribute(loginUser)null){response.sendRedirect(/f/toLogin);return false;//拦截}//放行return true;} }拦截器配置 mvc:interceptionmvc:mapping path/**/mvc:exclude-mapping path/login/ref beanLoginInterceptor / /mvc:interception三个抽象方法: preHandle执行控制器方法前执行该方法postHandle执行控制器方法后执行该方法afterComplation渲染视图后执行该方法。 多个拦截器执行顺序与配置的先后顺序或Order注解的优先级顺序有关执行流程具体如下。 先顺序执行所有拦截器的preHandle方法 如果当前拦截器prehandler返回为true则执行下一个拦截器的preHandle。如果当前拦截器返回为false直接倒序执行所有已经成功执行(返回true)的拦截器的afterCompletion。 如果任何一个拦截器返回false直接跳出不执行目标方法postHandle都不会执行倒序执行所有已经成功执行(返回true)的拦截器的afterCompletion方法。当所有拦截器preHandle都返回True执行目标方法倒序执行所有拦截器的postHandle方法。前面的步骤有任何异常都会直接倒序触发afterCompletion。页面成功渲染完成以后也会倒序触发 afterCompletion。 异常处理 对于控制器方法执行所出现的异常SpingMVC提供了HandlerExceptionResolver接口其实现类有默认异常处理解析器DefaultHandlerExceptionResolver和自定义的SimpleMappingExceptionResolver简单映射异常处理解析器。 基于配置的异常处理 Spring MVC配置文件 properties的键表示处理器方法执行过程中出现的异常properties的值表示若出现指定异常时设置一个新的视图名称跳转到指定页面exceptionAttribute属性设置一个属性名将出现的异常信息在请求域中进行共享 bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolverproperty nameexceptionMappings!--设置异常映射算术运算异常例如1/0跳转到error.html--propsprop keyjava.lang.ArithmeticExceptionerror/prop/props/property!--设置在请求域中共享的异常属性信息th:text${e}--property nameexceptionAttribute valuee/ /bean基于注解的异常处理 ControllerAdvice将当前类标识为异常处理的组件对控制器Controller的增强可对 controller中被 RequestMapping注解的方法加一些逻辑处理。 ExceptionHandler用于设置所标识的方法处理的异常ExceptionHandler加在ControllerAdvice中处理全局异常。ExceptionHandler的value值可以是数组可以添加许多可能出现的异常在该方法中当出现算数运算异常或空指针异常就会跳转到设置的异常页面并且展示异常信息。 ControllerAdvice public class ExceptionController {ExceptionHandler(value {ArithmeticException.class,NullPointerException.class})public String exception(Exception e, Model model){model.addAttribute(e,e);return error;} } //p th:text${e}/配置类与注解配置 在配置中使用Configuration注解标识配置类使用 EnableWebMvc 注解来启用MVC配置使用ComponentScan开启组件扫描。 Configuration EnableWebMvc public class WebConfig implements WebMvcConfigurer {//拦截器配置Overridepublic void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**).excludePathPatterns(/,/login.html,/f/toLogin,/user/login,/img/*,/layui/**);}//文件上传解析器Beanpublic MultipartResolver multipartResolver(){CommonsMultipartResolver cmr new CommonsMultipartResolver();return cmr;}//异常处理Overridepublic void configureHandlerExceptionResolvers(ListHandlerExceptionResolver resolvers){SimpleMappingExceptionResolver eResolver new SimpleMappingExceptionResolver();Properties prop new Properties();prop.setProperty(java.lang.ArithmeticException,errpr);eResolver.setExceptionMapping(prop);eResolver.setExceptionAttribute(e);resolvers.add(eResolver);}} 其他组件配置如请求媒体内容协商器配置ContentNegotiationConfigurer、信息转换器配置configureMessageConverters、视图控制器addViewControllers、configureViewResolvers视图解析器、addResourceHandlers静态资源、configureDefaultServletHandling请求处理可以参考以下文章webconfig配置 Spring MVC 配置详解 WebMvcConfigurer MVC执行流程 DispatcherServlet.doService()-DispatcherServlet.doDispatch() 继承FrameworkServlet.service()–super.service()-doGet()… ​ processRequest()-抽象doService() 1前端控制器DispatcherServlet捕获请求解析请求URL得到URI判断URI对应映射若没有相应的映射处理则交给default-servlet-handler处理访问静态资源没有找到同样返回404。 2若找到了对应的映射则寻找到合适的Handler、HandlerAdapter、相应拦截器链。 3执行拦截器preHandler进入一个异常处理流程preHandle执行成功将执行Handle控制器方法。 4Handler执行完后返回一个ModelAndView对象。 5倒序执行拦截器postHandle和afterCompeletion方法。 6根据ModelAndView对象选择合适的ViewResolver进行视图解析渲染视图如有异常异常处理解析器HandlerExceptionResolver会处理。
http://www.pierceye.com/news/384487/

相关文章:

  • 网站开发PHP招聘宁波梅山建设局网站
  • 免费做一建或二建题目的网站colorway wordpress
  • 简单网站建设合同贵州省高层建筑信息平台
  • 手机网站登录模板电视剧百度风云榜
  • 一嗨租车网站建设的功能特色梅林做网站
  • 网站关于我们怎么做36氪 wordpress 模板
  • 医疗网站建设计划书菏泽手机网站建设
  • 南京外贸网站建设哪家好免费网站建站方法
  • 文化馆建设网站网架公司有哪些
  • 企业如何申请网站51网站空间相册
  • 自己电脑做网站服务器系统网站建设违约交付
  • 什么叫域名访问网站wordpress app 接口
  • 学生网站建设实训总结工信部备案号查询平台
  • 凡科建站如何制作论坛备案网站需要多久
  • 网站建设的公司哪家是上市公司专业外贸网站制作
  • 建站公司杭州免费投票网站制作
  • 网站优化公司效果网络营销毕业后做什么工作
  • 移动互联网的应用论文可以优化网络的软件
  • 网站建设软件哪个最好郑州广告设计与制作公司
  • 浦口区网站建设售后保障如何维护网站
  • 企业网站建设 安全合肥做网站加盟
  • 水果网络营销策划方案电商网站怎样优化
  • 免费数据源网站wordpress主页面
  • 做网站百度收费吗青岛冠通市政建设有限公司网站
  • 菜鸟建网站福建福州罗源建设局网站
  • 企业内网网站制作自己的网站多少钱
  • 关于公司网站建设的申请wordpress站群功能
  • 外贸做企业什么网站珠海的网站建设
  • 做网站教程百度云外贸soho建站公司
  • 上海市网站建设网站增加导航栏