spring-mvc1

他是servlet的升级版
依赖是导入的
还是就是它主要是前端控制器,写在了
web.xml里面,并且需要把springmvc的配置文件弄到
dispatcherServlet里面来,还需要配置一个load-on-startup就是启动就实例化。
主要记住的地方:
org.springframework.web.servlet.DispatcherServlet

其实就是web.xml中加入了DispatcherServlet并且是把springmvc的配置文件也加入到servlet里面来。

SpringMVC 对方法的限定。
一般都是@requestMapping(method=RequestMethod.PUT)
但是,我们需要在web.xml里配好filter,才可以,他的作用是将post方法弄成PUT,DELETE,就是一种转换。

hiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter


hiddenHttpMethodFilter
/*

还有就是filter中配置post提交方法的乱码问题。
web.xml中还有一个就是可以对post的请求方式进行一个乱码的处理。

encFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 encFilter /*

springmvc的配置文件主要是开启注解扫描 component-scan
springmvc里配置的,还有一个就是视图解析器。
说白了,就是servlet响应一个给浏览器的结果,就是对响应的东西一个绝对路径。
还有就是springmvc里需要配置静态资源过滤的东西。
主要记住的地方:
org.springframework.web.servlet.view.InternalResourceViewResolve

其实springmvc的DispatcherServlet就是把所有的访问都拦截了。要做拦截处理,如果是静态文件,需要过滤。
配置一个视图解析器,一个静态资源过滤器。这里的过滤是spring的配置文件里弄的。

<mvc:resources mapping="/pic1/" location="/"/>
<mvc:resources mapping="/pic2/
" location="/WEB-INF/jpg/"/>
<mvc:resources mapping="/pic3/" location="classpath:/pic/"/>
<mvc:resources mapping="/pic4/
" location="file:D:/spring/"/>

静态资源文件可以指向文件,也可以指向目录,或者resources里面。都是可以的。

还有一个包扫描的东西。

springmvc中对参数的获取

关于格式的问题:
如果数据是date格式的,相当于是需要在接受的地方申明好,这个申明是需要和前端网页的地方要格式一致。
关于格式问题的两个方法,其实是各有千秋的,一个是针对性的,一个是普片性的。
例如如果接收的位置申明的是
@DateTimeFormat(pattern = "yyyy-MM-dd")
那么我们输入的时候也要按照这个格式来输入。
但是这个时候我们得到的时间格式,是这样的:Tue Nov 30 00:00:00 CST 2021
如果需要转换,那么还是要再转换一次。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String format = simpleDateFormat.format(birthdate);

这样子,他就可以按照我们想要的格式来输出了。

还有一种方式:
就是配置好转换的格式:
public class StringToDateConverter implements Converter<String, Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

@Override
public Date convert(String s) {
    Date date = null;
    try {
        date = dateFormat.parse(s);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

}

在springmvc.xml里配置好

<mvc:annotation-driven conversion-service="converter"></mvc:annotation-driven>

一般的我们在静态资源,例如HTML,jsp里面跳转servlet的话,都是不需要/的,而且这个跳转是redirect类型的。

如果静态资源文件中的参数的name和servlet中的名字不一致,可以使用
@RequestParam("name")String uname 可以把静态资源文件中的name这个属性的值,赋值给uname这个形参

还有一个restful风格,其实就是把url中的东西,可以是string,也可以是int类型的东西给取出来。
@RequestMapping("/testPathVariable/{id}/{username}")
public String testPathVariable(@PathVariable("id") Integer id, @PathVariable("username") String username){

关于springmvc的响应:
springmvc的响应可以有三种:string modelandview void,对象.
其实string,就是void的升级版本。
如果是void,那么必须是request.getRequestDispather("/WEB-INF/jsp/void.jsp").forward(request,response);
如果是string的话,那么就"/WEB-INF/jsp/void.jsp"

一般的情况下我们的return都是forward
但是如果你想弄成redirect的话,直接就写在前面就好了
return "redirect:/redirectPage.jsp";

如果是对象的话,那么需要绑定Jackson-databind这个依赖,并且加上@ResponseBody。

如果是void,那么会去寻找,视图解析器,加上访问的控制单元的名称一致的一个页面,如果访问不到的话,
就404了

还有一个就是forward关键字,这个关键字可以省略不写
return "/forwardPage.jsp";

redirect关键字,这个关键字不可以省略不写。
return "redirect:/redirectPage.jsp";

还有就是springmvc 的interceptor这个过滤,他匹配的pattern的方法的返回值不可以是responseBody。必须是string之类的。

springmvc的异常处理问题:
还有一个问题就是异常的问题。有两种方式。
方式一,只能是处理modelandview的,不可以处理json的:
CustomHandlerExceptionResolver implements HandlerExceptionResolver
方式二,比较的完善,可以处理json:

@ControllerAdvice
//@ResponseBody
//@RestControllerAdvice
public class ExceptionControllerAdvice {

@ExceptionHandler(CustomException.class)
//@ResponseBody
public ModelAndView customException(CustomException exception){
    String s = exception.getMessage();
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("message",s);
    modelAndView.setViewName("/WEB-INF/jsp/custom.jsp");
    return modelAndView;
}

@ExceptionHandler(value = {SensitiveWordException.class,UnknownException.class})
@ResponseBody
public BaseRespVo sensitiveException(){
    return BaseRespVo.fail("敏感词songge");
}

}
springmvc的国际化问题(个人理解,就是读取配置文件中的内容而已,根据前端的界面输入的值,来读取.properties中的值):
就是输入什么参数,读取什么参数而已。
步骤:1.容器中注入
ReloadableResourceBundleMessageSource
还有
CookieLocaleResolver
但是仅仅这样是不够的,还有就是根据不同的情况,需要不同的值,我们这里是注入了一个CookieLocalResolver,通过cookie的值来选择配置文件。

数据验证的功能:
导入依赖:

org.hibernate.validator
hibernate-validator
6.1.0.Final

在接受数据的类的属性上@Length()

springmvc整合spring mybatis需要注意的地方。
首先就是需要spring,springmvc的配置文件。
spring里主要是配置mybatis,还有就是事务,还有配置外部属性文件的导入。昨天的那个老师说的是,这个事务要配置到springmvc中去。父子容器。

今天测试springmvc,有一个小问题,就是如果我们已经使用了视图解析器,那么是如何在转发的时候,不是使用视图解析器的
就是直接跳转到servlet上面。
今天无意间把这个问题解决了。其实就是urlpattern=“/first” 和他的return “first” ;
都是同一个名字。所以才会不行的。

还有一个问题就是springmvc的项目,昨天一直是启动不了,今天才知道,是那个mapper的文件夹有问题。

springmvc遇到前端有问题的,直接clean 就好了,编译的问题件有问题。有的写的代码没有弄到target文件中去。

posted @ 2022-04-18 21:57  孙立人bc  阅读(33)  评论(0)    收藏  举报