SpringMVC的学习
前言:复习springMVC时候看到了大学时候写的笔记,只是简单的搭建项目,面向答辩编程。现在重新复习springMVC,也让自己加深理解。
SpringMVC项目搭建
1、Maven项目创建
创建maven项目,勾选webapp,并导入如下包
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
2、创建控制器
在目录下新建Controller包,并新建一个TestController类实现Controller类,实现handleRequest方法。
public class myController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","helloworld");
mv.setViewName("hello");
return mv;
}
}
3、配置web.xml文件(重要)
DispatcherServlet是SpringMVC的调度中心,负责流程的控制。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 注册DispatcherServlet -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name> //加载bean的配置文件
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!-- 启动时初始化该Servlet(DispatcherServlet)-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4、配置springMVC.xml
springMVC可以和SpringIOC集成
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<!--处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!--处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!--试图视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
<!--注册测试控制器-->
<bean id="/hello" class="Controller.myController"></bean>
</beans>
5、测试
在/web-inf/jsp目录下新建hello.jsp
内容为
<body>
${msg}
</body>
默认端口8080,访问 http://localhost:8080/hello

切记idea运行项目配置好tomcat,不然会找不到请求
6、DispatcherServlet及springMVC运行流程

图源w3cschool
- DispatcherServlet是整个SpringMVC的核心,是前端控制器,所有用户发送的请求都会被它接受并拦截。
- HandlerMapping ,为映射处理器
其中有个方法
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
接收request请求,获取 HandlerExecutionChain 类型的handler对象,其主要作用是匹配控制器
- 将该handler对象传给HandlerAdapter(图中①和②直接应该还有HandlerAdapter),调用其对应的Handler也就是Controller,生成一个 ModelAndView 对象,返回给DispatcherServlet。
- DispatcherServlet将ModelAndView传给viewResolver(视图解析器)解析为View并返回给 DispatcherServlet 。
- DispatcherServlet根据收到的View,将该视图返回给User。
7、contextConfigLocation
我们在构建SSM项目时,会在web.xml中通过contextConfigLocation配置spring,而参数指定了我们需要加载的配置文件。
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener listener-class >
</listener>
给该Listener指定要加载的xml ,则
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
如果没有指定文件,则会自动去加载/web-inf/下的 applicationContext.xml
如果加载多个spring配置文件,可以用逗号隔开写入,如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml,
classpath*:app-datasource.xml,
classpath*:app-memcached.xml,
classpath*:app-ibatis.xml,
classpath*:app-rest.xml
</param-value>
</context-param>
多个配置文件里的交叉引用可以用ref的external或bean解决
例如:
applicationContext.xml
<bean id="userService" class="domain.user.service.impl.UserServiceImpl">
<property name="dbbean">
<ref bean="dbBean"/>
</property>
</bean>
dbBean在applicationContext-database.xml中
部分转自 https://blog.csdn.net/zhangliao613/article/details/6289114
后续深入学习会更新

浙公网安备 33010602011771号