SpringMVC 中重要组件
1。DispatcherServlet: 前端控制器,接收所有请求(如果配置/不包
含 jsp)
2。 HandlerMapping: 解析请求格式的.判断希望要执行哪个具体
的方法.
3。HandlerAdapter: 负责调用具体的方法.
4。ViewResovler:视图解析器.解析结果,准备跳转到具体的物理视
图
SpringMVC环境搭建
1. maven导入 jar
2. 在 web.xml 中配置前端控制器 DispatcherServlet
如 果 不 配 置 <init-param> 会 在/WEB-INF/<servlet-name>-servlet.xml 配置
<servlet>
<servlet-name>jqk</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jqk</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3. 在 src 下新建 springmvc.xml
3.1 引入 xmlns:mvc 命名空间
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 扫描注解 -->
<context:component-scan base-package="com.bjsxt.controller"></context:component-scan>
<!-- 注解驱动 -->
<!-org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandler Mapping -->
<!-org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerA dapter --> <mvc:annotation-driven></mvc:annotation-driven>
<!-- 静态资源 -->
<mvc:resources location="/js/" mapping="/js/**">
</mvc:resources> <mvc:resources location="/css/" mapping="/css/**">
</mvc:resources> <mvc:resources location="/images/" mapping="/images/**">
</mvc:resources>
</beans>
4. 编写控制器类
@Controller
public class DemoController {
@RequestMapping("demo")
public String demo(){
System.out.println("执行 demo");
return "main.jsp";
}
@RequestMapping("demo2")
public String demo2(){
System.out.println("demo2");
return "main1.jsp";
}
}
字符编码过滤器
1.在 web.xml 中配置 Filter
<!-- 字符编码过滤器 -->
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
传参
1. 把内容写到方法(HandlerMethod)参数中,SpringMVC 只要有这个内
容,注入内容.
2. 基本数据类型参数
2.1 默认保证参数名称和请求中传递的参数名相同
@Controller
public class DemoController {
@RequestMapping("demo")
public String demo(String name,int age){
System.out.println("执行 demo"+" "+name+" "+age);
return "main.jsp";
}
}
视图解析器
1. SpringMVC 会提供默认视图解析器.
2. 自定义视图解析器
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalR esourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
3. 如果希望不执行自定义视图解析器,在方法返回值前面添加
forward:或 redirect:
SpringMVC 作用域传值的几种方式
1. 使用原生 Servlet
1.1 在 HanlderMethod 参数中添加作用域对象
2. 在 HanlderMethod 参数中添加作用域对象
2.1 把 map 中内容放在 request 作用域中
2.2spring 会对 map 集合通过 BindingAwareModelMap 进行实例
化
@RequestMapping("demo2")
public String demo2(Map<String,Object> map){
System.out.println(map.getClass());
map.put("map","map 的值");
return "/index.jsp";
}
3. 使用 SpringMVC 中 Model 接口
3.1 把内容最终放入到 request 作用域中.
@RequestMapping("demo3")
public String demo3(Model model){
model.addAttribute("model", "model 的值");
return "/index.jsp";
}
4.使用 SpringMVC 中 ModelAndView 类
@RequestMapping("demo4")
public ModelAndView demo4(){
//参数,跳转视图 ModelAndView mav = new ModelAndView("/index.jsp");
mav.addObject("mav", "mav 的值"); return mav;
}
注解
<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:
@Controller 声明Action组件
@Service 声明Service组件 @Service("myMovieLister")
@Repository 声明Dao组件
@Component 泛指组件, 当不好归类时.
@RequestMapping("/menu") 请求映射
@Resource 用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName")
@Autowired 用于注入,(srping提供的) 默认按类型装配
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype") 设定bean的作用域