Spring MVc是基于Spring框架的基础上采用了Web MVC设计模式的一个轻量级web框架,也是目前最为流行的一个Web框架。Spring MVc框架具有如下一些特点:
1.拥有强大的灵活性,非侵入性和可配置性。
⒉提供了一个前端控制器DispatcherServlet,开发者无需额外开发控制器对象。
3.分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,每一个功能实现由一个专门的对象负责完成。
4.可以自动绑定用户输入,并正确的转换数据类型。比如,Spring MVc能自动解析字符串,并将其设置为模型的int或者float类型的属性。
解释:
可配置性:也像spring一样,通过配置完成相关功能;
无需额外开发控制器:以前需要自己写servlet接收和处理前端的请求。自己只需要写一些不共性的东西即可。
将其设置为模型的int或者float类型:把页面的字符串,自动转换成int或float等。
说明:目录结构如上所示,实现的先后顺序如下:
1) pom.xml 添加依赖库
2) web.xml 配置dispatcherServlet和Springmvc-config.xml、要处理的路径配置,一般用*.do即可。
3) index.jsp 显示用户信息
4) User.java
5) UserDaoImp 访问数据库,这里模拟两个用户数据
6) UserService 提供查看用户的方法
7) UserController 配置路由和调用相应的方法
8) Springmvc-config.xml 开启注解扫描
添加依赖库
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.20</version> </dependency> <!--添加springmvc库--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.20</version> </dependency> <!--添加jsp库--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <!--添加jstl标签库--> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> </dependency> </dependencies>
配置dispatcherServlet和Springmvc-config.xml、要处理的路径配置,一般用*.do即可。
<?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/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4"> <display-name>Spring Web MVC Hello World Application</display-name> <servlet> <!-- 配置SpringMVC的前端控制器DispatcherServlet,dispatcherServlet --> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置项目初始化时需要加载的配置文件为类根路径下的springmvc-config.xml文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <!-- 表示容器在启动时立即加载本Servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 系统默认欢迎页面 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
显示用户信息
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <body> <h2>用户展示</h2> <table border="1"> <tr> <th>id</th><th>姓名</th> </tr> <c:forEach items="${list}" var="l"> <tr> <td>${l.id}</td> <td>${l.name}</td> </tr> </c:forEach> </table> </body> </html>
package com.scitc.domain; public class User { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "id='" + id + '\'' + ", name='" + name + '\'' + '}'; } }
访问数据库,这里模拟两个用户数据
package com.scitc.dao; import com.scitc.domain.User; import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.List; @Repository //通过注解注入该bean public class UserDaoImp { public List<User> findAll() { //模拟数据库操作获取用户信息列表数据赋值给list,并返回list结果集 List<User> list = new ArrayList<User>(); User user = new User(); user.setId("1001"); user.setName("张三"); list.add(user); User user1 = new User(); user1.setId("1002"); user1.setName("李四"); list.add(user1); return list; } }
提供查看用户的方法
package com.scitc.service; import com.scitc.dao.UserDaoImp; import com.scitc.domain.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired public UserDaoImp userDao; public List<User> findAll() { List<User> list=userDao.findAll(); return list; } }
配置路由和调用相应的方法
package com.scitc.controller; import com.scitc.domain.User; import com.scitc.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import java.util.List; @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/test.do") public void print(){ System.out.println("1111"); } @RequestMapping("/findAll.do") public ModelAndView userList(){ List<User> list = userService.findAll(); //创建模块视图对象,方法1: // Map<String,Object> model = new HashMap<String,Object>(); // model.put("list",list); // ModelAndView modelAndView = new ModelAndView("/WEB-INF/views/userList.jsp",model); //方法2 ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("/index.jsp"); modelAndView.addObject("list",list); return modelAndView; } }
开启注解扫描
<?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"> <!--使用组件扫描的方式,方法1:分开写--> <context:component-scan base-package="com.scitc.controller"/> <context:component-scan base-package="com.scitc.service"/> <context:component-scan base-package="com.scitc.dao"/> <!--使用组件扫描的方式,方法2:写一个基包也可以--> <!-- <context:component-scan base-package="com.scitc"/>--> <!-- 使用注解驱动SpringMVC。annotation-driven会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter与ExceptionHandlerExceptionResolver三个bean。在Spring3.2以后,RequestMappingHandlerAdapter完全可以代替AnnotationMethodHandlerAdapter--> <mvc:annotation-driven /> </beans>
本教程用的tomcat9
第1步:请自行到官网下载
下载,解压缩,然后再环境变量path中加入tomcat的根目录即可。
第2步:idea配置tomcat和添加项目。具体请参照网络资源。
运行成功后,在浏览器输入
http://localhost:8080/springmvc/user/findAll.do
即可查看到用户信息显示在index.jsp页面上
注意:
tomcat9的解析方式,在控制器中的路径,最后一个一定带do的,在请求的时候把.do也加上才能访问到。Tomcat8可能在控制器中不需要带,访问带do有可能访问到,没测试。