栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC学习总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC学习总结

特点:

Spring家族的原生项目,是Spring的一个子项目,与IOC等容器无缝对接基于原生的Servlet,通过前端控制器DispatcherServlet,对请求和响应进行统一处理表述层各细分领域需要解决的问题全方位覆盖,提供全面的解决方案代码清晰简洁,大幅度提升开发效率内部组件化程度高,可插拔式组件即插即用性能卓越,适合现代大型、超大型互联网项目需求 Maven工程SpringMVC依赖

//web工程打包方式
war


    org.springframework
    spring-webmvc
    x.x.x
web.xml配置文件

注入DispattcherServlet前端控制器

设置Spring配置文件路径设置服务启动级别路径映射

/所匹配的请求可以是/login或.html或.js或.css方式的请求路径

/不能匹配.jsp请求路径的请求

监听器过滤器

CharacterEncodingFilter   字符编码HiddenHttpMethodFilter    URL请求方式

表单提交请求方式必须POST请求参数必须为_method(隐式表单标签)



    
    
        springMVC
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:SpringMVC.xml
        
        1
    
    
        springMVC
        /
    

    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encodingFilter
        xxx
restful风格 

格式:/{占位符}控制器方法形参:@PathVariable("占位符")@PathVariable:将占位符所表示的数据赋值给控制器方法的形参

@RequestMapping("/test/{id}")
public String test(@PathVariable("id") int id){}
method属性

RequestMethod.GET/RequestMethod.POST/RequestMethod.PUT/RequestMethod.DELETE 派生注解:GetMapping/PostMapping

请求路径满足value属性值,不满足method属性,页面报错405

params属性

params:请求参数中必须携带params请求参数!params:请求参数中必须不携带params请求参数params=value:请求参数中必须携带params请求参数,且参数值等于valueparams!=value:请求参数中必须携带params请求参数,且参数值不等于value headers属性

headers:请求参数中必须携带headers请求头信息!headers:请求参数中必须不携带headers请求头信息headers=value:请求参数中必须携带headers请求头信息,且等于valueheaders!=value:请求参数中必须携带headers请求头信息,且不等于value

请求路径满足value属性值和method属性值,但是不满足params属性值或者headers属性值,页面报错400

SpringMVC请求参数获取

ServletAPI

request.getParameter()控制器方法形参@RequestParam 

请求参数和控制器方法的形参建立映射关系value:指定为形参赋值的请求参数的参数名required:设置是否必须传递此请求参数

true:必须传请求参数,若value未传值,defaultValue值未设置,页面报错400

false:不是必须传值,若未传值,形参值为nulldefaultValue:无论required值是true或false,value属性值为空或者未传输时,使用默认值为形参赋值@RequestHeader 

请求头信息和控制器方法的形参建立映射关系valuerequireddefaultValue@cookievalue

cookie数据和控制器方法的形参建立映射关系valuerequireddefaultValue控制器方法实体类形参(form表单)

请求参数的参数名和实体类的属性名一致,请求参数自动为此属性赋值 数据处理及跳转(数据回显) ModelAndView

@RequestMapping("/test")
public ModelAndView test(){
    ModelAndView mav = new ModelAndView();
    mav.addObject("msg","hello world");
    mav.serViewName("test");
    return mav;
}
Model
@RequestMapping("/test")
public String test(String name,Model model){
    model.addAttribute("name",name);
    return "sucees";
}
Map
@RequestMapping("/test")
public String test(Map map){
    map.put("name","name");
    return "sucees";
}
ModelMap
@RequestMapping("/test")
public String test(String name,ModelMap model){
    model.addAttribute("name",name);
    return "sucees";
}
Session(session域)
@RequestMapping("/test")
public String test(HttpSession session){
    session.setAttribute("session","Hello World");
    return "success";

}
Application(整个项目)
@RequestMapping("/test")
public String test(HttpSession session){
    ServletContext application = session.getServletContext();
    application.setAttribute("session","hello world");
    return "success";

}
页面跳转方式

转发:forward

@RequestMapping("/test")
public String test(){
    return "forward:/success";
}

重定向:redirect

@RequestMapping("/test")
public String test(){
    return "redirect:/success";
}
HttpMessageConverter报文信息转换器

将请求的报文转换为java对象,或者将java对象转换为响应报文

@RequestBody

Post请求获取请求体控制器方法形参前添加@RequestBody

