了解springmvc,搭建第一个springmvc项目,理解项目目录结构
SpringMVC简介:
Spring MVc是基于Spring框架的基础上采用了Web MVC设计模式的一个轻量级web框架,也是目前最为流行的一个Web框架。Spring MVc框架具有如下一些特点:
1.拥有强大的灵活性,非侵入性和可配置性。
⒉提供了一个前端控制器DispatcherServlet,开发者无需额外开发控制器对象。
3.分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,每一个功能实现由一个专门的对象负责完成。
4.可以自动绑定用户输入,并正确的转换数据类型。比如,Spring MVc能自动解析字符串,并将其设置为模型的int或者float类型的属性。
解释:
可配置性:也像spring一样,通过配置完成相关功能;
无需额外开发控制器:以前需要自己写servlet接收和处理前端的请求。自己只需要写一些不共性的东西即可。
将其设置为模型的int或者float类型:把页面的字符串,自动转换成int或float等。
新建模块springMVC1
说明:目录结构如上所示,实现的先后顺序如下:
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 开启注解扫描
pom.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>
web.xml
配置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>
index.jsp
显示用户信息
<%@ 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>
User
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 + '\'' +
'}';
}
}
UserDaoImp
访问数据库,这里模拟两个用户数据
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;
}
}
UserService
提供查看用户的方法
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;
}
}
UserController
配置路由和调用相应的方法
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;
}
}
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"
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>
tomcat服务器配置
本教程用的tomcat9
第1步:请自行到官网下载
下载,解压缩,然后再环境变量path中加入tomcat的根目录即可。
第2步:idea配置tomcat和添加项目。具体请参照网络资源。
运行tomcat
运行成功后,在浏览器输入
http://localhost:8080/springmvc/user/findAll.do
即可查看到用户信息显示在index.jsp页面上
注意:
tomcat9的解析方式,在控制器中的路径,最后一个一定带do的,在请求的时候把.do也加上才能访问到。Tomcat8可能在控制器中不需要带,访问带do有可能访问到,没测试。