Spring MVC入门以及实现Hello World实例

简介

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。它是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。Spring MVC 框架并不知道使用的视图,所以不会强迫开发者只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring MVC主要组件

DispatcherServlet:前端控制器(不需要程序员开发)
作用:接收请求,响应结果,相当于转发器,有了DispatcherServlet就减少了其它组件之间的耦合度;

HandlerMapping:处理器映射器(不需要程序员开发)
作用:根据请求的url来查找Handler;

HandlerAdaptor:处理器适配器
注意:在编写Handler的时候要按照HandlerAdaptor的要求规则去编写,这样适配器HandlerAdaptor才可以正确地去执行Handler;

Handler:处理器(需要程序员开发);

ViewResolver:视图解析器(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图View;

View:视图(需要程序员开发jsp)
作用:View是一个接口,它的实现类支持不同的视图类型(jsp、freemarker、pdf等)。

Spring MVC核心架构与流程

核心构架如图所示:
在这里插入图片描述
流程:
1,浏览器发送请求到前端控制器DispatcherServlet
2,前端控制器DispatcherServlet再把请求转送到处理器映射器HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)
3,从DispatcherServlet到HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器
4,HandlerAdapter到处理器Handler调用相应功能处理方法,并返回一个ModelAndView对象(包含模型数据、逻辑视图名)
5,前端控制器DispatcherServlet请求视图解析器ViewResolver进行视图解析
6, 视图解析器将把逻辑视图名解析为具体的View,Model部分是业务对象返回的模型数据,View部分为逻辑视图名
7,前端控制器进行视图渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构
8,前端控制器向用户响应结果
(在流程中前端控制器DispatcherServlet相当于一个中央控制器,接收请求,转发请求,起着重要的作用)

实例:利用登录完成Hello World

创建Maven项目

创建好maven项目后解决项目报错问题

引入pom.xml的依赖,改变web.xml的版本

依赖:

<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.hsl</groupId>
	<artifactId>s_mvc</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>s_mvc Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<!-- 使用 <properties>标签可控制所以spring的版本 在调用时使用${spring.version}即可调用, 以方便日后进行版本修改 -->
	<properties>
		<spring.version>4.3.0.RELEASE</spring.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>s_mvc</finalName>
		<!--插件-->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>

	</build>
</project>

web.xml版本:

<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">

</web-app>

创建登录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>
<form action="Login" method="post">
<div>
账号:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
<input type="submit" value="登录"/>
</div>
</form>

</body>
</html>

配置Spring-mvc.xml核心配置文件

(创建在WEB-INF下)

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<!-- 配置controller的扫描包,注意是自己创建的包 -->
	<context:component-scan base-package="com.hsl" />

	<!-- 配置处理器映射器 -->
	<bean
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />

	<!-- 配置处理器适配器 -->
	<bean
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />

	<!-- 配置注解驱动,相当于同时使用最新处理器映射器和处理器适配器,对json数据的响应提供支持 -->
	<mvc:annotation-driven />

	<!-- 配置视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

改变web.xml的配置

<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">

  <display-name>Archetype Created Web Application</display-name>
  <!--这是登录界面-->
  <welcome-file-list>
    <welcome-file>/login.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <init-param>
             <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring-mvc.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring-mvc.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

创建建立control类

package com.hsl.control;

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

@Controller
public class ManygeSystem {
	
	@RequestMapping("/Login") 
	public ModelAndView  hello(@RequestParam("username") String userName, 
			 @RequestParam("password") String passWord) {
		//System.out.println(userName);
		ModelAndView mv= new ModelAndView("index");//跳转到指定视图
		
		 mv.addObject("name", userName);
		return mv;
	}
}

特别注意:
一定别忘了写@Controller注解,否则会报如图所示的错
在这里插入图片描述

创建测试页面

<%@ 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>
     <h2>Hello World!欢迎${name}你的到来!</h2>
</body> 
</html>



测试结果

登录界面:
在这里插入图片描述
测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值