@RequestMapping("/test")
public String test(@RequestBody String req){
    System.out.println(req);
    return "success";
}
RequestEntity

封装请求报文的一种类型在控制器方法的形参设置该类型形参 RequestEntitygetHeaders():获取请求头getBody():获取请求体

@RequestMapping("/test")
public String test(RequestEntity  req){
    System.out.println(req.getHeaders()+req.getBody());
    return "success";
}
@ResponseBody

控制器方法添加@ResponseBody该方法的返回值类型直接作为响应报文的响应体响应到浏览器

@RequestMapping("/test")
@ResponseBody
public String test(){
    //success字符串直接响应到浏览器
    return "success";
}
ResponseEntity

用于控制器方法的返回值类型常用于文件的上传下载功能 @RestController

复合注解,@Controller/@ResponseBody标识在请求控制器类上,为当前类添加@Controller注解,为类下所有方法添加@ResponseBody注解 Json数据交互

{}保存对象数据,[ ] 保存数组数据

Jackson

导jackson.jar包


    com.fasterxml.jackson.core
    jackson-databind
    x.x.x

添加mvc注解驱动

将java对象数据交由控制器方法的@ResponseBody注解处理,自动转换为json字符串

FastJson

导入FastJson包


    com.alibaba
    fastjson
    x.x.x

JSON  Java对象 转 JSON字符串   JSONArray  JSON字符串 转 Java对象JSONObject  Java对象 转 JSON对象

JSON数据中文乱码


    
        
            
        
        
            
                
                    
                
            
        
    
文件上传与下载 上传功能

导入上传依赖jar包


    commons-fileupload
    commons-fileupload
    x.x.x

xml配置文件解析器

 id必须为multipartResolver

上传控制器方法

@RequestMapping("/Up")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {
    //获取上传的文件的文件名
    String fileName = photo.getOriginalFilename();
    //处理文件重名问题
    String hzName = fileName.substring(fileName.lastIndexOf("."));
    fileName = UUID.randomUUID().toString() + hzName;
    //获取服务器中photo目录的路径
    ServletContext servletContext = session.getServletContext();
    String photoPath = servletContext.getRealPath("photo");
    File file = new File(photoPath);
    if(!file.exists()){
        file.mkdir();
    }
    String finalPath = photoPath + File.separator + fileName;
    //实现上传功能
    photo.transferTo(new File(finalPath));
    return "success";
}
下载功能实现
@RequestMapping("/Download")
public ResponseEntity testResponseEntity(HttpSession session) throws IOException {
    //获取ServletContext对象
    ServletContext servletContext = session.getServletContext();
    //获取服务器中文件的真实路径
    String realPath = servletContext.getRealPath("/static/img/1.jpg");
    //创建输入流
    InputStream is = new FileInputStream(realPath);
    //创建字节数组
    byte[] bytes = new byte[is.available()];
    //将流读到字节数组中
    is.read(bytes);
    //创建HttpHeaders对象设置响应头信息
    MultiValueMap headers = new HttpHeaders();
    //设置要下载方式以及下载文件的名字
    headers.add("Content-Disposition", "attachment;filename=1.jpg");
    //设置响应状态码
    HttpStatus statusCode = HttpStatus.OK;
    //创建ResponseEntity对象
    ResponseEntity responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
    //关闭输入流
    is.close();
    return responseEntity;
}
拦截器

创建一个类,继承HandlerInterceptor接口,重写接口的3个方法

preHandlepostHandleAfterComplationSpringMVC.xml配置拦截器(对所有请求进行拦截)

方法 一


    

方法二


    
     

方法三


    
         
配置类(SpringMVC.xml) 
@Configuration
//扫描组件
@ComponentScan("com.atguigu.mvc.controller")
//开启MVC注解驱动
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    //使用默认的servlet处理静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    //配置文件上传解析器
    @Bean
    public CommonsMultipartResolver multipartResolver(){
        return new CommonsMultipartResolver();
    }

    //配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        FirstInterceptor firstInterceptor = new FirstInterceptor();
        registry.addInterceptor(firstInterceptor).addPathPatterns("
    
    //配置异常映射
    

    //配置生成模板解析器
    @Bean
    public ITemplateResolver templateResolver() {
        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
        // ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过WebApplicationContext 的方法获得
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(
                webApplicationContext.getServletContext());
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;
    }

    //生成模板引擎并为模板引擎注入模板解析器
    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }

    //生成视图解析器并未解析器注入模板引擎
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }


}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777388.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号