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
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- C# MVC模式下商品抽奖功能实现
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET Mvc开发之查询数据
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- 为ASP.NET MVC及WebApi添加路由优先级
- ASP.NET MVC中图表控件的使用方法
- Asp.net mvc实时生成缩率图到硬盘