原创

Java SpringMVC 入门 Hello World 案例

SpringMVC 是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求响应模型,框架的目的就是帮助我们简化开发工作量,SpringMVC也可以帮助我们简化Web开发的工作量。

SpringMVC 流程介绍:

1. 当DispatcherServlet接到请求时,他先回查找适当的处理程序来处理请求。DispatcherServlet通过一个或者多个处理程序映射,将每个请求映射到处理程序中。处理程序映射配置在web应用程序的上下文中,是实现了HandlerMapping接口的Bean。它负责为请求返回一个适当的处理程序(也就是Controller)。处理程序映射通常根据请求的URL将请求映射到处理程序(Controller)。 

2. 一旦DispatcherServlet选择了适当的控制器,它就会调用这个控制器来处理请求。 

3. 控制器处理完请求后,会将模型和视图名(有时候是视图对象)返回给DispatcherServlet。模型包含了控制器要传递给视图进行显示的属性。如果返回的是视图名称,它会被解析成视图对象再进行呈现。绑定模型和视图的基本类是ModelAndView 

4. 当DispatcherServlet接收到模型和视图名称时,它会将逻辑视图名称解析成视图对象再进行呈现。DispatcherServlet从一个或者多个视图解析器中解析视图。视图解析器配置在Web应用程序上下文中,是实现了ViewResolver接口的Bean。它的任务是根据逻辑视图名称返回试图对象。 

5. 一旦DispatcherServlet将视图名称解析称为试图对象,它就会呈现视图对象,并传递控制器返回的模型。视图的任务是将模型属性展示给用户。 

简单构建一个 “Hello World” SpringMVC 项目,具体步骤如下:

1、依赖包

1)Spring框架Jar包

下载 spring-framework-3.1.1.RELEASE-with-docs.zip 压缩包,解压后将 spring-framework-3.1.1.RELEASE-with-docs.zip/dist/ 下的所有jar包拷贝到项目的 WEB-INF/lib 目录下;

2)Spring框架依赖包

commons-logging-1.1.3.jar,此Jar包 Apache commons logging日志;

jstl-1.2.jar和standard-1.1.2.jar,Jar包支持jstl标签库

注意:Eclipse中缺省servlet-api.jar包,由于servlet-apbi.jar以及jsp-api.jar这两个包包含在Apache Tomcat中,所以提示这两个包缺省而出现错误的情况下,执行Build Path-Configure Build path-Libraries-Add Library-server Runtime或者在项目 WEB-INF/lib 包中增加servlet-api.jar包即可

2、前端控制器配置

在项目 WEB-INF 目录下新增 web.xml 文件添加如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<servlet>  
    <servlet-name>spring</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
</servlet>  
<servlet-mapping>  
    <servlet-name>spring</servlet-name>  
    <url-pattern>/</url-pattern>  
</servlet-mapping>
</web-app>

参数含义:

load-on-startup:表示启动容器时初始化该Servlet

url-pattern:表示哪些请求交给 SpringMVC 处理, “/” 是用来定义默认 servlet映射的。也可以如“*.htm”表示拦截所有以htm为扩展名的请求地址

注意:配置Spring的配置文件,默认 DispatcherServlet 会加载 WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml 配置文件,本文是以 spring-servlet.xml为例

3、在 spring-servlet.xml 配置文件中,增加 HandlerMapping、HandlerAdapter、ViewResolver 相关信息,具体配置内容如下:

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

<!-- HandlerMapping -->  
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  
   
<!-- HandlerAdapter -->  
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>  

<!-- ViewResolver -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  
    <property name="prefix" value="/WEB-INF/jsp/"/>  
    <property name="suffix" value=".jsp"/>  
</bean>
</beans>

参数含义:

BeanNameUrlHandlerMapping:表示将请求的URL和Bean名字映射,如URL为 “***/hello”,则Spring配置文件必须有一个名字为“/hello”的Bean,“***”默认忽略;

SimpleControllerHandlerAdapter:表示所有实现org.springframework.web.servlet.mvc.Controller 接口的Bean可以作为 SpringMVC 中的处理器,如果需要其他类型的处理器可以通过实现HadlerAdapter来解决;

InternalResourceViewResolver:用于支持Servlet、JSP视图解析;

viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包;

prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为hello,则该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”;

4、页面控制器

1)HelloWorldController 类实现 Controller 接口,具体源码如下:

package com.yoodb.controller;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

/**
 * @author www.yoodb.com
 */
public class HelloWorldController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		ModelAndView mv = new ModelAndView();
		mv.addObject("message", "Hello World!");
		mv.setViewName("hello");
		return mv;
	}

}

参数含义:

org.springframework.web.servlet.mvc.Controller:页面控制器必须实现Controller接口;

public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能处理方法用于实现相应的功能处理,比如收集参数、验证参数、绑定参数到命令对象、将命令对象传入业务对象进行业务处理、最后返回ModelAndView对象;

ModelAndView:包含视图要实现的模型数据和逻辑视图名;“mv.addObject("message", "Hello World!");”表示添加模型数据,此处可以是任意POJO对象;“mv.setViewName("hello");”表示设置逻辑视图名为“hello”,视图解析器会将其解析为具体的视图,如前边的视图解析器InternalResourceVi。wResolver会将其解析为“WEB-INF/jsp/hello.jsp”;

2)将视图名“hello”添加到 spring-servlet.xml 配置文件,使其接受Spring IOC 容器管理,具体配置如下:

<!-- 页面控制器 -->  
<bean name="/hello" class="com.yoodb.controller.HelloWorldController"/>

参数含义:

name="/hello":第三步配置 BeanNameUrlHandlerMapping ,请求URL为 “***/hello”则将会交给该Bean进行处理 

5、视图层

在 /WEB-INF 目录下,新增 jsp 目录并创建 hello.jsp 文件,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Hello World</title>  
</head>  
<body>  
${message}  
</body>  
</html>

6、启动服务器运行测试

请求 http://localhost:8080/SpringDemo/hello 地址,页面输出“Hello World! ”就表明框架构建成功,“8080”是默认 tomcat端口,“SpringDemo”是项目名称。

~阅读全文-人机检测~

微信公众号“Java精选”(w_z90110),专注Java技术干货分享!让你从此路人变大神!回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。微信搜索小程序“Java精选面试题”,内涵3000+道Java面试题!

涵盖:互联网那些事、算法与数据结构、SpringMVC、Spring boot、Spring Cloud、ElasticSearch、Linux、Mysql、Oracle等

评论

分享:

支付宝

微信