MVC介绍
SpringMVC介绍
MVC是⼀种架构模式,俗称模型、视图、控制器 。经典MVC模式中,M是指业务模型,V是指⽤户界⾯,C则是控制器,使⽤MVC的⽬的是将M和V的实现 代码 分离,从⽽使同⼀个程序可以使⽤不同的表现形式。其中,View的定义⽐较清晰,就是⽤户界⾯。
引⼊框架操作流程
1、安装依赖
<!-- SpringMVC框架依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
<!-- Spring框架对WEB模块的依赖⽀持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
<!-- 数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- SpringMVC 把对象转换成json 的依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.2</version>
</dependency>
2、配置web.xml
SpringMVC需要⼯作在web模块下 ,且根据SpringMVC ⼯作流程,需要在web.xml中配置核⼼控制器DispatherServlet。并且需要指定⾃定义的IOC容器的配置⽂件在什么地⽅ ,如果有缺省配置那么默认情况下在WEB-INF⽬录下 找以Servlet-name命名的xxxx-servlet.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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定ioc配置⽂件在什么地⽅ classpath:spring.xml 表示在resource⽬录即可-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.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、配置spring.xml
SpringMVC框架需要指定⼀个xml 作为ioc核⼼配置⽂件 ,在这个配置⽂件中,我们⾄少需要配置 Controller在哪个包下 、开启注解映射,跨域等内容,如果⾮前后端分离架构,还需要配置基于jsp或 freemarker等其他后端模板语⾔的视图解析器 。如果在后端项⽬⽬录放置了图⽚或视频、css、js、html 等静态资源,还需要配置开放静态资源映射,否则统统都被dispatherServlet 当作动态请求出现404了 ,对于常量属性的配置我们需要加载外部的⼀个application.properties ⽂件. 如果需要上传⽂件,我们 还需要配置上传组件的配置等
<?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 https://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.example.demo2.controller">
</context:component-scan>
<context:component-scan base-package="com.example.demo2.service">
</context:component-scan>
<context:component-scan base-package="com.example.demo2.dao">
</context:component-scan>
<!-- 启动注解映射器-->
<mvc:annotation-driven />
<!--跨域-->
<mvc:cors>
<mvc:mapping path="/**" allowed-origins="*" allow-credentials=
"false" allowed-methods="*" allowed-headers="*" max-age="3600" />
</mvc:cors>
<!-- 加载属性配置文件 里面有数据库的链接信息-->
<context:property-placeholder file-encoding="utf-8" location="classpath:application.properties"/>
<!--配置数据库CRUD工具 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 数据源-->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="${url}" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
</beans>
4、编写Controller 示例
#EmployeeController
package com.example.demo2.controller;
import com.example.demo2.common.CommonResult;
import com.example.demo2.pojo.Employee;
import com.example.demo2.service.IEmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
public class EmployeeController {
@Autowired
IEmployeeService employeeService;
// 路径查询
@RequestMapping(value ="/employee/{id}",method = RequestMethod.GET)
public CommonResult queryById(@PathVariable("id") Long id){
Employee employee=employeeService.queryById(id);
return CommonResult.success("查询雇员信息成功",employee);
}
}
#dao层类
package com.example.demo2.dao.impl;
import com.example.demo2.dao.IEmployeeDao;
import com.example.demo2.pojo.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@Repository
public class EmployeeDaoImpl implements IEmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public Employee queryById(Long id) {
String sql="select *from tb_employee where emp_id=?";
List<Employee> list= jdbcTemplate.query(sql, (ResultSet rs,int i) ->{
Employee employee=new Employee(rs.getLong("emp_id"),rs.getString("emp_name"),rs.getString("emp_sex"),rs.getString("emp_salary"),rs.getString("emp_telephone"));
return employee;
},id);
return list.size()>0?list.get(0):null;
}
@Override
public Employee queryByName(String name) {
return null;
}
}
#service层类代码
package com.example.demo2.service.impl;
import com.example.demo2.dao.IEmployeeDao;
import com.example.demo2.pojo.Employee;
import com.example.demo2.service.IEmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeServiceImpl implements IEmployeeService {
@Autowired
IEmployeeDao employeeDao;
@Override
public Employee queryById(Long id) {
return employeeDao.queryById(id);
}
@Override
public Employee queryByName(String name) {
return employeeDao.queryByName(name);
}
}
5、启动程序,访问查询接⼝
注解详细介绍
@Controller 注解 ⼀个控制器Component 相当于⼀个Bean 配置@RestController 注解 = @Controller +@ResponseBody注解@ResponseBody 把返回结果序列化成json字符串 返回给前端@RequestMaping(value = "/users" ,method = RequestMethod. GET ) 请求映射器1、GetMapping("/users")2、PostMapping("/users")3、PutMapping("/users")3、DeleteMapping("/users")@RequestParam("username") 类似于request.getparamter("username") 只能获取前端传递的参数格 式是 username=zhangsan&password=123456&email=songzt@lanqiao.com (⾮json格式数据 ,早期的form形式 x-www-from-urlencoded) ,requestParam是缺省默认的注解,如果参数列表没有任何 注解,相当于使⽤ RequestParam 形式. @RequestBody 专⻔⽤来接收 Content-Type="application/json" 格式的数据 并且把json转换成Java对象 @PathVariable ( "id" ) 从路径上获取参数