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

威客网站设计/对网站进行seo优化

威客网站设计,对网站进行seo优化,做解析视频网站怎么赚钱,一加网站开发SpringMVC 类型转换器 在Web开发中,尤其是使用Spring MVC时,用户通过表单或API传递的请求参数通常是字符串类型,但后端模型可能需要其他类型(如Date、Integer、LocalDate等)。此时,类转换器可以将字符串转…

SpringMVC

类型转换器

在Web开发中,尤其是使用Spring MVC时,用户通过表单或API传递的请求参数通常是字符串类型,但后端模型可能需要其他类型(如DateIntegerLocalDate等)。此时,类转换器可以将字符串转换为目标类型。

内置类型转换器

Stirng——>Boolean类型转换的转换器
StringTobooleanConverter转换器源码

image-20250318135121118


自定义类型转换器

日期转换器
前端表单提交date类型是2021-05-12这种横杠分隔

image-20250318135151990

内置转换器只能转换2021/05/12这种斜杠风格的

如果我们传递了2021-05-12这种情况下我们就可以选择自定义类型转换

可以将横杠分隔字符串,或者/风格的字符串都转换成LocalDate的转换器

image-20250318142728021

import org.springframework.core.convert.converter.Converter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;public class StringToDateConverter implements Converter<String, LocalDate> {@Overridepublic LocalDate convert(String source) {if (source == null || source.isEmpty()) {return null;}try {// 尝试解析 yyyy-MM-dd 格式DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");//定义一种规则用来解析yyyy-MM-dd这种格式的字符串LocalDate localDate = LocalDate.parse(source, formatter);//传递这个字符串和规则,返回一个LocalDate类型的时间类对象return localDate;} catch (DateTimeParseException e) {// 如果失败,尝试解析 yyyy/MM/dd 格式DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");LocalDate localDate = LocalDate.parse(source, formatter);return localDate;}}
}

需要配置spring-mvc.xml

image-20250318135407963

测试网络接口(需要有@RequestParam注解)

    @RequestMapping("/date")public String Date(@RequestParam("birthday") LocalDate birthday){System.out.println("Date");System.out.println(birthday);return "forward:/success.jsp";}

这样我们就可以成功接受并转换两种风格的日期字符串了

image-20250318143020482

java控制台打印的依旧是-横杠风格的

image-20250318143103308


注解转换

当我们不需要转换两种风格的时候,只需要转换一种-横杠风格的时候,就不需要自定义类型转换器以及xml
可以直接使用**@DateTimeFormat**注解,传递自定义类型的直接转换为日期

弊端:只能转换-横杠风格的日期字符串了,遇到/斜杠风格的日期字符串会404

image-20250318143550485


数据放到响应体中转化成json

@ResponseBody

1.添加依赖

    <!-- jackson,帮助进行json转换--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency>

2.配置注解驱动

<!--    定义注解驱动--><mvc:annotation-driven>
<!--     消息转换器--><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="utf-8"/></bean></mvc:message-converters></mvc:annotation-driven>

image-20250318144341254
定义网络接口

image-20250318144417173

结果

image-20250318144435408


查询所有用户

image-20250318144502787

简化

image-20250318144512955


页面跳转

转发和重定向

return 字符串跳转路径

image-20250318144629228

内部是请求转发


请求转发是服务器内部的
最终浏览器地址是永远是第一次请求的地址

重定向是浏览器控制的,是发送了多次请求到最终地址
最终浏览器地址是最后一次请求的地址

取数据用转发,其他全是重定向

forward: 请求转发(默认)

image-20250318144801877

redirect:重定向

image-20250318144807643


视图解析器

WEB-INF里面的文件是受保护的
jsp一般放到里面

image-20250318145254153

根据 Servlet 规范,服务器会阻止对WEB - INF目录下资源的直接 HTTP 访问请求。
当客户端发送请求试图访问WEB - INF中的文件时,服务器会返回一个404错误(即使文件实际上存在),而不是将文件内容返回给客户端。

这时候就需要用到视图解析器去访问里面的文件,属于请求转发

image-20250318144958669

本质就是让跳转路径简单
可以设置跳转路径的前缀和后缀,进行拼接

注入bean视图解析器对象

    <!--配置视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver"><!--要求拼接的前缀--><property name="prefix" value="/WEB-INF/page/"></property><!--要拼接的后缀--><property name="suffix" value=".jsp"></property></bean>

image-20250318145102989

实际上访问的是/WEB-INF/page/test.jsp


当我们不需要添加前后缀的时候,只需要用forward或者redirect进行标识,这样就不会进行前后缀拼接了

image-20250318145413305


获取原生对象(了解)

我们之前在web阶段我们经常要使用到request对象,response,session对象等。我们也可以通过SpringMVC获取到这些对象。(不过在MVC中我们很少获取这些对象,因为有更简便的方式,避免了我们使用这些原生对象相对繁琐的API。)

我们只需要在方法上添加对应类型的参数即可,但是注意数据类型不要写错了,SpringMVC会把我们需要的对象传给我们的形参。

@Controller
public class RequestResponseController {@RequestMapping("/getReqAndRes")public String getReqAndRes(HttpServletRequest request, HttpServletResponse response, HttpSession session){System.out.println();return "test";}
}

获取请求头

在方法中定义一个参数,参数前加上**@RequestHeader**注解,知道要获取的请求头名即可获取对应请求头的值。

想要获取 device-type 这个请求头则可以按照如下方式定义方法。

@Controller
public class RequestResponseController {@RequestMapping("/getHeader")public String getHeader(@RequestHeader(value = "device-type") String deviceType){System.out.println(deviceType);return "test";}
}

获取Cookie

在方法中定义一个参数,参数前加上**@CookieValue** 注解,知道要获取的cookie名即可获取对应cookie的值。

想要获取 JSESSIONID 的cookie值。则可以按照如下方式定义方法。

@Controller
public class RequestResponseController {@RequestMapping("/getCookie")public String getCookie(@CookieValue("JSESSIONID") String sessionId){System.out.println(sessionId);return "test";}
}

JSP开发模式(了解)

如果我们使用JSP进行开发,那我们就需要在域中存数据,然后跳转到对应的JSP页面中,在JSP页面中获取域中的数据然后进行相关处理。

使用如果是类似JSP的开发模式就会涉及到往域中存数据携带数据跳转页面的操作。

所以我们来看下如果用SpringMVC进行相关操作。


往Requet域存数据并跳转

Model

我们可以使用Model来往域中存数据。然后使用之前的方式实现页面跳转。

要求访问 /testRequestScope 这个路径时能往Request域中存name和title数据,然后跳转到 /WEB-INF/page/testScope.jsp 这个页面。在Jsp中获取域中的数据。

@Controller
public class JspController {@RequestMapping("/testRquestScope")public String testRquestScope(Model model){//往请求域存数据model.addAttribute("name","三更");model.addAttribute("title","不知名Java教程UP主");return "testScope";}
}

ModelAndView

我们可以使用ModelAndView来往域中存数据和页面跳转。

要求访问 /testRequestScope2 这个路径时能往域中存name和title数据,然后跳转到 /WEB-INF/page/testScope.jsp 这个页面。在Jsp中获取域中的数据。

@Controller
public class JspController {@RequestMapping("/testRquestScope2")public ModelAndView testRquestScope2(ModelAndView modelAndView){//往域中添加数据modelAndView.addObject("name","三更");modelAndView.addObject("title","不知名Java教程UP主");//页面跳转modelAndView.setViewName("testScope");return modelAndView;}
}

注意要把modelAndView对象作为方法的返回值返回


从Request域中获取数据

我们可以使用**@RequestAttribute** 把他加在方法参数上,可以让SpringMVC帮我们从Request域中获取相关数据。

@Controller
public class JspController {@RequestMapping("/testGetAttribute")public String testGetAttribute(@RequestAttribute("org.springframework.web.servlet.HandlerMapping.bestMatchingPattern")String value,HttpServletRequest request){System.out.println(value);return "testScope";}
}

往Session域存数据并跳转

我们可以使用**@SessionAttributes**注解来进行标识,用里面的属性来标识哪些数据要存入Session域。

要求访问 /testSessionScope 这个路径时能往域中存nametitle数据,然后跳转到 /WEB-INF/page/testScope.jsp 这个页面。在jsp中获取Session域中的数据。

@Controller
@SessionAttributes({"name"})//表示name这个数据也要存储一份到session域中
public class JspController {@RequestMapping("/testSessionScope")public String testSessionScope(Model model){model.addAttribute("name","三更");model.addAttribute("title","不知名Java教程UP主");return "testScope";}
}

获取Session域中数据

我们可以使用**@SessionAttribute把他加在方法参数上,可以让SpringMVC帮我们从Session域**中获取相关数据。

@Controller
@SessionAttributes({"name"})
public class JspController {@RequestMapping("/testGetSessionAttr")public String testGetSessionAttr(@SessionAttribute("name") String name){System.out.println(name);return "testScope";}
}
http://www.whsansanxincailiao.cn/news/30718812.html

相关文章:

  • dw2020网页设计教程/广告优化师的工作内容
  • 网站建设中的主要功能/电商网站运营
  • 旅游做攻略用什么网站/全国疫情排行榜
  • 网站地图后缀/足球世界排名
  • 网页设计需要学什么东西/网站运营seo实训总结
  • 幼儿园主题活动设计方案和网络图/给网站做seo的价格
  • 辽宁天一建设有限责任公司网站/优化神马排名软件
  • 上海平台网站开发/兔子bt樱桃搜索磁力天堂
  • 建站语言有哪些/如何制作一个网页
  • 建立网站站点的目的/网站建站方式有哪些
  • 广西省河池建设局网站/松松软文
  • 免费公司网站/网络营销策划内容
  • 微网站和微信/跨境电商培训
  • 做学历提升的能在哪个网站上宣传/网站怎么做
  • 代做毕业设计的网站/软文营销的三个层面
  • 合肥市网站制作/长沙网站关键词排名
  • 策划推广方案/灯塔seo
  • 网站建设的流程范文1500字/焊工培训ppt课件
  • 哪个网站可以做测试类/云南网络推广
  • 怎么做网站才能不让警察定位到自己/社交网络的推广方法
  • 政府网站建设应该/华为手机网络营销策划方案
  • 广东省医院建设协会网站/高端网站设计定制
  • wordpress设置qq邮箱设置/seo查询百科
  • 博乐建设工程信息网站/产品网络营销推广方案
  • 佛山出格建站/seo平台
  • 链家在线网站是哪个公司做的/新公司如何做推广
  • 网站建设石家庄/培训管理平台
  • 杭州公司建设网站/千锋教育培训机构可靠吗
  • 编程 朋友 做网站/seo产品优化免费软件
  • 一个网站占空间有多少g/外国网站怎么进入