SpringMVC学习笔记一文中已经详细讲述了SpringMVC的特性以及优点。本文就来讲述一下在Eclipse中使用SpringMVC进行简单开发,我们之前讲解SSH框架的时候,在struts2这个MVC框架中详细讲述过开发步骤,其实SpringMVC大致流程有相似之处,其具体开发方式也有分为基于注释的控制器和基于XML文件的控制器。本文讲述的是基于注释的控制器。在具体开发之前,首先创建一个web项目并命名,本文的项目取名为HelloSpringMVC。然后接着下面的具体步骤。
1.jar包的导入
首先,需要将开发需要的jar包导入,一般把spring的lib下的包外加jstl.jar和commons-logging包等即可,复制到web项目的WEB-INF目录下lib文件下。具体如下图:
2.配置web.xml文件
1.首先配置利用<servlet>中配置一个前端控制器,即对应的SpringMVC的入口Dispatcher。
2.并在<servlet>元素中利用<init-param...>元素配置SpringMVC文件的位置。
3.<servlet-mapping>中则配置相关映射,比如之前配置的前端控制器。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC-servlet.xml</param-value>
<!-- param-value中的是Spring的配置文件,这个是放在src目录下的配置文件,如果放在其他位置可以使用路径+文件名
例如在WEB-INF 文件夹下面springmvc.xml 那么就可以写为<param-value>/WEB-INF/springmvc.xml</param-value> -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
<!--过滤全部文件-->
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.开发处理器类
这里的处理器类就类似于Struts2中Action类,由于SpringMVC和Struts2的加载机制不同,因此这两者类的名称也不同。以下根据需求写的一个简单的处理器类。
package springmvc;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Hello
{
@RequestMapping("/hello")
public String hello(Model model)
{
model.addAttribute("msg","hello!Carson!welcome to this page.");
return "hello";
}
@RequestMapping("/reject")
public String reject()
{
System.out.println("sorry,you can't open this page");
return "reject";
}
}
以上用到了两个SpringMVC中常用的注释类型:Controller和RequestMapping。@Controller则是注释处理器类,既然使用了注释处理器,则需要在后面的配置文件中配置自动扫描等。@RequestMapping(/name)用来注释一个请求和一种方法,采用它注释的方法将成为一个请求处理方法,并由调度程序接收到URL请求时调用,name则是对应进行映射的url地址,将url映射到该方法。而处理器类中的return后的字符串则代表着相应的jsp页面的名字。
4.SpringMVC配置文件的配置
就如同struts2开发时,有一个struts.xml配置文件,而这里也有一个xml文件,本文我们的配置文件名为springMVC-servlet.xml(该文件的名字以及位置都需要与web文件中配置的一致,否则访问不到)。
1.首先需要配置自动扫描组件,使用<context:component-scan base-package=""></context:component-scan>注意这里的base-package需要合理选取,否则会读取多余的类,影响运行效率。
2.打开注释驱动<mvc-annotation-driven/>只有配置了这个,处理器类中的注释才能被使用。
3.SpringMVC的优点就在这里这里体现了,就是jsp视图解析器的配置,这里只需要配置解析器,jsp文件名便会与处理器类的返回值相互映射。注意要实现这个功能,则需要添加jstl包,缺少这个包则不能实现映射。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 自动扫描组件 -->
<context:component-scan base-package="springmvc"></context:component-scan>
<!-- 打开注解驱动 -->
<mvc:annotation-driven/>
<!-- 配置jsp视图解析器 ,需要有jstl这个jar包,否则不能映射-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
5.视图开发
所谓视图开发就是jsp文件的编写,根据以上内容可知,需要编写一个hello.jsp和一个reject.jsp文件,另外再编写一个先导页面index.jsp,以下是三个文件内容
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
${msg}
</body>
</html>
reject.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>sorry,you can't open this page</h1>
</body>
</html>
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href="hello">welcome</a>
<a href="reject">reject</a>
</body>
</html>
注意:前两个jsp文件是放在WEB-INF目录下的,而index.jsp则是与WEB-INF同级目录下。
6.项目文件结构
从上述五个步骤,SpringMVC在Eclipse中简单开发基本完成,接下来展示一下该项目的文件结构示意图:
7.运行项目
点击项目右键run as-->run on server单击,选择相应的server,确认即可运行,首先我们看到先导页面。
点击welcome可以看到如下页面:
点击上面向左的箭头,返回先导面,然后再点击reject,可看到如下页面:
其中后面两张图的URL最后是hello和reject,则对应的是先导页中href的值。