1、功能介绍

入门程序,功能十分简单。输入一些数据,传到后端,后端打印数据,在此将该页面返回回来,供重新输入。

多次提交后,打印结果:

2、项目结构

项目结构很简单,就是一个简单的控制器MyController,一个页面index.jsp和一些配置文件。applicationContext是对容器的配置,由于本程序简单,并没有用到太多东西,所以是空的。dispatcher-servlet是spring-mvc的一些配置。web.xml是本web应用的配置。

3、pom.xml依赖

本程序用到了spring mvc和spring和servlet,所以依赖如下:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.luo.my</groupId>
  <artifactId>springMVC</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>springMVC Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </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>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>5.0.8.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>5.0.8.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>5.0.8.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>5.0.8.RELEASE</version>
	</dependency>
	
  </dependencies>
  <build>
    <finalName>springMVC</finalName>
  </build>
</project>

4、web.xml

在context-param中指定了spring配置文件的位置。配置了dispatcher的映射,映射为/,表示本web程序中所有的url都映射到dispatcher这个servlet上,整个请求过程都是由他规定的。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>My first springMVC project</display-name>
  <!-- 配置Spring -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <!-- 配置ContextLoaderListener用以初始化Spring IoC容器 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 配置DispatcherServlet -->
  <servlet>
  	<servlet-name>dispatcher</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <!-- Servlet拦截配置 -->
  <servlet-mapping>
  	<servlet-name>dispatcher</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
  
</web-app>

5、applicationContext.xml

spring并不需要装载什么bean,因此为空。

<?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:aop="http://www.springframework.org/schema/aop" 
	xmlns:tx="http://www.springframework.org/schema/tx" 
	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/aop 
          http://www.springframework.org/schema/aop/spring-aop.xsd
          http://www.springframework.org/schema/tx 
          http://www.springframework.org/schema/tx/spring-tx.xsd
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd">
          
 </beans>

6、dispatcher-servlet.xml

启动了和spring mvc相关注解的功能,设置了扫描包的路径,和定义视图解析器。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 使用注解驱动 -->
    <mvc:annotation-driven/>
    
    <!-- 定义扫描装载的包 -->
    <context:component-scan base-package="com.luo.my"/>

	<!-- 定义视图解析器 -->
   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>

</beans>

7、MyController.java

使用@RequestMapping注解将commonParams映射到了“/”这个url上了,所以访问  localhost/springMVC/  时将会调用这个函数。代码中将视图名设置成了index,因此会使用/WEB-INF/jsp/index.jsp这个文件作为视图返回。同时打印请求信息到控制台中。

package com.luo.my.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class MyController {
	
	@RequestMapping("/")
	public ModelAndView commonParams(String roleName,String note) {
		ModelAndView mView=new ModelAndView();
		mView.setViewName("index");
		System.out.println("roleName:"+roleName);
		System.out.println("note:"+note);
		return mView;
	}
}

8、index.jsp

注意要通过page设置编码,否则在其他程序中很容易造成乱码,因为他默认会使用iso-8859-1编码来发送程序。表单发送给  ./  重新请求该文件。

<%@page contentType="text/html; charset=utf-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<body>
<form action="./">
	<label>角色名称</label>
	<input name="roleName" />
	<label>备注</label>
	<input name="note"/>
	<input type="submit" value="submit"/>
</form>
</body>
</html>

9、总结

springMVC程序中,主要要理解spring MVC处理请求的主要过程。当http请求到来时,由于配置了DispatcherServlet接收所有url,因此请求会被传到DispatcherServlet上,该servlet会根据handler mapping来找到url对应的控制器Controller,这个handler是通过注解@RequestMapping来配置的。Controller执行特定逻辑,生成模型(也就是数据)和找到合适视图,传送给DispatcherServlet。DispatcherServlet根据View Resolver找到视图对应的文件,比如视图名index对应/WEF-INF/jsp/index.jsp这个文件。View Resolver的配置是在dispatcher-servlet.xml中,里面定义了视图解析器。之后通过视图渲染模型到浏览器上。总的过程可以通过下面的一张过程图来秒速。

Spring DispatcherServlet

 

 

 

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