ssm--springmvc1

springmvc_day01

1.springmvc中的重要组件
1.1 DispatcherServlet 前端控制器
	用户请求到达前端控制器,它就相当于mvc模式中的controller, dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求, dispatcherServlet 的存在降低了组件之间的耦合性。 

1.2 HandlerMapping 处理器映射器
	HandlerMapping 负责根据用户请求找到 Handler 即处理器
作用:把请求路径和处理器对应起来

1.3 HanderlAdapter 处理器适配器
	作用:支持多种类型的处理器,并且返回一个ModelAndView对象(包含模型数据、逻辑视图名)
最常用的处理器适配器:RequestMappingHandlerAdapter

1.4 Handler 处理器 
	DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理。

1.5 View Resolver 视图解析器
	将处理结果生成 View 视图

1.6 View 视图
2.web.xml的配置
<!--配置servlet-->
<servlet>
    <!--配置前端控制器-->
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--告知servlet,需要加载的初始化参数-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--配置创建servlet的时机-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

url-pattern的值:
"/"表示拦截所有请求,不包括.jsp
"/*"表示拦截所有请求,包括jsp。会导致如果浏览器直接访问.jsp页面,会被浏览器解析为找.jsp方法,404
"*.jsp"表示拦截所有扩展名为.jsp的请求
3.springmvc.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
<!--告知springmvc容器,需要扫描注解配置的包-->
    <context:component-scan base-package="com.baidu"></context:component-scan>
<!--配置内部资源视图解析器对象-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--使用set方法注入prefix,suffix属性-->
        <property name="prefix" value="/WEB-INF/pages"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--配置处理器映射器和处理器适配器,并且开启对springmvc的注解支持-->
    <mvc:annotation-driven></mvc:annotation-driven>
4.请求参数的绑定
参数列表的数据类型:普通数据类型,pojo类型,pojoVO类型,集合类型(list,map);
2.1 普通数据类型(17种)
	直接写在方法的参数列表即可自动封装,方法参数列表名称要与表单项标签中的name对应
<input type="text" name="username"/>
<input type="text" name="password"/>
public void getParameter(String username,String password){
	.....
}

2.2 POJO类型
页面传参要与POJO类里的属性名对应
<input type="text" name="username"/>
<input type="text" name="password"/>
public class User{
	private String username;
	private String password;
	setter/getter;
}
public void getParameter(User user){
	.....
}

2.3 POJO包装类
页面传参要与包装类的属性的属性名对应
<input type="text" name="user.password"/>
<input type="text" name="user.password"/>
public class UserVo{
	private User user;
	setter/getter;
}
public void getParameter(UserVo vo){
	.....
}

2.4 集合类型
<!--List集合-->
<input type="text" name="list[0].uname" />
<input type="text" name="list[1].uname" />
private List<User> user;
<!--Map集合-->
<input type="text" name="map['one'].uname" />
<input type="text" name="map['two'].uname" />
private Map<String,User> map;
 
 2.5获取原生的ServletAPI
直接在参数列表里写上HttpServletRequest,HttpServletResponse,HttpSession,可以获取原生的ServletAPI
5.请求路径细节:
@RequestMapping("/user")
public class HelloController{
	@RequestMapping("/hello")
	public void testHello(){ ... }
}
		一级目录  二级目录 	请求url
 访问路径:  /user   /hello 	  http://localhost:8080/springmvc/user/hello	 
		  /user    hello 	http://localhost:8080/springmvc/user/hello	 
		  user   /hello 	http://localhost:8080/springmvc/user/hello	 
		   user    hello 	http://localhost:8080/springmvc/user/hello	 	
结论:相对路径是指相对当前目录路径
6.自定义类型转换器
第一步:自定义一个类实现Converter<S,T>接口,重写convert方法
    public class StringToDateConverter implements Converter<String,Date>{ ... }
第二步:在springmvc.xml中配置自定义类型转换器对象并引用
    <!--配置自定义类型转换器对象-->
    <bean id="convertionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <!--使用set方法往set集合中注入转换器对象-->
        <property name="converters">
            <set>
      <bean id="stringToDateConverter" class="com.baidu.utils.StringToDateConverter"></bean>
            </set>
        </proerty>
    </bean>
    <!--引用自定义类型转换器对象-->
    <mvc:annotation-driven conversion-service="convertionServiceFactoryBean">
    </mvc:annotation-driven>
 
	spring默认的类型转换器,只能转换2018/8/8这样格式的日期,如果用户提交的是2018-8-8就会出现异常,所以需要自定义一个类型转换器,但是配置了解决2018-8-8就又会导致2018/8/8失效。
7.springmvc中的各种器
	自定义类型转换器:实现Converter<S,T接口>,配置ConversionServiceFactoryBean对象;在concerters属性set集合中注入自定义的转换器bean对象;引用自定义类型转换器对象
    文件解析器:配置文件解析器对象,id必须叫做multipartResolver
    自定义异常处理器:实现HandlerExceptionResolver接口;将自定义的异常类交给spring容器管理
    自定义拦截器:实现HandlerInterceptor接口,配置拦截器,在拦截器中配置自定义拦截器
8.controller接收数组
前端页面: location.href = "${pageContext.request.contextPath}/user/delete.do?
ids=1,2,3,4,5&age=1";
controller层: testDelete( String[] ids,String age){ ... }
注意:前端页面传递数组不要带上"[ ]";

猜你喜欢

转载自blog.csdn.net/qq_42514129/article/details/84816461