您的位置:首页 > 编程语言 > Java开发

SpringMVC 的第一个程序——HelloWorld

2016-07-25 09:10 661 查看

SpringMVC 的HelloWorld

1.什么是SpringMVC?

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

2.展示图片

1)请求处理的流程图



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,即可得到结果。



参考博客:

[1]:http://www.mkking.com/java/spring-mvc-dispatcherservlet/

[2]:http://jinnianshilongnian.iteye.com/blog/1594806
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc spring mvc