Spring MVC入门:第一个Spring MVC程序

Spring MVC概述

      Spring MVC提供的一个实现了 Web MVC 设计模式的轻量级 Web 框架 它与Struts 框架一样,都属于 MVC 框架,但其使用和性能等方面比 Struts 更加优异
Spring MVC 具有如下特点:
(1)是Spring框架的一部分,可以方便地利用Spring所提供的其他功能
(2)灵活性强,易于与其他框架集成
(3)提供了一个前端控制器 DispatcherServlet ,使开发人员无须额外开发控制器对象
(4)可自动绑定用户输入,并能正确的转换数据类型
(5)内 置了常见的校验器,可以校验用户输入 如果校验不能通过,那么就会重定向到输入表单
(6)支持国际化 可以根据用户区域显示多国语言
(7);支持多种视图技术 它支持 JSP Velocity FreeMarker 等视图技术
(8)使用基 XML 的配置文件,在编辑后,不需要重新编译应用程序

Spring MVC工作流程

该图片出处:Java ee企业级应用开发教程

Spring MVC 程序的完整执行流程如下:
( 1 )用户通过浏览器向服务器发送请求,请求会被 Spring MVC 的前端控制器DispatcherServlet 所拦截
( 2 ) DispatcherServlet 拦截到请求后,会调用 HandlerMapping 处理器映射器
( 3 )处理器映射器根据请求 URL 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet
( 4 ) DispatcherServlet 会通过返回信息选择合适的 HandlerAdapter (处理器适配器)
( 5 ) HandlerAdapter 会调用并执行 Handler (处理器),这里的处理器指的就是程序中编写Controller 类,也被称之为后端控制器
( 6 ) Controller 执行完成后,会返回一个 ModelAndView 对象,该对象中会包含视图名或包含模型和视图名
( 7 ) HandlerAdapter ModelAndView 对象返回给 DispatcherServlet
( 8 ) DispatcherServlet 会根据 ModelAndView 对象选择一个合适的 ViewReslover (视图解析器)
( 9 ) ViewReslover 解析后,会向 DispatcherServlet 中返回具体的 View (视图)
( 10 ) DispatcherServlet View 进行渲染(即将模型数据填充至视图中)
( 11 )视图渲染结果会返回给客户端浏览器显示

第一个Spring MVC程序

项目结构图如下:
注意:
1、web.xml要放在WEB-INF目录下
2、springMVC-config.xml要放在src目录下
一般都这样命名,图中是为了区分不同的配置
在这里插入图片描述
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>spirngmvc_01</display-name>
  
  <!-- 配置前端过滤器 -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<!--servlet-class中的值是spring-webmvc包提供的类,即前端控制器,用于控制所有请求 -->
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	
  	<!-- 初始化时加载文件(springmvc-anno.xml) -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc-anno.xml</param-value>
  	</init-param>
  	<!--  表示容器在启动时立即加载 Servlet,数值越小,加载越快 -->
  	<load-on-startup>1</load-on-startup>
  	
  </servlet>
  
  <!-- 配置servlet映射  servlet-name取值与servlet的servlet-name一致-->
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

springmvc-anno.xml(注解)

<?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:context="http://www.springframework.org/schema/context"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
	   http://www.springframework.org/schema/context 
  http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<!-- 指定需要扫描的包 -->
	<context:component-scan base-package="com.controller" >
	 
	       <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  
	       
	</context:component-scan>
	<!-- 定义视图解析器 -->
	<bean id="viewResolver" class=
    "org.springframework.web.servlet.view.InternalResourceViewResolver">
	     <!-- 设置前缀 -->
	     <property name="prefix" value="/WEB-INF/jsp/" />
	     <!-- 设置后缀 -->
	     <property name="suffix" value=".jsp" />
	</bean>
</beans>  

springmvc-xml.xml(非注解)

<?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">
        <!-- 配置Handel,映射"/hello"请求 -->
        
        <bean name="/hello" class="com.controller.FirstController"/>
        <!-- 处理映射器将bean的name作为url进行查找,需要在配置Handel时指定name(即url) -->
        
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        
        <!-- SimpleControllerHandlerAdapter是一个处理器适配器,所有处理器适配器都要实现HandlerAdapter接口,-->
        <!--通过适配器实现对handlReqeust的调用 -->
        
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
        
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>

controller类

package com.controller;

import java.lang.annotation.Annotation;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//import org.springframework.web.servlet.mvc.Controller;


//1、基于注解
@Controller
@RequestMapping(value="/hello")
public class FirstController {
	
	@RequestMapping(value="/firstController")
	public String handleRequest(HttpServletRequest request,
			HttpServletResponse response, Model model) throws Exception {
		// 向模型对象中添加数据
		model.addAttribute("msg", "hello,这是我的第一个Spring MVC程序,基于annotation");
		// 返回视图页面
		return "first";
	}

}

//1、继承Controller类
//public class FirstController implements Controller{
//
//	@Override
//	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
//		
//		ModelAndView mav = new ModelAndView();
//		
//		mav.addObject("msg", "hello,这是我的第一个Spring MVC程序,基于xml");
//		mav.setViewName("/WEB-INF/jsp/first.jsp");
//		return mav;
//	}
//}

视图(jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
         "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>入门程序</title>
</head>
	<body>
	     ${msg}
	</body>
</html>

将项目发布到Tomcat中,并启动Tomcat服务器,然后再浏览器中输入http://localhost:8080/项目名/hello/firstController(基于注解)

使用注解或继承controller类
1、springMVC.xml文件是不一样的
2、web.xml文件中的classpath也要相应的改,
3、在浏览器中输入的url也要相应的改

猜你喜欢

转载自blog.csdn.net/m0_46267375/article/details/106670294
今日推荐