SpringMVC学习第一天

SpringMVC第一个项目

1.springmvc是基于表现层(WEB层)的
Java WEB常用的经典三层框架
表示层(web)—>业务层-(service)—>持久层(dao)

2.springmvc是一个典型的MVC式框架,mvc的核心思想是模型—视图—控制器
3.springmvc的第一个项目测试

1)首先启动服务器,加载一些配置文件web.xml文件配置
springmvc的核心控制器DispatcherServlet对象被创建
初始化参数contextConfigLocation的值为spring-mvc.xml的路径,这样就加载了配置文件,控制器类(注解扫描)被创建了。
2. 前端发送任意请求到后台dispatcherservlet指挥中心会去寻找控制器类中的方法的请求映射–基于注解@RequestMapping(“/hello”),并执行相应的方法,返回值是String类型,值应填写返回的结果页面的名称,后缀省略,根据xml中视图解析器的配置实现重定向。
3.配置文件中配置两处,第一开启扫描注解类及其子集;第二配置视图解析器InternalResourceViewResolver。配置两个属性,解析地址目录或文件夹prefix(/WEB-INF/…/)和后缀suffix(.jsp),响应结果默认从此目录下寻找并默认使用转发到该页面。
spring-mvc.xml的配置

springmvc三大组件:

1.视图解析器InternalResourceViewResolver:用于响应用户时返回的视图控制。
2.处理器映射器HandlerMapping:映射请求url找到对应的方法体返回一个执行链,
3.处理器适配器HandlerAdapter:处理所有请求的url让他们可以适配controller类,从而执行目标方法。
整个流程:

图源:在这里插入图片描述
注意:开启了mvc注解驱动,默认开启了处理器映射器和适配器。

处理映射器的注解 : @RequestMapping
1.用在类上多用户模块划分,一级路径,例如 @RequestMapping("/user")
2.属性
vlaue:用于请求路径的URL,作用和path相同。
method:用户指定请求方式,使用枚举 RequestMethod.GET
params:指定请求参数,可以指定值,以key=value的形式。
headers:指定请求头参数。
用户模块注解:

@Controller
@RequestMapping("/user")
public class UserController {
	@RequestMapping(value="/hello",params={"username=zhangsan","type=1"},method={RequestMethod.GET})
	public String helloWorld(Model model){
		model.addAttribute("message", "userspringmvc你好");
		return "helloworld";
		
	}

注意:return后面的字符串是经过视图解析器后转发的路径;
如果用重定向写法为:return “redirect:/add”;后面跟的是另一个方法或模块的请求映射URL。

请求参数的绑定:

1.mvc框架只需要在映射方法体中提供和前端请求属性相同名称的参数,则会自动绑定请求参数的值,获取到后台。(反射技术实现的绑定)
2.表单传多个参数时,可以自动封装到实体对象javabean实体。
当实体类中有引用对象时,语法为表单属性name=“引用对象.属性”,即可完成多个对象的封装;
3.引用集合对象,假设有如下集合属性List list, Map<String,User> map;
语法为: name=“lsit[0].uname” ; name=“lsit[0].age”
name=“map[‘one’].uname” ; name=“map[‘one’].age”
添加了list中的第0条数据和map中键为one的一个对象

解决中文提交乱码

传统的过滤器可以做到这一点,但是spring提供了自己的过滤器。只需要配置即可使用。
web.xml的配置如下

 <!--配置spring过滤器,解决中文乱码问题  -->
  <filter>
  	<filter-name>characterEncodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>characterEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

参数类型转换

默认情况下,springmvc会根据数据类型自动强制转换,替我们封装。有时转换出错,不能转换的情况,或是我们想要自定义转换形式时,就需要开启配置自定义类型转换器。
例如:配置字符串到指定时间格式的date形式的数据的转换器。
注意:数据转换类必须实现spring的核心core包的接口Converter<S(源类型),T(目标类型)>

<!--配置自定义类型转换器  -->
	<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
		<!--控制器名称,把自定义的转换器类路径作为属性值注入 -->
		<property name="converters">
			<set>
				<bean class="com.borened.utils.StringTodateConverter"></bean>
			</set>
		</property>
	</bean>
	<!--开启mvc注解驱动 -->
	<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

常用注解

@RequestMapping(前面讲过。)

@RequestParam(用于方法体的参数内)
属性 value:等同于name,表示后面的参数对应此处的名称
required:默认是true,必须要的。

		public String save(@RequestParam(name="username")String uname){
		.....
}

@RequestBody(获取请求体的内容)
得到是key=value&key=value的格式数据

		public String save(@RequestBody String body){
		.....
前端post请求体中的参数会全部封装到字符串body中。不适合get方式的请求,get提交数据不在请求体内。

@PathVaribale(用于绑定URL中的占位符)
例如:请求url为 /add/{id} -----------------restful风格的url,提高了缓存和响应速度。
{id} 就是URL占位符

前端请求url中必须用/参数的形式拼接。后台默认取到该参数作为id的值。mapping中的{id}和后面的value必须相同,形参可以不同。

@RequestMapping("/path/{id}")
	public String testpath(Model model,@PathVariable(value="id") String ssid){
		model.addAttribute("mes", "测试成功");
		System.out.println(id);
		return "helloworld";

@RequestHeader(用于获取请求头的信息)

@CookieValue(用于把指定名称的cookie的值传入控制器方法参数)
把客户端存储的cookie属性的key值,获取到后台。例如JSESSIONID就是一个cookie技术存的。
(@CookieValue(value=“JSESSIONID”) String cookie)
@ModelAttribute(用于修饰方法和参数)

出现在方法上,表示当前方法会在控制器的方法执行之前执行。
出现在参数上,获取指定的数据然后给参数赋值。
用法场景:当实体类的某一个属性时不能被修改,想使用数据库的默认值时,表单提交时为了避免提交null值覆盖原有的值,使用此注解可以在目标方法执行之前,把不能修改的属性先从数据库查询赋值给对象,再选择传递给控制器方法还是参数。

@SessionAttribute(用于多次执行控制器方法间的参数共享)

为了解决和Servlet的高耦合,spring提供了Model接口,底层帮我们把数据封装进了request域中,添加属性:model.addAttribute(key,value);
取值:modelmap.get(key);modelmap时model接口的实现类
如果要把属性存在session域中则需要在类名前添加注解
用法:@SessionAttribute(value={“msg”}) 大括号内存的是字符串数组;
如果要销毁session.
用法:在方法中添加SessionStatus对象,调用setComplete()方法;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值