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内创建存在状态的变量或者对象,
否则在并发访问时可能产生无法预期的结果。