原创

SpringMVC 的第一个程序——HelloWorld

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fangxiaowei9527/article/details/52020577

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;

@Controller
public 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

展开阅读全文

没有更多推荐了,返回首页

博客模板©2019 由CSDN提供 模版主题为:skin3-template by CSDN官方博客 设计