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

后端学习 - SpringMVC

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

后端学习 - SpringMVC

文章目录

一 SpringMVC 简介

1 MVC2 SpringMVC3 创建第一个 SpringMVC 项目 二 @RequestMapping

1 注解类与方法的区别2 value 属性3 method 属性4 params 属性5 headers 属性6 SpringMVC 支持路径中的占位符 三 获取 Request 的一系列参数

1 通过控制器方法的形参2 控制器方法形参 映射 Request 参数 - @RequestParam3 控制器方法形参 映射 Request 请求头 - @RequestHeader4 控制器方法形参 映射 cookie数据 - @cookievalue5 通过 POJO 获取 Request 参数6 解决获取参数的乱码问题


一 SpringMVC 简介 1 MVC

Model 模型层:工程中的 JavaBean,包含实体 Bean(Customer、Student…) 和 业务处理 Bean(Service、DAO)View 视图层:指工程中的 html 或 jsp 等页面,与用户进行交互,展示数据Controller 控制层:指工程中的 servlet,作用是接收请求和响应浏览器MVC 的工作流程 View <—> Controller <—> Model :用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller 调用相应的 Model 层处理请求,处理完毕将结果返回到 Controller,Controller 再根据请求处理的结果找到相应的 View 视图,渲染数据后最终响应给浏览器 2 SpringMVC

是 Spring 的子项目主要作用是在 Spring 项目中进行表述层开发(是三层架构中的概念,三层架构:表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台 servlet) 3 创建第一个 SpringMVC 项目

目录结构如下

    配置 maven 依赖,这里遇到了一个奇怪的版本问题
    
        
        
            org.springframework
            spring-webmvc
            5.3.9
        

        
        
            ch.qos.logback
            logback-classic
            1.2.3
        

        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        

        
        
            org.thymeleaf
            thymeleaf-spring5
            3.0.11.RELEASE
        
    
    配置 web.xml 的 Servlet 及 mapping
    
    
        springMVC
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation  
            classpath:springMVC.xml  
        
        1  
    
    
        springMVC
        /
    
    在 resources 目录下,配置 SpringMVC 的 xml:开启组件扫描、加入 thymeleaf 的名称空间并配置视图解析器(Thymeleaf 是服务器端的模板引擎,在服务器端获取模板和数据,生成结果输出给浏览器呈现结果)



    
    

    
    
        
        
        
            
                
                    
                        
                        
                        
                        
                        
                        
                    
                
            
        
    

    定义 Controller 类,并用注解标注类和方法;在 templates 中定义 index.html, target.html
@Controller
public class HelloController {
    
    @RequestMapping("/")
    public String index(){
        return "index";
    }

    @RequestMapping("/target")
    public String toTarget(){
        return "target";
    }
}

总结:

浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求就会被前端控制器 DispatcherServlet 处理前端控制器会读取 SpringMVC 的核心配置文件,通过扫描组件找到控制器,将请求地址和控制器中@RequestMapping 注解的 value 属性值进行匹配(要求每个方法的 value 值唯一)若匹配成功,该注解所标识的控制器方法就是处理请求的方法,处理请求的方法需要返回一个字符串类型的视图名称该视图名称会被视图解析器解析,加上前缀和后缀组成视图的路径,通过 Thymeleaf 对视图进行渲染,最终转发到视图所对应页面


二 @RequestMapping

作用是关联 请求处理请求的控制器方法。SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。

1 注解类与方法的区别

@RequestMapping标识一个类:设置映射请求的请求路径的初始信息@RequestMapping标识一个方法:设置映射请求请求路径的具体信息

@Controller
@RequestMapping("/test")
public class RequestMappingController {
	//此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
	@RequestMapping("/testRequestMapping")
	public String testRequestMapping(){
		return "success";
	}
}
2 value 属性

通过请求的请求地址匹配请求映射是一个字符串类型的数组,和其中任意字符串匹配则选择该方法,满足其中一个即可@RequestMapping 必须设置的属性


 value1 
 value2 


@RequestMapping(
value = {"/testRequestMapping", "/test"}
)
public String testRequestMapping(){
	return "success";
}
3 method 属性

根据请求方法 GET / POST匹配请求映射默认任意请求方式均可匹配是RequestMethod 枚举类型的数组,表示该请求映射能够匹配多种请求方式的请求,满足其中一个即可如果 value 匹配而 method 不匹配,出现405错误 4 params 属性

