先看一个SpringMVC的HelloWorld
SpringMVC传统的控制器开发方式是实现Controller接口,Spring2.5开始,提供了注解类型的开发方式,比前者更好。本文分别介绍了2种方式。
基于Controller接口的方式
首先熟悉几个概念
DispatcherServlet:
SpringMVC提供了org.springframework.web.servlet.DispatcherServlet作为Servlet。通过一个额外的xml文件来控制。
Controller接口:
请求通过DispatcherServlet分发给对应的处理的Java类(SpringMVC中称为Handle)。该类应该实现org.springframework.web.servlet.mvc.Controller接口,该接口必须实现一个方法,签名如下
ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception
接下来演示基于Controller接口的例子
1.导入必要的jar文件。
2.配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>springmvc</servlet-name>
<!--加载DispatcherServlet-->
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!--contextConfigLocation是参数名称,它的值为SpringMVC配置文件的路径。
若不配置它,则Spring默认到/WEB-INF/文件夹下查找[servlet-name]-servlet.xml文件
SpringMVC根据该xml文件创建一个WebApplicationContext容器,
类似Spring的ApplicationContext容器,开发者可以使用Spring的各种功能-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3.配置SpringMVC的配置文件(/WEB-INF/springmvc-config.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="/hello" class="controller.HelloController"/>
</beans>
可见,与Spring的配置文件类似,它描述了一个bean,对应的类为controller文件夹下的HelloController类。
4.Controller类的实现(/controller/HelloController)
package controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller
{
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception
{
ModelAndView mv = new ModelAndView();
mv.addObject("message","HelloWorld");
mv.setViewName("/WEB-INF/content/welcome.jsp");
return mv;
}
}
5.View页面(/WEB-INF/content/welcome.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>welcome</title>
</head>
<!--body中使用了EL表达式-->
<body>
${requestScope.message}
</body>
</html>
部署Web应用后,在浏览器中输入URL来测试
http://localhost:8080/hello
显示出welcome页面,SpringMVC访问成功。
基于注解的控制器
只需要修改3、4两步的文件即可
springmvc-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--这里不再需要描述bean,而是扫描controller文件夹,查找其中所有基于注解的类-->
<context:component-scan base-package="controller"/>
</beans>
HelloController:
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
<!--使用@Controller注解,无需实现接口,可以同时处理多个请求-->
@Controller
public class HelloController
{
<!--通过@RequestMapping映射"/hello"-->
@RequestMapping(value = "/hello")
<!--hello是普通方法,不再继承自Controller接口-->
public ModelAndView hello()
{
ModelAndView mv = new ModelAndView();
mv.addObject("message","HelloWorld");
mv.setViewName("/WEB-INF/content/welcome.jsp");
return mv;
}
}
总结
SpringMVC开发流程
1.在web.xml文件中定义前端控制器DispatcherServlet来拦截用户请求。
2.若要用Post方式提交请求,则编写包含表单数据的jsp页面。
3.定义处理用户请求的类。
4.通过spring的xml配置文件:描述该类(基于Controller接口的情况)或者扫描指定包下所有的基于注解的类。
5.编写视图页面。
6.enjoy it. :)
与传统的servlet+Jsp模式相比,SpringMVC是在web.xml文件和控制类中间加入了DispatcherServlet和Spring配置文件,从而将Spring引入到服务器端的程序,接下来像Spring一样,运行时根据配置文件来生成容器、再自动通过反射机制实例化bean……
当然SpringMVC的作用远不仅如此,本文只是一个入门的引导。
(萌新一枚,难免有错误或疏漏,欢迎指正)