【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中开启使用自定义类型转起的使用
 
原文地址:https://www.cnblogs.com/jwnming/p/13635239.html