根据请求携带的的参数匹配请求映射是一个字符串类型的数组,需要同时满足所有条件,可以通过四种表达式设置请求参数和请求映射的匹配关系:
“param”:要求请求映射所匹配的请求必须携带 param 请求参数
“!param”:要求请求映射所匹配的请求必须不能携带 param 请求参数
“param=value”:要求请求映射所匹配的请求必须携带 param 请求参数且 param=value
“param!=value”:要求请求映射所匹配的请求必须携带 param 请求参数但 param!=value

测试

@RequestMapping(
	value = {"/testRequestMapping", "/test"}
	,method = {RequestMethod.GET, RequestMethod.POST}
	,params = {"username","password!=123456"}
)
public String testRequestMapping(){
	return "success";
}
5 headers 属性

根据请求的请求头信息匹配请求映射类似 params 属性,是一个字符串类型的数组,需要同时满足所有条件,可以通过四种表达式设置请求参数和请求映射的匹配关系:
“header”:要求请求映射所匹配的请求必须携带 header 请求头信息
“!header”:要求请求映射所匹配的请求必须不能携带 header 请求头信息
“header=value”:要求请求映射所匹配的请求必须携带 header 请求头信息且 header=value
“header!=value”:要求请求映射所匹配的请求必须携带 header 请求头信息且 header!=value 6 SpringMVC 支持路径中的占位符

将请求携带的参数以请求路径的形式,向服务器传递参数如果 @RequestMapping 的 value 属性中有路径的占位符,则请求时必须有占位符对应的参数,否则出现404

访问goods,参数123

@Controller
public class MyController {
    @RequestMapping("/goods/{id}")
    public String goodsPage(@PathVariable("id") int param_id) {
        System.out.println(param_id);
        return "goods";
    }
}

三 获取 Request 的一系列参数 1 通过控制器方法的形参

将形参名和 Request 参数名对应即可(如果不同名,则需要使用 @RequestParam),如此只能获取 Request 参数,而不能获得请求头信息等如果有多个同名的参数,则将形参类型设置为字符串数组

测试

@RequestMapping("/testParam")
public String testParam(String username, String password){
	System.out.println("username:"+username+",password:"+password);
	return "success";
}
2 控制器方法形参 映射 Request 参数 - @RequestParam

value:Request 中的参数的 name 属性required:标明该参数是否必须,如果是必须且未设置 defaultValue,则必须由 Request 传入defaultValue:默认值

@Controller
public class MyController {
    @RequestMapping("/goods/diff")
    // request 传递参数为 name, passwd
    public String diff(
            @RequestParam(value = "name") String n,
            @RequestParam(value = "passwd", required = false) String pwd) {
        System.out.println(n + pwd);
        return "goods";
    }
}
3 控制器方法形参 映射 Request 请求头 - @RequestHeader

同样具有 value, required, defaultValue,用法相同 4 控制器方法形参 映射 cookie数据 - @cookievalue

同样具有 value, required, defaultValue,用法相同 5 通过 POJO 获取 Request 参数

将控制器方法形参设置为实体类类型,此时若浏览器传输的请求参数的参数名,和实体类中的属性名一致,那么请求参数就会为此属性赋值

用户名:
密码:
性别:
年龄:
邮箱:
@RequestMapping("/testpojo")
public String testPOJO(User user){  // 根据request参数创建对象,前提是属性名和请求参数名相同
	System.out.println(user);  
	return "success";
}
6 解决获取参数的乱码问题

GET 请求的乱码问题可以通过更改 Tomcat 的配置文件 server.xml 解决POST 请求的乱码问题必须在请求参数获取之前设置编码,要比 Servlet 启动更早服务器启动时,初始化顺序是 Listener -> Filter -> Servlet,可以使用 Filter 设置编码格式(不使用 Listener 是因为监听器只执行一次,负责初始化 / 销毁的动作,而 Filter 可以过滤所有符合路径请求),在 web.xml 中配置,并设置为首个 Filter


	CharacterEncodingFilter
	org.springframework.web.filter.CharacterEncodingFilter
	
		encoding
		UTF-8
	
	
		forceResponseEncoding
		true
	



	CharacterEncodingFilter
	/*

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

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

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