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

网站制作易捷网络品牌建设工作经验

网站制作易捷网络,品牌建设工作经验,查询站长工具会给网站带来外链这样好吗,网站开发语言有什么要求一、Sping MVC的介绍 1. 使用Front(前端)设计模式改写代码 1.1 目前我们的写法 目前我们所写的项目#xff0c;持久层、业务层的类都放入到Spring容器之中了。他们之间需要注入非常方便#xff0c;只需要通过Autowired注解即可。 但是由于Servlet整个生命周期都是被Tomca…一、Sping MVC的介绍 1. 使用Front(前端)设计模式改写代码 1.1 目前我们的写法 目前我们所写的项目持久层、业务层的类都放入到Spring容器之中了。他们之间需要注入非常方便只需要通过Autowired注解即可。 但是由于Servlet整个生命周期都是被Tomcat进行管理的一个功能对应一个Servlet并且无法把Servlet放入到Spring容器中。所以每次编写Servlet时都需要编写init方法先获取到Spring容器然后从Spring容器中取出需要使用的Bean。 1.2 使用Front设计模式的写法 Front前端设计模式就是有一个前端不是前端专业那个前端是最前面的意思统一入口在统一入口根据请求url调用自己的编写的普通方法。 通过一个Servlet进行分发,把每个功能分发到每个单独的普通类的普通方法 1.3 使用Front设计模式优点 这样带来的好处是 只需要在一个Servlet中编写获取容器Bean的代码减少了代码冗余。 不需要为每个控制器都创建一个类而是可以在一个普通Java类中提供普通实例方法代表以前servlet中的service方法。 因为可以自己编写普通Java类这类可以放入到Spring容器中注入Service更方便。 同时因为是自己编写的Java所以可以进行一些封装对其他操作进行简化。代码中没有体现 2. Spring MVC介绍 Spring MVC 虽然在平时认为是一个独立的框架。但其本质为Spring 框架的一个扩展在Spring官方ZIP包就是一个spring-webmvc.jar的jar包。 Spring MVC在Spring官方的Projects的顶级项目中并没有可以认为Spring MVC属于Spring Framework的二级子项目。 Spring MVC是基于Front设计模式总体效果和上面我们自己写的Front结果类似但Spring MVC作为一个框架肯定要比我们写的代码复杂很多功能也强大很多。 Spring MVC中已经帮助编写了前端入口的DispatcherServlet里面编写了请求分发功能但是并没有提供WebServlet注解需要我们在web.xml手动编写servlet配置。 EmpController在Spring MVC称为控制器类Handler里面的方法称为控制单元HandlerMethod M:模型层:包含数据校验 V:视图层: 国际化,标签库 C:控制层: 转发重定向,参数,拦截器,作用域等 3. Spring中的父子容器问题 因为Spring MVC属于Spring的子框架所以Spring MVC中可以使用Spring框架的全部内容。 Spring 官方为Spring MVC专门定义了一个容器这个容器里面放Spring MVC中全部Bean且这个容器属于Spring容器的子容器。 有这样的一个规定Spring MVC子容器可以调用Spring 父容器的全部内容。但是Spring父容器不能调用Spring MVC子容器内容。 二、Spring MVC环境搭建 1. 创建项目并添加依赖 Spring MVC 在平时随意可以当成一个独立框架看待但其本质只是Spring Framework中的spring-webmvc.jar文件这个jar文件依赖了spring web模块和Spring框架核心功能的5个依赖。所以在只使用Spring MVC框架时需要导入spring-webmvc依赖即可。 dependencies!-- 依赖了Spring框架核心功能的5个依赖以及Spring整合Web的依赖spring-web --dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.3.16/version/dependency/dependencies 2. 创建Spring MVC配置文件 与Spring配置文件同理,这个文件的名称是随意的只要和web.xml中配置对应上就可以。 ?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.xsd!-- springmvc容器配置文件 --!-- 目的: 扫描Component注解,将控制器交给springmvc容器--context:component-scan base-packagecom.sh.controller/!-- 让Spring MVC的注解生效 --mvc:annotation-driven/mvc:annotation-driven!-- 注释驱动 -- /beans 3. 编写web.xml内容 因为SpringMVC源码中并没有WebServlet的注解,所以需要手动配置,在web.xml中配置 web.xml的配置是为了让前端控制器DispatcherServlet生效。并且加载Spring MVC的配置文件。 !DOCTYPE web-app PUBLIC-//Sun Microsystems, Inc.//DTD Web Application 2.3//ENhttp://java.sun.com/dtd/web-app_2_3.dtd web-appdisplay-nameArchetype Created Web Application/display-name!-- 配置前端控制器 (DispatcherServlet)--servletservlet-nameds/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!-- 为了创建springmvc容器 需要配置springmvc的配置文件 --init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc.xml/param-value/init-param!-- tomcat启动之后创建servlet --load-on-startup1/load-on-startup/servletservlet-mappingservlet-nameds/servlet-nameurl-pattern/query/url-pattern/servlet-mapping/web-app 1. 由于配置了 load-on-startup1/load-on-startupTomcat启动时就会创建DispatcherServlet对象 2. DispatcherServlet对象创建后执行初始化方法servletConfig对象读取servlet的初始化参数(init-param)创建SpringMVC容器.(设置spring容器为父容器,父容器就是一个属性,是逻辑上的父子关系,不是继承关系)springMVC配置文件中配置了扫描包的注解的路径context:component-scan base-packagecom.sh.controller/通过注解,可以将控制器类交给SpringMVC容器管理 3. 只要获取到了SpringMVC容器就可以获取SpringMVC容器中的控制器类对象 4.DispatcherServlet映射路径为/ ,表示除了.jsp文件,其他全部匹配 5.客户端发起请求,协议://ip:port/query访问资源query与DispatcherServlet 中配置的映射路径(/)可以匹配,通过控制器类找到控制单元,可以根据请求资源和控制 单元的注解值找到对应的控制单元,执行控制单元,处理请求 4. 创建控制器类 Spring MVC自定义控制器类都是以Controller结尾。 这些类都是放在controller的包中。 控制单元方法的访问权限修饰符没有强制要求但是多写成public的。 控制单元的方法名没有要求只要满足Java方法名定义要求就可以。 Controller public class EmpController {/* 控制单元 *///请求映射 (控制单元映射的路径,根据该路径可以找到该控制单元)RequestMapping(/query)public String query(){System.out.println(query);/** 最底层默认请求转发,即使不指定返回值,默认也会使用转发* */return index.jsp;} }三、RequestMapping注解 RequestMapping注解可以写在控制器类上也可以写在控制单元方法上。 如果写在类上表示当前类所有控制单元的映射路径都以指定路径开头。 如果写在方法上表示当前方法的映射路径。最终访问这个控制单元的映射路径为类上RequestMapping映射路径方法上RequestMapping映射路径。 这种在类上写RequetMapping的写法在以后做管理类型项目、或网站后台项目中使用的比较多。平时在练习的时候绝大多数是直接在控制单元上写RequestMapping注解而不在类上写RequestMapping。 package com.sh.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;/* * RequestMapping : 可以使用在控制类上,也可以用在控制单元上 * 1. 用在控制类上, 访问控制单元方法时,必须加上控制器类上RequestMapping中的注解值 * 2. 用在控制单元方法上, 当前控制单元映射的请求路径 * RequestMapping注解也映射路径时,可以省略/,例如/emp与emp * * RequestMapping注解中的属性: * 1.path : 映射的路径 * 映射一个访问路径: path {aa} 可以省略{} * 映射多个访问路径: path {aa,bb} * 2.value和path作用相同只有一个value属性时value可以省略 * 3.name添加描述信息 * 4.method只允许使用该种请求方式才能访问* RequestMethod.POST* RequestMethod.GET* ...** 简化* GetMapping -》 RequestMapping(method RequestMethod.GET)* PostMapping -》RequestMapping(method RequestMethod.POST)** 5.params 指定子请求中必须携带的请求参数* 6.headers 指定请求中必须携带的请求头** * */ Controller RequestMapping(emp) public class EmpController {/* 控制单元 *///请求映射 (控制单元映射的路径,根据该路径可以找到该控制单元)RequestMapping(query)public String query(){System.out.println(query);/** 最底层默认请求转发,即使不指定返回值,默认也会使用转发* */return /index.jsp;}RequestMapping(path aa)public String aa(){System.out.println(aa);return /index.jsp;}RequestMapping(path {bb,cc})public String bb(){System.out.println(bc);return /index.jsp;}RequestMapping(path dd,name bc)public String dd(){System.out.println(bc);return /index.jsp;}//只允许get请求访问RequestMapping(path ee ,method RequestMethod.GET)public String ee(){System.out.println(bc);return /index.jsp;}RequestMapping(path ff,params name)public String ff(){System.out.println(bc);return /index.jsp;}RequestMapping(value hhh, produces text/plain;charsetutf-8)ResponseBody//ResponseBody注解与produces属性一般会一起使用,设置响应的编码与类型public String hh(){System.out.println(hh() 执行了);return aaa你好;} }produces只有在使用ResonseBody注解中才生效。 四、映射路径 1. 映射路径介绍 映射路径在之前Java EE阶段中学习过就是web.xml中url-pattern的值或者WebServlet()注解的值。 映射路径无论是在Servlet中还是在Spring MVC中都表示当URL中出现指定路径时会执行Servlet的方法或执行Spring MVC的控制单元。 2. 多级路径 映射路径既然名字中已经叫做路径了所以写法上也支持路径的写法。 RequestMapping(/test/test2) public String test2(){return first.jsp; } 3. 多级路径中注意事项 3.1 多层路径中最优写法 只需要在返回值中使用绝对路径就可以减少出错的情况。 跳转时 / 表示项目根目录也就是webapp目录的根目录。 4. Ant风格的映射路径 在Spring MVC中支持Ant风格的映射路径写法。所谓的Ant风格就是支持三种特殊的符号。 符号解释?匹配任意单字符*匹配0或者任意数量的字符**匹配0或者更多数量的目录 解释说明 使用Ant的特殊符号时表示模糊匹配。可能出现客户端发送过来的URL能匹配上多个映射路径这时的优先级为 固定值 (bjsxt1) ?形式(bjsxt?) 一个*号(/*) (/**)形式 // 优先级最高 RequestMapping(/sh1) public String testAnt1(){System.out.println(sh);return /first.jsp; } // 优先级低于sh1。sh开头后面跟个任意内容符号 RequestMapping(/sh?) public String testAnt2(){System.out.println(sh);return /first.jsp; } // 优先级低于。一层路径任意内容 RequestMapping(/*) public String testAnt3(){System.out.println(11111);return /first.jsp; } // 优先级低于*。任意层路径 RequestMapping(/**) public String testAnt4(){System.out.println(22222);return /first.jsp; } 五、Spring MVC 中的转发和重定向 1. 转发和重定向复习 在前面Java EE阶段中学习过两个概念转发和重定向。这两个概念都是出现在资源之间相互跳转的。 两者区别: 1转发为一次请求tomcat内部跳转。重定向为多次请求不是tomcat内部跳转。 2转发是一次请求无论服务器内部转发多少次请求对象都不变。所以转发可以共享请求域的值。同时对于客户端浏览器URL是不变的。 重定向后需要客户端重新发起请求和重定向之前不是一个请求。所以重定向后不能获取到之前设置在请求域的值。同时客户端浏览器URL是改变的。 3转发只能跳转到当前项目内部资源。重定向可以跳转到外部资源。例如从自己的项目中跳转到百度应该使用重定向。 4转发时资源路径如果是绝对路径第一个 / 表示当前项目根目录。 重定向时资源路径时绝对路径第一个 / 表示 Tomcat 的 webapps目录即当前项目的上层目录。 转发的代码实现 request.getRequestDispatcher(/first.jsp).forward(request,response); 重定向的代码实现 response.sendRedirect(/sh/first.jsp); 2. Spring MVC中的转发和重定向 在Spring MVC框架中默认情况下都使用转发进行寻找资源。 package com.sh.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;Controller RequestMapping(dept) public class DeptController {RequestMapping(query)public String query(){System.out.println(query);return forward:del;//相当于return del;//默认底层就是请求转发}RequestMapping(del)public String del(){System.out.println(del);return forward:/index.jsp;}//请求重定向只能手动设置RequestMapping(aa)public String aa(){System.out.println(aa);return redirect:/index.jsp;}}3. Spring MVC转发和重定向时绝对路径 在Spring MVC中无论是转发还是重定向使用绝对路径时/都表示项目根目录。 这种设计对于开发者来说更加友好不用在区分到底是转发还是重定向了。 六、WEB-INF目录资源 1. WEB-INF目录资源介绍 在平时学习过程中我们多会把JSP文件放入到webapp目录中或在webapp下新建一个目录把页面资源放入到目录中这种情况JSP都是可以通过浏览器直接访问的。 但是在一些特定的项目中从安全性等方面考虑不希望客户端通过浏览器直接访问对应的资源。 这时就可以把资源放入到WEB-INF目录中。因为在Java Web项目中规定WEB-INF中资源是不允许被客户端直接访问需要先访问控制器通过控制器的转发来访问这些资源。 在浏览器地址栏访问suiyi.jsp是无法访问到的。 需要提供一个控制单元方法转发到JSP页面中。 2. 具体示例 3. 结果分析 如果项目中所有的JSP、CSS、JavaScript、图片都放入到WEB-INF中那所有的资源都必须先执行控制器。这样对于刚学习这种写法的人可能觉得实现起来更加复杂了。但是从项目角度上却是更加安全了也可以在控制器方法中加入自己想要加入的逻辑。 七、视图解析器 1. 视图解析器和视图 Spring MVC的控制单元 支持 ModelAndView、String 等多种类型的返回值但无论控单元的返回值是哪种类型Spring MVC 内部最终都会将它们封装成一个 ModelAndView 对象它由 model模型数据和 view逻辑视图名两部分组成所以 Spring MVC 需要借助 ViewResolver视图解析器将 逻辑视图名解析为真正的 View 视图对象然后才能响应给客户端展示。 Spring MVC 的核心理念是将 视图与 数据模型进行解耦视图技术随场景选择Thymeleaf、JSP、FreeMarker、Excel 等等。 Spring MVC 定义了ViewResolver和View接口 ViewResolver 视图解析器 视图解析器用来解析逻辑视图将其解析成真正的视图对象。 SpringMVC 提供了一个视图解析器的接口 ViewResolver所有具体的视图解析器必须实现该接口。 ​ AbstractCachingViewResolver抽象类这种视图解析器会把它曾经解析过的视图保存起来然后每次要解析视图的时候先从缓存里面找如果找到了对应的视图就直接返回如果没有就创建一个新的视图对象然后把它放到一个用于缓存的map中接着再把新建的视图返回。使用这种视图缓存的方式可以把解析视图的性能问题降到最低。 ​​ UrlBasedViewResolver它是对ViewResolver的一种简单实现而且继承了AbstractCachingViewResolver主要就是提供的一种拼接URL的方式来解析视图它可以让我们通过prefix属性指定一个指定的前缀通过suffix属性指定一个指定的后缀然后把返回的逻辑视图名称加上指定的前缀和后缀就是指定的视图URL了。如prefix/WEB-INF/suffix.jsp返回的视图名称viewNametest则UrlBasedViewResolver解析出来的视图URL就是/WEB-INF/test.jsp。默认的prefix和suffix都是空串。 ​​ InternalResourceViewResolver它是URLBasedViewResolver的子类所以URLBasedViewResolver支持的特性它都支持。在实际应用中InternalResourceViewResolver也是使用的最广泛的一个视图解析器。InternalResourceViewResolver解释为内部资源视图解析器。InternalResourceViewResolver会把返回的视图名称都解析为InternalResourceView对象InternalResourceView会把Controller处理器方法返回的模型数据都存放到对应的request属性中然后通过RequestDispatcher在服务器端把请求forword到目标URL ​​ ThymeleafViewResolverThymeleaf视图解析器映射成一个 Thymeleaf 模板文件。 ​​ FreeMarkerViewResolverUrlBasedViewResolver的子类。FreeMarkerViewResolver会把Controller处理方法返回的逻辑视图解析为FreeMarkerView。 未完待续
http://www.ho-use.cn/article/10823448.html

