• 【SpringMVC】环境搭建、namespace、控制器跳转、请求参数接收(时间处理)、乱码解决、作用域


    SpringMVC 框架

    1).环境搭建---第一个SpringMVC控制器、控制器生命周期

    注意:这里的Spring MVC配置大都在mvc.xml中配置
    (1)SpringMVC
    特点:
    ① SpringMVC天然集成Spring(SpringMVC本身就是spring技术的一部分)
    ② SpringMVC自带小Spring工厂,SpringMVC控制器可以使用spring工厂管理
    ③ Struts2性能低于SpringMVC
    ④ SpringMVC映射控制器的访问路径,可以使用注解的方式
    (2)环境搭建
    编码:
    1) 导入jar
    	spring相关的jar(webmvc.jar) 日志的jar
    2) 导入配置文件
    	mvc.xml   log4.properties;
    3) 初始化配置
    	web.xml初始化:
    	① 配置DispatcherServlet核心控制器[Servlet]---org.springframework.web.servlet.DispatcherServlet】
    	② 指定mvc.xml文件路径:	mvc.xml初始化
    	① 开启注解管理对象
    	② 开启springmnv注解开发mvc;(使用注解映射访问路径)
    web.xml初始化:
     mvc.xml初始化
     第一个Controller
    核心思想
     
    编码步骤:
    ① 编写一个控制器程序
    @Controller
    public class FirstController{
    @RequestMapping("/controller的方法路径")
    public String hello(){
    	return “跳转方式:/url-patton”;
    }	
    }
    ② 交给spring工厂管理:@Controller
    ③ 映射控制方法的访问路径:@RequsetMapping(“/名”)
    ④ 访问:http://ip:port/项目名/方法上的RequestMapping指定的路径.do
    控制器的生命周期:
    Struts2的action创建多个:每次请求都要创建新的
    SpringMVC的Controller,只需要一个即可。没有数据属性,本质是线程安全的(不能再属性中定义数据变量)
    创建时机:tomcat启动时,(初始化mvc的核心控制器,读取mvc配置文件,注解生效,扫描控制器),就创建了Controller,只创建一个
    可以使用Servlet的API:
    public class XxxController{
    public String xx(HttpServletRequest  req,HttpServletResponse  resp){
    			//使用req,和resp
    }
    }
    

    2).SpringMVC的namespace、控制器跳转、请求参数接收(时间处理)、乱码解决

    (1)namespace:@RequestMapping(“/namespace访问名字”) 放在控制器类上面进行注解
    作用: 映射访问路径
    语法: 
    	① 写在方法上----表明方法的访问路径
    	② 写在类上------表明控制器方法访问的namespace
    		a: 访问控制器方法访问路径: /类上的RequestMapping的路径/方法上的RequestMapping的路径
    		b: 将同一个业务模块下的多个控制器方法,放在一个控制器类
    			将同一个业务模块下的多个控制器方法访问路径,放在同一个namespace下
     (2)控制器跳转
    核心思路(编码):return "跳转方式:/目标路径的url-pattern";
    ① 请求转发:(服务器内部跳转)
    Controller--->JSP:return "forward:/目标jsp的url-pattern路径";
    Controller---->Controller:return "forward:/类上的RequestMapping路径/目标跳转方法上的Requestmapping路径.do";
    总结:return "forward:/目标路径的url-pattern";
    ② 重定向:(服务器外部跳转)
    方式:return "redirect:/目标路径的url-pattern";
    
    (3)请求参数的接收
    ① 基本数据类型 + String数据数据收集
    使用方式:直接在方法上声明变量接受即可
    优点:不用像struts2提供set和get、自动转化类型
     
    ② 接受数组类型的值:在方法上声明数组类型参数即可
     
    ③ 直接接受对象类型
    使用:在方法上声明对象类型参数、参数名必须接受控制器的方法形参的实体属性名一致
     
    ④ 接收对象(实体)属性时间格式的转换:
    @DateTimeFormat(pattern="yyyy-MM-dd")   	spring接收参数自动封装对象时转换,属性声明上使用
    (4)乱码问题
    ① get请求乱码解决办法:
    修改tomcat的conf/server.xml
    <Connector port="8888" protocol="HTTP/1.1"
           		connectionTimeout="20000"	redirectPort="8443" URIEncoding="UTF-8"/>
    ② Post请求乱码解决办法:
    request.setCharacterEncoding("UTF-8");
    	response.setCharacterEncoding("UTF-8");
    ③ Spring解决(提供过滤器,需要配置使用)
    post请求和响应编码设置核心思想
     
    Springweb提供该编码设置的Filter:org.springframework.web.filter.CharacterEncodingFilter
    

    3).SpringMVC作用域操作(存/取)、复杂请求参数接收(多个对象接收、日期)

    (1)SpringMVC作用域操作
    方式一:在方法上声明HttpServletRequest、HttpServletResponse对象
    方式二:Spring提供
    1) ModelMap
     	① Request作用域[存]:
    作用:代替request作用域,数据存入ModelMap,自动讲数据放入Request作用域
    获得ModelMap:方法上参数声明ModelMap mm
    存入方法:modelMap.addAttribute("name",值 对象  数据)
    JSP获取:${requestScope.name}
    ② Session作用域[存]:
    使用:在类上添加@SessionAttribute({"modelmap数据的name","modelmap数据的name"})
    作用:对应的moldelmap中的数据,自动拷贝到Session作用域中
    使用方式:ModelMap + @SessionAttributes({"modelmap中数据的name"})
     
    2) 其他作用操作相关的对象:Model
    作用:数据存入,相当于放入request作用域(功能与ModelMap一样)
    使用:同ModelMap
    3) Map (java.util.Map)
    作用:相当于request作用域
    获得:方法声明 Map map
    使用:map.put("name",值);
    4) ModelAndView
    作用:model作用+跳转路径的作用
    获得:参数声明ModelAndView
    向request作用域存入:mav.addObject("作用域数据的name",值);
    设置跳转路径:mav.setViewName("跳转方式:/目标资源url-pattern");
    使用:
    public ModelAndView xxx(ModelAndView mav) {
        mav.addObject("name",值);	 //1. 向requset作用域存入一个数据
        mav.setViewName("跳转方式:/目标资源url-pattern");	//2. 跳转到xxx.jsp
        return mav;
    }
    *获得作用域值:SpringMVC作用域高级[面试+获得作用域中的值,使用web相关对象
    ① 在方法上声明Servlet相关的对象:HttpServletRequest、HttpServletResponse、HttpSession
       	调用getAttribute(“name”)取值
     
    ② 允许直接从spring工厂中获得:HttpServletRequest、HttpServletResponse、HttpSession
    	@Controller
    	public class MyController {
       	@Autowired
       	private HttpServletRequest request;
       	@Autowired
       	private HttpServletSession session;
      	@Autowired
       	private HttpServletResponse response;
    }
        原理: 从spring工厂中,获得所谓的HttpSession/HttpServletRequest,其实是spring提供的代理对象、通过在代理对象方法内部,获得真正的session和request,调用对应的方法
    ③ 方式3:RequestContextHolder
       	RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
       	// RequestAttributes作用:可以获得httpServletReq HttpServletResp对象
       	ServletRequestAttributes attrs = (ServletRequestAttributes) attributes;
       	attrs.getRequest();//获得request对象
       	attrs.getResponse();//获得response对象
       	//RequestAttributes作用:可以操作request和session作用域
       	attrs.setAttribute("user1", "蒋文明", RequestAttributes.SCOPE_SESSION);		//将数据存入session作用域
       	attrs.setAttribute("user1", "蒋文明", RequestAttributes.SCOPE_REQUEST);	//将数据存入request作用域
       	attrs.getAttribute("name",RequestAttributes.SCOPE_SESSION);	//从session作用域中获得name对应的数据
    (2)SpringMVC复杂请求参数接收
    1) 集合对象的收集(一次性提交多个相同类型数据,或基本数据,或实体对象)
    SpringMVC复杂对象类型收集核心:基于控制器方法参数的属性名。封装DTO(Data Transfer Object数据传输对象)对象,由客户端传递给控制器
    命名: XxxDTO
     
    2) 日期类型的接受:
    	方式一:在要接受的属性上加@DateTimeFormat (pattern=”yyyy/MM/dd”)
    方式二:核心思路
     
    类型转化器的开发步骤:
    ① 自定义一个类实现,Converter接口(Spring提供)
     
    ② 将类型转起对象管理类型转化工厂内部(使用SpringMVC的工厂)
    ③ 在mvc:annotation-drive中开启使用自定义类型转起的使用
     
    
  • 相关阅读:
    vue自定义指令使用注意事项
    es6新增方法---实用
    webpack和gulp的区别
    OSI 5层协议,socket,从协议角度看网络通信
    网络通信流程
    数据相关的模块
    一些模块
    面向对象
    ATM作业
    XML模块增删改查基本操作
  • 原文地址:https://www.cnblogs.com/jwnming/p/13635239.html
Copyright © 2020-2023  润新知