SpringMVC 的第一个程序——HelloWorld

来源:互联网 发布:陈列师面试技巧知乎 编辑:程序博客网 时间:2024/06/09 22:11

SpringMVC 的HelloWorld

1.什么是SpringMVC?

  Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)模式,它能够帮助我们建立灵活和松耦合的Web程序。

2.展示图片

1)请求处理的流程图

SpringMVC的流程图

2)项目目录结构

项目目录结构

3.基本步骤

1)响应请求-DispatcherServlet

  DispatcherServlet是SpringMVC中最核心的部分,它是接收所有用户请求的前端控制器Servlet,Servlet运行于Web的应用服务器中,理论上可以响应任何类型的请求。当用户在浏览器发出请求的时候,最先进入SpringMVC中的DispatcherServlet。它的作用是通过处理器映射,把用户的请求发送到相应的控制器(Controller)中,再由控制器处理用户请求的SpringBean。

2)处理器映射-HandlerMapping

  当DispatcherServlet截获到请求的时候,不知道要把请求发往哪一个控制器,这个时候就要用到处理器映射了。通过查询处理器映射,DispatcherServlet就能由用户的请求知道该用哪一个控制器。

3)控制器-Controller

  控制器(Controller)即MVC中的C,控制器在后面的小黑屋完成数据的处理,然后返回一个ModelAndView对象给DispatcherServlet,Model将会在相应的View上显示出来。

4)视图解析器-view resolver

  视图解析器(view resolver)对上一步得到的ModelAndView对象进行解析,将其匹配到相应的视图(例如一个jsp),利用相应的视图显示数据。

5)视图显示-view

  视图(view)即MVC中的V,其作用就是把控制器返回的相应的model进行显示。到了这里,请求的任务基本就已经完成了。

4.第一个HelloWorld程序

1)新建一个JavaWeb项目

2)配置web.xml文件

  在web.xml配置Spring MVC的核心类DispatcherServlet(以及ContextLoaderListener)。

<servlet>    <servlet-name>spring-web</servlet-name>    <servlet-class>        org.springframework.web.servlet.DispatcherServlet    </servlet-class>    <init-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/spring-web-config.xml</param-value>    </init-param>    <load-on-startup>1</load-on-startup></servlet><servlet-mapping>    <servlet-name>spring-web</servlet-name>    <url-pattern>/</url-pattern></servlet-mapping>

  servlet-name即自定义你的servlet的名字;
  servlet-class即指定你的servlet用的是哪个类;
  ini-param中用于指定你的servlet的配置文件,在这里指定servlet的配置文件路径为/WEB-INF/spring-web-config.xml,不指定的话,则会默认指定为WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。
  load-on-startup设为1,表示启动容器时初始化该servlet。
  url-pattern设为/,表示响应默认servlet映射。

3)配置应用上下文config.xml,即上文提到的servlet的配置文件

在这里配置viewresolver和处理器映射HandlerMapping。

<bean name="/helloWorld" class="com.SpringMVC.web.controller.HelloWorldController" />     <!-- ViewResolver -->     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/"/>         <property name="suffix" value=".jsp"/>     </bean>

  处理器映射会将请求的URL和Bean名字映射,如URL为 “上下文/helloWorld”,则Spring配置文件必须有一个名字为“/helloWorld”的Bean,上下文默认忽略。当用户请求为/helloWorld的时候,DispatcherServlet就会把请求发送到相应的HelloWorldController控制器去。
  viewresolver中的class指定用的是spring框架中的viewresolver类,prefix和suffix属性表明查找视图页面的前缀和后缀,比如/WEB-INF/helloWorld.jsp。

  不过好像现在不流行用这种映射了,直接用注解好像更加方便快捷,不需要再这里配置map了,添加如下配置,在控制器类中添加注解,程序就会自动检测并且跳转到相应的控制器中。

    <!-- 自动扫描的包名 -->    <context:component-scan base-package="com.techbirds.controller"></context:component-scan>    <!-- 默认的注解映射的支持 -->    <mvc:annotation-driven />

4)编写Controller控制器类HelloWorldController.java

程序需要实现Controller接口,并实现里面的hadleRequest函数。

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class HelloWorldController implements Controller {    public ModelAndView handleRequest(HttpServletRequest arg0,            HttpServletResponse arg1) throws Exception {        return new ModelAndView("/helloWorld");    }}

  程序会根据ModerlAndView中的/helloWorld找到相应的helloWorld.jsp,然后返回给用户。


  如果你使用的是注解,则像下面这样写:

import java.util.Map;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.bind.annotation.RequestParam;@Controllerpublic class HelloWorldContorller {    //hello world例子    @RequestMapping(value="/helloWorld")    public String hello(){        System.out.println("spring mvc hello world!");        return "helloWorld";    }}

  使用注解之后,不需要实现Controller接口,只需要添加@RequestMapping(value=”/helloWorld”)注解,程序就会自动匹配了。

5)添加前端视图helloWorld.jsp

<% String path = request.getContextPath();%><% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">    <title>Hello World!</title>    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">       <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="This is my page">  </head>  <body>    -----------------Hello World! ----------------------<br>  </body></html>

6)请求

  这个时候要先把项目添加到Tomcat中,然后运行Tomcat(Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,可利用它响应HTML页面的访问请求,你的Web程序要运行在这上面来截获用户请求),在浏览器输入 localhost:8080/项目名/helloWorld,即可得到结果。
helloWorld程序运行结果


参考博客:
[1]:http://www.mkking.com/java/spring-mvc-dispatcherservlet/
[2]:http://jinnianshilongnian.iteye.com/blog/1594806

0 0
原创粉丝点击