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运行流程

dispatcherServlet

图源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

后续深入学习会更新

posted @ 2020-09-17 22:18  树樁  阅读(163)  评论(0)    收藏  举报