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)请求处理的流程图
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,即可得到结果。
参考博客:
[1]:http://www.mkking.com/java/spring-mvc-dispatcherservlet/
[2]:http://jinnianshilongnian.iteye.com/blog/1594806
- SpringMVC 的第一个程序——HelloWorld
- 第一个配置SpringMVC,HelloWorld程序
- 我的第一个ASP.NET程序——HelloWorld
- 编译你的第一个Sac程序——HelloWorld!
- 我的第一个Java程序——HelloWorld
- Mac下的第一个C++程序—HelloWorld
- [C#]第一个程序——HelloWorld
- 第一个Visual C++程序—HelloWorld
- 第一个JAVA程序—HelloWorld
- 第一个helloworld程序
- 第一个程序:HelloWorld
- 第一个程序HelloWorld
- 第一个程序:HelloWorld
- JAVA的第一个程序--HelloWorld
- 我的第一个android程序 HelloWorld
- AndEngine的第一个程序HelloWorld
- 我的第一个汇编语言程序:HelloWorld
- phpstorm的第一个程序:helloworld
- Node.js安装配置
- 实现微信订阅号强制关注
- Log4J日志配置详解
- Map设计和Reduce设计
- Scala面向对象学习
- SpringMVC 的第一个程序——HelloWorld
- Android Studio 后台执行的定时操作
- spring+quartz实现定时任务(每天零点删除指定文件夹中缓存文件)
- Linux 下编译安装OpenCV
- Hadoop:Java API实现
- ICE的异步方法调用
- Perforce安装
- 博客说明
- 搞笑版卷积讲解