Java——Spring MVC环境配置

1.Maven依赖spring-webmvc

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ikidana</groupId>
    <artifactId>firstspringmvc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <repositories>
        <repository>
            <!--创建私服的地址-->
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
    <dependencies>
        <!--引入这个包就会自动的引入spring其他依赖包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
    </dependencies>
</project>

 

2.web.xml配置DispatchServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <!--
            DispatcherServlet是SPring MVC最核心的对象
            DispatcherServlet用于拦截Http请求
            并根据请求的URL调用与之对应的Controller方法,来完成Http请求处理,本质就是解析器
        -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置spring核心配置文件的位置,告诉Spring IOC容器加载那个配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        
        <!--
            启动时加载
            在Web应用启动时自动创建Spring IOC容器
            并初始化DispathcherServlet
        -->
        <!--
            如果没有配置load-on-startup配置,
            会在系统第一次访问URL的时候创建IOC容器和初始化DispathcherServlet
            为了提高程序的响应速度,一般都会将其配置
        -->
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--/代表拦截所有请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

 

3.配置applicationContext的mvc标记

<?xml version="1.0" encoding="UTF-8"?>
<!--xmlns:mvc spring命名空间下的核心标签-->
<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" xmlns:mv="http://www.springframework.org/schema/mvc"
       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标签的作用:
        在Spring IOC初始化过程中,自动创建并管理com.ikidana.springmvc及子包中拥有下面注解的对象:
        @Repository:dao文件中,与数据直接交互的类
        @Service:业务逻辑类
        @Controller:描述Spring mvc的控制器类
        @Component:不知道是那种类的时候
    -->
    <context:component-scan base-package="com.ikidana.springmvc"></context:component-scan>

    <!--启用Spring MVC的注解开发模式-->
    <mvc:annotation-driven/>

    <!--将图片/JS/CSS等静态资源排除在外,可提高执行效率-->
    <mvc:default-servlet-handler/>
</beans>

 

4.开发Controller控制器

//由于在context:component-scan规定的目录下,同时又拥有Controller注解
//所以在IOC容器初始化的时候,会自动将TestController初始化并管理起来。
//由于存在@Controller注解,所以spring知道这是一个spring MVC的控制器。这个类的作用是处理HTTP请求,并返回响应。
@Controller
public class TestController {
    @GetMapping("/test")  //将当前的方法绑定某个get方式请求的url
    @ResponseBody  //直接向响应输出字符串数据,不进行任何页面跳转
    public String test(){
        return "Test";
    }
}

在运行之前,需要将Maven依赖添加到发布的目录:

 

 

 

 之后就可以通过浏览器进行访问了:

 

 

 

5.Spring MVC处理示意图

 

客户端浏览器向Tomcat服务器发送一个HTTP请求,
在这个HTTP请求中包含了servlet映射地址,以及要传递的参数。
Tomcat会解析每一个应用程序的web.xml文件,找到与之匹配的URL。
同时找到与之对应的servlet-name,根据servlet-name找到对应的servlet,对这个servlet进行实例化和初始化。
Tomcat会执行servlet的service()方法,执行其中的服务代码。
然后将结果响应给浏览器。浏览器收到代码之后进行解析。

servlet是什么时候进行实例化?
servlet并不是在tomcat应用程序启动的时候实例化的。
servlet默认情况下是第一次访问的时候实例化的,
也可以通过web.xml配置load-on-startup,使其在服务器启动的时候实例化。
servlet全局有且只有一个对象。

并发环境如何处理,基于单例多线程提供web服务。
多线程就需要注意线程安全,因为所有线程都共享了一个servlet实例。
所以在使用servlet的时候,不允许在servlet内创建存在状态的变量或者对象,
否则在并发访问时可能产生无法预期的结果。

 

posted @ 2020-03-18 23:31  明王不动心  阅读(370)  评论(0编辑  收藏  举报