这节主要讲述 SpringMVC的基本使用,注意我用的是伪代码,即并没有与底层数据库交互,主要在于SpringMVC的基本使用(配置和注解实现);
操作步骤:
- 引入依赖(主要是Spring核心包、SpringMVC相关的包);
- 配置和开发(配置:前端控制器、处理器映射器、处理器适配器、配置视图解析器,开发:开发Handler、开发视图);
- 部署到服务器上(Tomcat、Jetty);
配置实现
一、引入依赖
Spring的核心包前面Spring已经介绍过了(Spring(一)),所以这里只写SpringMVC的:
<!--SpringMVC相关-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
二、配置和开发
1、创建bean类、开发Handler:
创建bean类Student:
public class Student {
private int SID;
private String Sname;
private String Ssex;
private int Age;
//get、set方法,toString方法
}
开发Handler:
public class ControllerTest1 implements Controller {
/**
* Handler必须实现org.springframework.web.servlet.mvc.Controller接口
* 并且实现handleRequest方法
* @param httpServletRequest
* @param httpServletResponse
* @return
* @throws Exception
*/
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//查询
List<Student> list = new ArrayList<>();
Student student1 = new Student();
student1.setSID(1);
student1.setSname("张三");
student1.setSsex("男");
student1.setSage(22);
Student student2 = new Student();
student2.setSID(2);
student2.setSname("小丽");
student2.setSsex("女");
student2.setSage(21);
list.add(student1);
list.add(student2);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("students",list);
//逻辑视图名
modelAndView.setViewName("jsp1");
return modelAndView;
}
}
2、开发视图:
我是在WEB-INF下创建的jsp包里面创建的jsp1.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!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=UTF-8">
<title>用户列表</title>
</head>
<body>
<table width="80%" border="1" align="center">
<h1 align="center">用户列表</h1>
<tr>
<%--<td>选择</td>--%>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
<%-- students 要与后台保持一致--%>
<c:forEach items="${students }" var="student">
<tr>
<td>${student.SID }</td>
<td>${student.sname} </td>
<td>${student.ssex }</td>
<td>${student.sage }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
3、创建配置文件springmvc1.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 class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--配置处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
<!--管理handler-->
<!--name="/springmvc1" /springmvc1就是访问的URL-->
<bean name="/springmvc1" class="com.tulun1.controller.ControllerTest1"/>
</beans>
4、配置前端控制器
打开对应的web.xml(这个相当于main方法):
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>springmvc</display-name>
<!--配置前端控制器-->
<servlet>
<!-- 第 3 步走到这-->
<servlet-name>springmvc</servlet-name>
<!--前端控制器的全路径名-->
<!-- 第 4 步走到这,交给DispatcherServlet解析-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化用的-->
<init-param>
<!--contextConfigLocation 配置处理器映射器、处理器适配器,如果不写的话,
默认在当前的web的同级目录添加web-INF/servler名称(就是外层的servlet-name对应的值)-servlet.xml-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:配置实现/springmvc1.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 第 2 步走到这-->
<servlet-name>springmvc</servlet-name>
<!--设置访问地址 交给DispatcherServlet解析-->
<!-- 访问这个地址之后第 1 步走到这-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
三、部署项目
1、使用Jetty插件(这个比Tomcat轻量级):
<!--引入jetty插件-->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.24</version>
<configuration>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>30000</maxIdleTime>
</connector>
</connectors>
<contextPath>/</contextPath>
</configuration>
</plugin>
点击上图那个按钮启动项目:
打开浏览器,输入http://localhost:8080/springmvc1,访问本地的springmvc1:
2、使用Tomcat,这是使用最广的方式:
同样的,启动项目,访问http://localhost:8080/springmvc1:
使用Tomcat的过程中,遇到了这个错误:
只要引入这个依赖就好了:
<!--加入jstl包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
注解实现
一、引入依赖
一样的,略;
二、配置和开发
1、创建bean类、开发Handler:
创建bean类,还是那个Student类,略;
开发Handler:
@Controller
@RequestMapping(value = "/student") //这个不要也可以,访问http://localhost:8080/springmvc2就好
public class ControllerTest2 {
@RequestMapping(value = "/springmvc2") //这个相当于把http://localhost:8080/springmvc2和getStudentList方法绑定了
public ModelAndView getStudentList(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) {
//查询
List<Student> list = new ArrayList<>();
Student student1 = new Student();
student1.setSID(1);
student1.setSname("张三");
student1.setSsex("男");
student1.setSage(22);
Student student2 = new Student();
student2.setSID(2);
student2.setSname("小丽");
student2.setSsex("女");
student2.setSage(21);
list.add(student1);
list.add(student2);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("students",list);
//逻辑视图名
modelAndView.setViewName("jsp1");
return modelAndView;
}
}
2、开发视图
和上面一样的,略;
3、创建配置文件:
这个有两种写法:
㈠springmvc2.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">
<!--基于注解-->
<!--处理器映射器-->
<!--spring 3.1版本之后-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置jsp的视图解析类-->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 注解扫描 -->
<context:component-scan base-package="com.tulun2.controller"/>
</beans>
㈡springmvc3.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--基于注解-->
<!-- 注解扫描 -->
<context:component-scan base-package="com.tulun2.controller"/>
<!--自动扫描mvc相关的注解 适配器、映射器等,都有相关的默认配置-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置jsp的视图解析类-->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4、配置前端控制器:
还是web.xml,改一下使用的配置文件就好了:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>springmvc</display-name>
<!--配置前端控制器-->
<servlet>
<!-- 第 3 步走到这-->
<servlet-name>springmvc</servlet-name>
<!--前端控制器的全路径名-->
<!-- 第 4 步走到这,交给DispatcherServlet解析-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化用的-->
<init-param>
<!--contextConfigLocation 配置处理器映射器、处理器适配器,如果不写的话,
默认在当前的web的同级目录添加web-INF/servler名称(就是外层的servlet-name对应的值)-servlet.xml-->
<param-name>contextConfigLocation</param-name>
<!--也可以见springmvc2.xml改成springmvc3.xml,都可以-->
<param-value>classpath:注解实现/springmvc2.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 第 2 步走到这-->
<servlet-name>springmvc</servlet-name>
<!--设置访问地址 交给DispatcherServlet解析-->
<!-- 访问这个地址之后第 1 步走到这-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
三、部署服务器
略,
直接使用吧,启动服务器,在浏览器输入http://localhost:8080/student/springmvc2: