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

行业门户网站的优化怎么做yps行业门户系统dede怎么换网站页面

行业门户网站的优化怎么做yps行业门户系统,dede怎么换网站页面,it彩票网站建设维护工程师,亚马逊品牌官网建设前言#xff1a; 欢迎阅读Spring MVC入门必读#xff01;在这篇文章中#xff0c;我们将探索这个令人兴奋的框架#xff0c;它为您提供了一种高效、灵活且易于维护的方式来构建Web应用程序。通过使用Spring MVC#xff0c;您将享受到以下好处#xff1a;简洁的代码、强大…前言 欢迎阅读Spring MVC入门必读在这篇文章中我们将探索这个令人兴奋的框架它为您提供了一种高效、灵活且易于维护的方式来构建Web应用程序。通过使用Spring MVC您将享受到以下好处简洁的代码、强大的功能和与Spring生态系统的无缝集成。在本指南中我们将深入探讨Spring MVC的关键步骤包括注解的使用、参数传递、返回值处理以及页面跳转。这些技术将帮助您更好地理解Spring MVC的核心概念并使您能够更轻松地应对实际开发中的挑战。1.常用注解 1.1.RequestMapping RequestMapping注解是一个用来处理请求地址映射的注解可用于映射一个请求或一个方法可以用在类或方法上。 标注在方法上 用于方法上表示在类的父路径下追加方法上注解中的地址将会访问到该方法 Controller public class ParamController {RequestMapping(/hello1)public String jslx(String bname, Integer bid) {log.info(参数类型参数 bname:{},bid:{}, bname, bid);return index;}此时请求映射所映射的请求的请求路径为 http://localhost:8080/springmvc01/hello1 其中的路径springmvc01表示项目名 标注在类和方法上 用于类上表示类中的所有响应请求的方法都是以该地址作为父路径。 注意当你在类上添加RequestMapping注解后如果要请求映射就意味着请求要先映射到标注类的位置然后再映射到该类的方法上 Controller RequestMapping(/param) public class ParamController {RequestMapping(/hello1)public String jslx(String bname, Integer bid) {log.info(参数类型参数 bname:{},bid:{}, bname, bid);return index;}此时请求映射所映射的请求的请求路径为 http://localhost:8080/springmvc01/param/hello1 其中的路径springmvc01表示项目名 参数列表 参数说明valueRequestMapping 的 value 属性必须设值RequestMapping 的 value 属性是通过当前请求的请求地址来匹配请求从源码中可以看到value属性是一个字符串类型的数组因此说明可以将多个请求映射到一个方法上只需要给 value 来指定一个包含多个路径的数组。methodRequestMapping的method属性是通过当前请求的请求方式来匹配请求 浏览器向服务器发送请求请求方式有很多GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS、TRACE。可以使用 method 属性来约束请求方式。headersRequestMapping的headers属性是通过当前请求的请求头信息来匹配请求RequestMapping的headers属性是一个字符串类型的数组可以通过下面四种表达是来设置匹配关系例如“header”要求请求映射的请求必须为包含 header的请求头信息“!header”要求请求映射的请求必须为不包含 header的请求头信息“headervalue”要求请求映射的请求必须为包含 header的请求头信息并且header的值必须为value“header!value”要求请求映射的请求必须为包含 header的请求头信息并且header的值必须不是valueparamsRequestMapping的params属性是通过当前请求的请求参数来匹配请求RequestMapping的params属性是一个字符串类型的数组可以通过下面四种表达是来设置匹配关系例如“param”要求请求映射的请求必须为包含 param的请求参数“!param”要求请求映射的请求是不能包含param的请求参数“paramvalue”要求请求映射的请求必须包含 param 的请求参数且 param 参数的值必须为 value“param!value” 要求请求映射的请求是必须包含 param 的请求参数其值不能为 value。 示例一RequestMapping的params属性 RequestMapping(value /test,params username) public String test(){return success; }注意我们设置了params属性就意味着该请求映射的请求必须包含username才能够请求成功。 示例二RequestMapping的headers属性 RequestMapping(value /test,headers Host localhost:8081) public String test(){return success; }注意如果当前请求不满足headers属性此时页面就会显示404错误即资源未找到。 扩展 GetMapping处理get方式请求的映射 PostMapping处理post方式请求的映射 PutMapping处理put方式请求的映射 DeleteMapping处理delete方式请求的映射 GetMapping就相当于RequestMapping(methodRequestMethod.GET),它会将get映射到特定的方法上。 1.2.RequestParam RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上 参数说明value请求中传入参数的名称如果不设置后台接口的value值则会默认为该变量名。required该参数是否为必传项。默认是true表示请求中一定要传入对应的参数否则会报404错误如果设置为false时当请求中没有此参数将会默认为null,而对于基本数据类型的变量则必须有值这时会抛出空指针异常。如果允许空值则接口中变量需要使用包装类来声明。defaultValue参数的默认值如果请求中没有同名的参数时该变量默认为此值。注意默认值可以使用SpEL表达式如#{systemProperties[‘java.vm.version’]} 示例 RequestMapping(/hello3)public String requestParam(RequestParam String bname,RequestParam(required false) Integer bid) {log.info(requestParam类型参数 bname:{},bid:{}, bname, bid);return index;}1.3.ModelAttribute ModelAttribute一个具有如下三个作用 绑定请求参数到命令对象放在功能处理方法的入参上时用于将多个请求参数绑定到一个命令对象从而简化绑定流程而且自动暴露为模型数据用于视图页面展示时使用 暴露表单引用对象为模型数据放在处理器的一般方法非功能处理方法上时是为表单准备要展示的表单引用对象如注册时需要选择的所在城市等而且在执行功能处理方法RequestMapping注解的方法之前自动添加到模型对象中用于视图页面展示时使用 暴露RequestMapping方法返回值为模型数据放在功能处理方法的返回值上时是暴露功能处理方法的返回值为模型数据用于视图页面展示时使用。 示例一绑定请求参数到命令对象 如用户登录我们需要捕获用户登录的请求参数用户名、密码并封装为用户对象此时我们可以使用ModelAttribute绑定多个请求参数到我们的命令对象。 public String test1(ModelAttribute(user) UserModel user) 它的作用是将该绑定的命令对象以“user”为名称添加到模型对象中供视图页面展示使用。我们此时可以在视图页面使用${user.username}来获取绑定的命令对象的属性。 示例二暴露表单引用对象为模型数据 ModelAttribute public void init(Model model){model.addAttribute(book,new Book()); } 如上代码会在执行功能处理方法之前执行并将其自动添加到模型对象中。 RequestMapping(/toBookList) public String toBookList(){System.out.println(toBookList);return book/bookList; }示例三暴露RequestMapping方法返回值为模型数据 ModelAttribute注解的返回值会覆盖RequestMapping注解方法中的ModelAttribute注解的同名命令对象。 public ModelAttribute(user2) UserModel test3(ModelAttribute(user2) UserModel user) 1.4.SessionAttributes 在默认情况下当ModelMap中的属性作用域是request级别时也就是说当本次请求结束后ModelMap中的属性将销毁。如果希望在多个请求中共享ModelMap中的属性必须将其属性转存到session中这样ModelMap的属性才会被跨请求访问 spring允许我们有选择地指定ModelMap中的哪些属性需要转存到session中以便下一个请求属对应的ModelMap的属性列表中还能访问到这些属性。 SpringMVC为我们提供这样一个注解来实现上面的场景SessionAttributes将ModelMap的属性值共享到session中。 注意SessionAttributes注解只能使用在类上用于在多个请求之间传递参数类似于Session的Attribute但不完全一样一般来说SessionAttributes设置的参数只用于暂时的传递存入sessionAttributeStore而不是长期的保存长期保存的数据还是要放到Session中。 有两种方式将ModelMap中的属性值共享到session中 使用注解的value属性可以通过属性名指定需要放到会话中的属性 Controller SessionAttributes(user) //将ModelMap中key为user的属性共享到session中 public class DemoController {RequestMapping(/hello) public String hello(ModelMap model) {//向ModelMap中添加key为user和user1的属性model.addAttribute(user, new User(520, U love me));model.addAttribute(user1, new User(I love U));return result;} }使用注解的types属性还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。 SessionAttributes(types {User.class}) Controller public class DemoController{RequestMapping(/hello)public String hello(MapString, Object map){map.put(user1, new User(520, U love me));return hello;} }1.5.RequestBody RequestBody主要用来接收前端传递给后端的json字符串中的数据的(即请求体中的数据的) GET方式无请求体所以使用RequestBody接收数据时前端不能使用GET方式提交数据而是用POST方式进行提交。在后端的同一个接收方法里RequestBody与RequestParam()可以同时使用RequestBody最多只能有一个而RequestParam()可以有多个。 简言之 一个请求只有一个RequestBody一个请求可以有多个RequestParam。 Content-type 1application/x-www-form-urlencodedRequestBody不是必须加的 2mutipart/form-dataRequestBody不能处理这种格式 3其他格式比如application/json,application/xml等必须使用RequestBody来处理 RequestMapping(/hello6)public String RequestBody2(RequestBody Map map) {log.info(RequestBody map:{},map);return index;}RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:RequestBody后面的类)时会根据json字符串中的key来匹配对应实体类的属性如果匹配一致且json中的该key对应的值符合(或可转换为)实体类的对应属性的类型要求时会调用实体类的setter方法将值赋给该属性。 1.6.RequestHeader 使用 RequestHeader 注解可以获取指定的请求头信息。如果想要获取所有的请求头信息,可以使用 MapString,String、MultiValueMapString,String、HttpHeaders 这三个 Map 中的任何一个封装所有请求头的 name 和 value。 参数列表 参数说明namename 和 value 互为别名,当只有一个参数时可以省略 value,直接(“xxx”) 就可以了valuename 和 value 互为别名,当只有一个参数时可以省略 value,直接(“xxx”) 就可以了required默认情况下,如果请求头中缺少了指定的 name那么将会报错。如果没有添加required false当请求头中没有这个zking请求头时就会报错。defaultValue如果请求头中缺少了指定的 name ,那么会报错,可以使用 defaultValue 这个属性指定默认值,就可以避免报错 如果请求头缺少指定 name ,该属性设置的值将会作为默认值,如果该属性不设置值,它有自己的默认值 DEFAULT_NONE 示例 GetMapping(/headParams) public Map userInfo(RequestHeader(value zking,defaultValue hello zking) String username,// 将请求头中 nameAccept-Encoding 赋值给形参 encodingRequestHeader(Accept-Encoding) String encoding,// 将请求头中 nameHost 赋值给形参 hostRequestHeader(Host) String host,// 将所有请求头的 name 和 value 封装到 Map 集合 headsMap 中RequestHeader MapString,String headsMap) {Map map new HashMapString, Object();map.put(username,username);map.put(Accept-Encoding,encoding);map.put(Host,host);map.put(headsMap,headsMap);return map; }由于请求头中不存在 namezking 这个信息,所以如果只用 valuezking 会抛出异常。 解决方案: 1、required 的默认值为 true ,也就是请求头中没有 namezking 会报错,将其值改为 false,即没有该头信息也不报错 RequestHeader(value zking,required false) String username2、不修改 requiredtrue 这个默认值,当头信息中不包含 namezking ,给它一个默认值 hello zking RequestHeader(value zking,defaultValue hello zking) String username1.7.PathVariable 该注解请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定。 即当使用RequestMapping URI template 样式映射时 即 someUrl/{paramId} 这时的paramId可通过 Pathvariable注解绑定它传过来的值到方法的参数上。 //PathVariable可以用来映射URL中的占位符到目标方法的参数中RequestMapping(/hello4/{bid})public String rjcc(PathVariable(bid)Integer bid) {log.info(PathVariable bid:{},bid);return index;}Rest 即 Representational State Transfer。资源表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便所以正得到越来越多网站的采用。 资源Resources网络上的一个实体或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务总之就是一个具体的存在。可以用一个URI统一资源定位符指向它每种资源对应一个特定的 URI 。要获取这个资源访问它的URI就可以因此 URI 即为每一个资源的独一无二的识别符。表现层Representation把资源具体呈现出来的形式叫做它的表现层Representation。比如文本可以用 txt 格式表现也可以用 HTML 格式、XML 格式、JSON 格式表现甚至可以采用二进制格式。状态转化State Transfer每发出一个请求就代表了客户端和服务器的一次交互过程。HTTP协议是一个无状态协议即所有的状态都保存在服务器端。因此如果客户端想要操作服务器必须通过某种手段让服务器端发生**“状态转化”**State Transfer。而这种转化是建立在表现层之上的所以就是 “表现层状态转化”。具体说就是 HTTP 协议里面四个表示操作方式的动词GET、POST、PUT、DELETE。它们分别对应四种基本操作GET 用来获取资源POST 用来新建资源PUT 用来更新资源DELETE 用来删除资源。 示例 - /order/1 HTTP GET 得到 id 1 的 order - /order/1 HTTP DELETE 删除 id 1 的 order - /order/1 HTTP PUT 更新 id 1 的 order - /order HTTP POST 新增 order1.8.CookieValue CookieValue注解主要是将请求的Cookie数据映射到功能处理方法的参数上。 参数列表 参数说明value绑定的参数名称String类型。required是否必须包含valueboolean类型默认为 true表示请求参数中必须包含对应的参数若不存在将抛出异常。defaultValue默认值String类型。当没有传参时将使用此值赋值。 示例 RequestMapping(/testCookieValue) public MapString, Object testCookieValue(CookieValue(JSESSIONID) String cookie) {response.put(cookie, cookie);return response; }2.参数传递 pom.xml 注导入注意嵌套关系 log4j2.version2.9.1/log4j2.version log4j2.disruptor.version3.2.0/log4j2.disruptor.version slf4j.version1.7.13/slf4j.version!--4.log日志相关依赖--!-- log4j2日志相关依赖 -- !-- log配置Log4j2 Slf4j -- !-- slf4j核心包-- dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion${slf4j.version}/version /dependency dependencygroupIdorg.slf4j/groupIdartifactIdjcl-over-slf4j/artifactIdversion${slf4j.version}/versionscoperuntime/scope /dependency!--核心log4j2jar包-- dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion${log4j2.version}/version /dependency dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion${log4j2.version}/version /dependency !--用于与slf4j保持桥接-- dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion${log4j2.version}/version /dependency !--web工程需要包含log4j-web非web工程不需要-- dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-web/artifactIdversion${log4j2.version}/versionscoperuntime/scope /dependency!--需要使用log4j2的AsyncLogger需要包含disruptor-- dependencygroupIdcom.lmax/groupIdartifactIddisruptor/artifactIdversion${log4j2.disruptor.version}/version /dependency 2.1.基础类型String Slf4j Controller RequestMapping(/param) public class ParamController {RequestMapping(/hello1)public String jslx(String bname, Integer bid) {log.info(参数类型参数 bname:{},bid:{}, bname, bid);return index;}运行结果 2.2.复杂类型 RequestMapping(/hello2)public String fzlx(Book book, HttpServletRequest request) {//servlet参数的获取方式log.info(复杂类型参数 bname:{},bid:{},request.getParameter(bname),request.getParameter (bid));//复杂参数获取方式log.info(复杂类型参数book:{},book.toString());return index;}运行结果 2.3.RequestParam RequestMapping(/hello3)public String requestParam(RequestParam String bname,RequestParam(required false) Integer bid) {log.info(requestParam类型参数 bname:{},bid:{}, bname, bid);return index;}运行结果 结论被RequestParam注解的参数required默认为true表示请求中一定要传入对应的参数否则会报404错误如果设置为false时当请求中没有此参数将会默认为null,而对于基本数据类型的变量则必须有值这时会抛出空指针异常。如果允许空值则接口中变量需要使用包装类来声明。 2.4.PathVariable RequestMapping(/hello4/{bid})public String rjcc(PathVariable(bid)Integer bid) {log.info(PathVariable bid:{},bid);return index;}运行结果 2.5.RequestBody 讲解RequestBody之前将大家推荐postman或者apipost/eolink等工具发送请求数据。 这些工具可以帮助您模拟发送请求和接收响应以便更好地理解RequestBody参数的含义和使用方法。 在用**RequestBody**我们需要导入依赖 jackson.version2.9.3/jackson.versiondependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion${jackson.version}/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion${jackson.version}/version/dependency// 能接受json数据前提导入了Jackson依赖没有导入Jackson依赖的话那进不了这个方法RequestMapping(/hello6)public String RequestBody2(RequestBody Map map) {log.info(RequestBody map:{},map);return index;}// 不能接受json数据RequestMapping(/hello5)public String RequestBody1(Map map) {log.info(RequestBody map:{},map);return index;}请使用postman或者apipost/eolink等工具发送请求数据。 2.6.RequestHeader javaRequestMapping(/hello7)public String RequestHeader(RequestHeader(jwt) String jwt) {log.info(RequestHeader jwt:{},jwt);return index;}3.返回值 为了方便模拟效果借助ResponseUtil工具类ResponseUtil类提供了一种方便的方式来将对象以文本或JSON格式写入HTTP响应流中以便在Web应用程序中向客户端返回数据。 ResponseUtil package com.Bing.util;import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter;public class ResponseUtil {public static void write(HttpServletResponse response,Object o)throws Exception{response.setContentType(text/html;charsetutf-8);PrintWriter outresponse.getWriter();out.println(o.toString());out.flush();out.close();}public static void writeJson(HttpServletResponse response,Object o)throws Exception{ObjectMapper om new ObjectMapper(); // om.writeValueAsString(o)代表了json串write(response, om.writeValueAsString(o));} } pom.xml依赖 dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.4/version !-- 请根据您的需求选择合适的版本 --/dependency3.1.void 处理器对请求处理后无需跳转到其它任何资源此时可以让处理器方法返回 void。 Controller编写 Controller RequestMapping(/rs) public class ReturnController {RequestMapping(/hello)public void hello(HttpServletResponse response) {MapString, Object map new HashMap();map.put(code, 200);map.put(msg, 成功添加);try {ResponseUtil.writeJson(response, map);} catch (Exception e) {e.printStackTrace();}}}运行结果 java RequestMapping(/queryStudents)public void queryStudents(HttpServletResponse response) throws IOException {//处理Ajax使用json做数据格式Student student new Student();student.setName(张三);student.setAge(18);try {ResponseUtil.writeJson(response,student);} catch (Exception e) {e.printStackTrace();}}Data class Student{private String name;private Integer age; }3.2.String 通过http://localhost:8080/springmvc01/toHello访问请求方法并经过视图解析器跳转指定页面。 RequestMapping(/toHello) public String toHello(){//逻辑视图名return hello; }返回类型为String默认被作为视图名指定逻辑视图名经过视图解析器解析为jsp物理路径/WEB-INF/page/success.jsp 3.3.StringModel 通过http://localhost:8080/springmvc01/toHello访问请求方法并经过视图解析器跳转指定页面最后完成视图模型数据渲染操作。 RequestMapping(/toHello1)public String toHello1(Model model,HttpServletRequest request){//填充模型数据model.addAttribute(name,张三);request.setAttribute(role,管理员);//逻辑视图名return hello;}3.4.ModelAndView 通过http://localhost:8080/springmvc01/toHello访问请求方法。 RequestMapping(/toHello2)public ModelAndView toHello2(){ModelAndView mv new ModelAndView();//填充模型数据mv.addObject(name,张三);mv.addObject(role,管理员);mv.setViewName(hello);//逻辑视图名return mv;}4.页面跳转 转发forward:path和重定向redirect:path这两种跳转方式将会绕开视图解析器的前缀和后缀还有就是如果是在同一controller中则不用使用/从根目录开始,而如果是在不同的controller则一定要从根目录开始。 path为请求处理方法名而非逻辑视图名。 转发地址栏不变 RequestMapping(/helloPage1)public String toHelloPage1(){System.out.println(helloPage1);return forward:toHello2;}它相当于“request.getRequestDispatcher(“url”).forward(request,response)”。使用转发既可以转发到jsp 也可以转发到其他的控制器方法。 重定向地址栏改变 RequestMapping(/helloPage2)public String toHelloPage2(){System.out.println(helloPage2);return redirect:toHello2;}它相当于“response.sendRedirect(url)”。需要注意的是如果重定向到jsp页面则jsp页面不能写在WEB-INF目录中否则无法找到。 跳其它的controller RequestMapping(/helloPage3)public String toHelloPage3(){System.out.println(helloPage3);return forward:/demo/hello;}RequestMapping(/helloPage4)public String toHelloPage4(){System.out.println(helloPage4);return redirect:/demo/hello;}
http://www.zqtcl.cn/news/842511/

