【提供源码】ssm+maven+jsp 项目对数据库简单curd案例
项目概要主要做对数据的增删改查操作项目条件框架:spring+springMVC项目管理工具:Maven代码编写工具:IntelliJ IDEA 2020.1 x64数据库:MySQL数据库工具:Navicat Premium步骤:在数据库创建表创建web项目创建项目目录结构在pom.xml文件里添加依赖写其他配置文件分层写代码jsp展示数据补充...
文章目录
项目概要
主要做对数据的增删改查操作
项目条件
框架:spring+springMVC+Mybatis
项目管理工具:Maven
代码编写工具:IntelliJ IDEA 2020.1 x64
数据库:MySQL
数据库工具:Navicat Premium
步骤:
1.在数据库创建表
创建表的 sql
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`age` int(5) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
2. 创建web项目
选择新建项目,在Maven里选择web项目,填写项目名和包名
3.项目目录结构
首次建项目加载比较慢,需要稍等下
查看总项目结构如下:
4. 在pom.xml文件里添加依赖
在pom.xml文件里添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tmm.test</groupId>
<artifactId>MyTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging> <!-- 打包是以war包的形式-->
<!--引入阿里私服-->
<repositories>
<repository>
<id>ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
<!-- 添加此节点mybatis的mapper.xml文件避免被漏掉。 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
<!-- 引入包的版本配置-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring.version>4.1.6.RELEASE</spring.version>
<mybatis.version>3.3.1</mybatis.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 连接mysql -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!--jstl表达式-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
</project>
5. 写其他配置文件
① 首先在 mian 目录下,右键新建 resources 文件夹,确保是资源文件
② 在 resources 文件夹里新建两个xml文件(spring.xml,spring-mvc.xml),和一个配置文件(jdbc.properties)
③ 配置四个xml文件 jdbc.properties,spring.xml,spring-mvc.xml,web.xml
代码:
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\:///test?useUnicode=xxx&characterEncoding=UTF-8 #自己的数据库名称
username=root
password=xxx #自己的数据库密码
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
spring.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:p="http://www.springframework.org/schema/p"
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-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:annotation-config />
<!--自动扫描-->
<context:component-scan base-package="com.tmm.test"></context:component-scan><!-- 注意这里:修改成自己的包名-->
<!--引入配置文件-->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最大数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean>
<!--spring和MyBatis整合,不需要mybatis的配置映射文件-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--DAO接口包,Spring会自动查找其他下的类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.tmm.test.mapper"/><!-- 注意这里:修改成自己的包名-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!--事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
spring-mvc.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:p="http://www.springframework.org/schema/p"
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-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.tmm.test.controller"/>
<mvc:default-servlet-handler />
<!--自定义消息转换器的编码,解决后台传输json回前台时,中文乱码问题-->
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter" >
<property name = "supportedMediaTypes">
<list>
<value>application/json;charset=utf-8</value>
<value>text/html;charset=utf-8</value>
<!-- application 可以在任意 form 表单里面 enctype 属性默认找到 -->
<value>application/x-www-form-urlencoded</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" ></bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/><!-- JSON转换器 -->
</list>
</property>
</bean>
<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- <property name="prefix" value="/WEB-INF/jsp/"/>-->
<property name="suffix" value=".jsp"/>
<property name="prefix" value="/"/>
<!-- <property name="suffix" value=".html"/>-->
</bean>
<!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="10485760000"/>
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="40960"/>
</bean>
</beans>
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<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">
<display-name>Archetype Created Web Application</display-name>
<!--Spring和mybatis的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<!--编码过滤器-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
<!-- <param-value>gb2312</param-value>-->
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--spring监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--防止Spring内存溢出监听器-->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- Spring MVC servlet -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<!--async-supported是servlet 3.0后推出的新特性-->
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 设置欢迎页面-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
6. 分层写代码
在mian下新建包com.tmm.test,在此包下分别新建四个包:
① 新建 entity 包,entity包下再新建实体类 Student
在实体类里将 无参构造函数,有参构造函数,setget方法,toString方法自动生成出来
package com.tmm.test.entity;
import java.io.Serializable;
public class Student implements Serializable {
private Integer id;
private String name;
private Integer age;
//无参构造函数
public Student() {
}
//有参构造函数
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
//toString方法
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
② 新建 mapper包,mapper包下新建 StudentMapper类
StudentMapper是一接口,用来写增删改查的方法
package com.tmm.test.mapper;
import com.tmm.test.entity.Student;
import java.util.List;
public interface StudentMapper {
//查询所有数据
List<Student> selectAll();
//根据id删除
int delete(int id);
//根据id修改
int update(Student student);
//添加
int insert(Student student);
//通过id查找
Student findById(int id);
}
③ 在mapper包下新建xml文件 StudentMapper.xml
StudentMapper.xml 是mybatis的映射文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tmm.test.mapper.StudentMapper">
<resultMap id="BaseResultMap" type="com.tmm.test.entity.Student">
<!--字段-->
<result column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="age" jdbcType="INTEGER" property="age" />
</resultMap>
<parameterMap type="com.tmm.test.entity.Student" id="StudentMap">
<parameter property="name" resultMap="BaseResultMap"/>
<parameter property="age" resultMap="BaseResultMap"/>
</parameterMap>
<sql id="Base_Column_List">
id,name,age
</sql>
<!--查询所有-->
<select id="selectAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from student
</select>
<!--通过id查找-->
<select id="findById" resultType="com.tmm.test.entity.Student">
select
<include refid="Base_Column_List" />
from student where id =#{id}
</select>
<!--删除-->
<delete id="delete" parameterType="int">
delete from student where id =#{id}
</delete>
<!--修改-->
<update id="update" parameterMap="StudentMap">
update student set name=#{name},age=#{age} where id=#{id}
</update>
<!--新增-->
<insert id="insert" parameterMap="StudentMap">
insert into student(name,age) values(#{name},#{age})
</insert>
</mapper>
④ 新建 service,在 service包下新建StudentService类
StudentService是一接口
package com.tmm.test.service;
import com.tmm.test.entity.Student;
import java.util.List;
public interface StudentService {
//查询所有数据
public List<Student> selectAll();
//根据id删除
public int delete(int id);
//根据id修改
public int update(Student student);
//添加
public int insert(Student student);
//通过id查找
public Student findById(int id);
}
⑤ 在 service包下,新建 impl包,包里新建 StudentServiceIml
StudentServiceIml 是StudentService类的实现类
package com.tmm.test.service.impl;
import com.tmm.test.entity.Student;
import com.tmm.test.mapper.StudentMapper;
import com.tmm.test.service.StudentService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("studentService")
public class StudentServiceIml implements StudentService {
@Resource
private StudentMapper studentMapper;
@Override
public List<Student> selectAll() {
return studentMapper.selectAll();
}
@Override
public int delete(int id) {
return studentMapper.delete(id);
}
@Override
public int update(Student student) {
return studentMapper.update(student);
}
@Override
public int insert(Student student) {
return studentMapper.insert(student);
}
@Override
public Student findById(int id) {
return studentMapper.findById(id);
}
}
⑥ 新建 controller包,包里新建 StudentController类
package com.tmm.test.controller;
import com.tmm.test.entity.Student;
import com.tmm.test.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
/**
* 查询
* @param model
* @return
*/
@RequestMapping("/select")
public String list(Model model){
List<Student> student=studentService.selectAll();
model.addAttribute("student", student);
return "/show";
}
/**
* 根据id删除
* @param id
* @return
*/
@RequestMapping("/delete/{id}")
public String delete(@PathVariable int id){ //@PathVariable 映射 URL 绑定的占位符
int count = studentService.delete(id);
System.out.println("count:"+count);
return "redirect:/student/select";
}
/**
* 新增
* @param student
* @return
*/
@RequestMapping("/insert")
public String insert(Student student){
studentService.insert(student);
return "redirect:/student/select";
}
/**
* 跳转修改页面,需要先通过id查找到此条数据
* @param model
* @param id
* @return
*/
@RequestMapping("/toUpdate/{id}")
public String findById(Model model, @PathVariable int id){
Student student = studentService.findById(id);
model.addAttribute("s",student);//通过id查找到此条数据
return "/update"; //update.jsp页面
}
/**
* 修改
* @param student
* @return
*/
@RequestMapping("/update")
public String update(Student student){
studentService.update(student);
return "redirect:/student/select";
}
}
7. jsp展示数据
main目录下,新建 webapp文件夹,webapp下,新建四个jsp页面
① index.jsp — 主页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<html>
<head>
<title>查看表格</title>
</head>
<body>
<div style="margin:0 auto;width:250px;height:50px;">
<button onclick="window.open('${pageContext.request.contextPath }/student/select');">查看表格</button>
</div>
</body>
</html>
② show.jsp —数据展示页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
<div align=center>
<table border=1 cellpadding=0 cellspacing=0 style='height:40px;width:250px;margin-bottom: 20px;'>
<tr>
<th>姓名</th>
<th>年纪</th>
<th>操作</th>
</tr>
<c:forEach items="${student}" var="student">
<tr style="text-align:center">
<td>${student.name}</td>
<td>${student.age}</td>
<td>
<a href="${pageContext.request.contextPath }/student/delete/${student.id}">删除</a>
<a href="${pageContext.request.contextPath }/student/toUpdate/${student.id}">修改</a>
</td>
</tr>
</c:forEach>
</table>
<button onclick="window.open('${pageContext.request.contextPath }/add.jsp');">新增</button>
</div>
</body>
</html>
③ add.jsp — 新增页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>新建数据</title>
</head>
<body>
<form action="student/insert" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
<input type="submit"/>
</form>
</body>
</html>
④ update.jsp —修改页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%--isELIgnored="false" 表示使用el表达式--%>
<html>
<head>
<title>数据修改</title>
</head>
<body>
<div>
<form action="${pageContext.request.contextPath }/student/update" method="post">
<input type="hidden" name="id" value="${s.id}"> <!--id用于识别目前是哪条数据-->
姓名:<input type="text" name="name" value="${s.name}"/><br/>
年龄:<input type="text" name="age" value="${s.age}"/><br/>
<input type="submit" value="提交">
</form>
</div>
</body>
</html>
8. 补充
注意:
若要修改整个项目的包名,以下几个地方是需要修改的
① jdbc.properties文件里的配置修改成自己数据库的
包括数据库名和密码
② spring.xml文件里的配置
下面两个地方包名修改成自己项目的
<context:component-scan base-package="com.tmm.test"></context:component-scan>
<property name="basePackage" value="com.tmm.test.mapper"/>
③ spring-mvc.xml文件里的配置
包名修改成自己的
<context:component-scan base-package="com.tmm.test.controller"/>
④ StudentMapper.xml文件里的配置
下面两个地方包名修改成自己项目的
<mapper namespace="com.tmm.test.mapper.StudentMapper"> <!--这个是mapper文件-->
<resultMap id="BaseResultMap" type="com.tmm.test.entity.Student"> <!--这个是实体文件-->
9. 运行
配置Tomcat服务器,按图操作
同一页面,继续操作
配置war包
点击右上角的绿色箭头按钮,就会跳到之前配置的浏览器页面。
10. 项目源码
完毕~
更多推荐
所有评论(0)