相关文章:

  • word超链接网站怎样做做衣服外单网站有哪些
  • 花都营销型网站网站绝对布局
  • 义乌网络公司排名襄樊seo快速排名
  • 百度是什么网站设计logo的手机软件免费
  • 校园服装网站建设预算东莞网页制作费用大概多少
  • cms建站程序哪个好酒店旅游团购网站建设
  • 广州专业网站设计公司网站注册搜索引擎的目的
  • p2p网站建设多少钱科技有限公司属于什么行业
  • 保定清苑住房和城乡建设局网站云服务器如何搭建
  • 重庆无障碍网站建设建筑工程造价信息网
  • 建设部网站上怎样查询企业业绩瓷砖网络推广培训
  • 第三方做网站泰安人才网最新招聘信息网
  • 株洲市荷塘区城乡建设局网站网站的程序和数据库怎么做
  • 北京做电子系统网站的公司网站怎么宣传
  • 外贸网站建设外wordpress主题换图片不显示
  • 门户网站包括哪些新版wordpress头像
  • 企业网站建设的背景页面设计要以什么为导向
  • 九江专业制作网站小程序旅游网站模块分类
  • 网站开发设计技术uo建设网站
  • 正能量网站建设wordpress wpsyntax
  • 做淘宝导航网站小朋友做安全教育的网站
  • 网站图片做cdn网站中的图片展示功能该设计什么
  • 做模版网站需要租服务器吗石家庄微信网站建设
  • 邹平做网站的公司有哪些vps主机上新增网站
  • 乐平网站设计网站开发贴吧
  • 深圳建站公司招聘如何用文档做网站
  • 无锡网站建设 首选无锡立威云商潍坊网站建设wfzhy
  • 微信公众号上做网站如何高效建设品牌网站?
  • php毕业设计二手网站怎么做wordpress和typecho
  • 做移动网站优化排名如何查询网站是哪家公司做的