相关文章:

  • 做外贸的几个网站响应式网站wordpress摄影
  • 专业建设网站技术wordpress 虚拟资源
  • 广告网站设计哪家快网站建设外包包含内容
  • 网页游戏网站模板张家口住房和城乡建设部网站
  • 冀州建设局网站公司制作网站多少钱
  • 建设个招聘网站黄页88和58那个推广好
  • 如何设计一个漂亮的网站电商设计素材
  • 沈阳建设银行网站首页果冻影视传媒有限公司
  • 建设部网站有建筑施工分包网站规划设计方案
  • 网站wap怎么做郑州做网站华久科技
  • 哪里网站开发好姜堰网站定制
  • 广东网站开发需要多少钱百度问答官网
  • 建设电影网站的关键wordpress简码怎么用
  • 做网站的linux程序代码北京公司减资流程
  • 四川省住房建设厅网站进不去wordpress 无限下拉菜单
  • 培训网站图片网络编程基础知识
  • 外销网站怎么做的上海住房与城乡建设部网站
  • 平台网站建设教程网站建设谈业务要知道什么
  • php网站开发试题济南网站排名公司
  • 没有官方网站怎么做seo优化营销推广平台都干什么的
  • 网盘搜索网站怎么做中国建设银行网站股份结构变化
  • 有ip怎么用自己的主机做网站惠州网站制作维护
  • 优质的网站制作在线编辑器
  • 盘锦做网站电话网络营销做私活网站
  • 有关网站建设的毕业设计外卖网站的建设与推广
  • cms 做网站用模板网站做h5宣传页多少钱
  • 坪山网站建设行业现状官方建网站有哪些步骤
  • 软件下载网站模版单页网站开发实例下载
  • 张家口网站建设vewanseo实战技术培训
  • 机加工网站室内设计联盟论坛