当前位置:   article > 正文

SSM项目框架_ssm框架项目

ssm框架项目

项目开发步骤:

1.需求分析

2.设计数据库CRUD

3.业务实现

4.前端界面

环境:

  • IDEA

  • MySQL 5.7.19

  • Tomcat 9

  • Maven 3.6

  • 业务层——Spring
  • 表现层——SpringMVC
  • 持久层——MyBatis

一、设计数据库

  1. CREATE DATABASE `ssmbuild`;
  2. USE `ssmbuild`;
  3. DROP TABLE IF EXISTS `books`;
  4. CREATE TABLE `books` (
  5. `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
  6. `bookName` VARCHAR(100) NOT NULL COMMENT '书名',
  7. `bookCounts` INT(11) NOT NULL COMMENT '数量',
  8. `detail` VARCHAR(200) NOT NULL COMMENT '描述',
  9. KEY `bookID` (`bookID`)
  10. ) ENGINE=INNODB DEFAULT CHARSET=utf8
  11. INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
  12. (1,'Java',1,'从入门到放弃'),
  13. (2,'MySQL',10,'从删库到跑路'),
  14. (3,'Linux',5,'从入门到入门');

二、搭建环境

1.新建Maven项目

2.导入相关的pom依赖

  1. <dependencies>
  2. <!--Junit-->
  3. <dependency>
  4. <groupId>junit</groupId>
  5. <artifactId>junit</artifactId>
  6. <version>4.12</version>
  7. </dependency>
  8. <!--数据库驱动-->
  9. <dependency>
  10. <groupId>mysql</groupId>
  11. <artifactId>mysql-connector-java</artifactId>
  12. <version>5.1.47</version>
  13. </dependency>
  14. <!-- 数据库连接池 -->
  15. <dependency>
  16. <groupId>com.mchange</groupId>
  17. <artifactId>c3p0</artifactId>
  18. <version>0.9.5.2</version>
  19. </dependency>
  20. <!--Servlet - JSP -->
  21. <dependency>
  22. <groupId>javax.servlet</groupId>
  23. <artifactId>servlet-api</artifactId>
  24. <version>2.5</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>javax.servlet.jsp</groupId>
  28. <artifactId>jsp-api</artifactId>
  29. <version>2.2</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>javax.servlet</groupId>
  33. <artifactId>jstl</artifactId>
  34. <version>1.2</version>
  35. </dependency>
  36. <!--Mybatis-->
  37. <dependency>
  38. <groupId>org.mybatis</groupId>
  39. <artifactId>mybatis</artifactId>
  40. <version>3.5.2</version>
  41. </dependency>
  42. <dependency>
  43. <groupId>org.mybatis</groupId>
  44. <artifactId>mybatis-spring</artifactId>
  45. <version>2.0.2</version>
  46. </dependency>
  47. <!--Spring-->
  48. <dependency>
  49. <groupId>org.springframework</groupId>
  50. <artifactId>spring-webmvc</artifactId>
  51. <version>5.1.9.RELEASE</version>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.springframework</groupId>
  55. <artifactId>spring-jdbc</artifactId>
  56. <version>5.1.9.RELEASE</version>
  57. </dependency>
  58. </dependencies>

3.Maven资源过滤设置

  1. <build>
  2. <resources>
  3. <resource>
  4. <directory>src/main/java</directory>
  5. <includes>
  6. <include>**/*.properties</include>
  7. <include>**/*.xml</include>
  8. </includes>
  9. <filtering>false</filtering>
  10. </resource>
  11. <resource>
  12. <directory>src/main/resources</directory>
  13. <includes>
  14. <include>**/*.properties</include>
  15. <include>**/*.xml</include>
  16. </includes>
  17. <filtering>false</filtering>
  18. </resource>
  19. </resources>
  20. </build>

4.建立基本结构和配置框架

  • com.example.pojo

  • com.example.dao

  • com.example.service

  • com.example.controller

  • resources下的:

  • mybatis-config.xml

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. </configuration>

    applicationContext.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans
    5. http://www.springframework.org/schema/beans/spring-beans.xsd">
    6. </beans>

三、 Mybatis层编写

1.数据库配置文件

database.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8
  3. jdbc.username=root
  4. jdbc.password=root

2.MyBatis核心配置文件

mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <typeAliases>
  7. <package name="com.kuang.pojo"/>
  8. </typeAliases>
  9. <mappers>
  10. <mapper resource="com/kuang/dao/BookMapper.xml"/>
  11. </mappers>
  12. </configuration>

3.编写数据库对应的实体类

com.example.pojo.Books

  1. package com.example.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. //使用lombok插件
  6. @Data
  7. @AllArgsConstructor
  8. @NoArgsConstructor
  9. public class Books {
  10. private int bookID;
  11. private String bookName;
  12. private int bookCounts;
  13. private String detail;
  14. }

4.编写Dao层的 Mapper接口

  1. package com.example.dao;
  2. import com.kuang.pojo.Books;
  3. import java.util.List;
  4. public interface BookMapper {
  5. //增加一个Book
  6. int addBook(Books book);
  7. //根据id删除一个Book
  8. int deleteBookById(int id);
  9. //更新Book
  10. int updateBook(Books books);
  11. //根据id查询,返回一个Book
  12. Books queryBookById(int id);
  13. //查询全部Book,返回list集合
  14. List<Books> queryAllBook();
  15. }

5.编写接口对应的 Mapper.xml 文件(需要导入MyBatis的包)

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.example.dao.BookMapper">
  6. <!--增加一个Book-->
  7. <insert id="addBook" parameterType="Books">
  8. insert into ssmbuild.books(bookName,bookCounts,detail)
  9. values (#{bookName}, #{bookCounts}, #{detail})
  10. </insert>
  11. <!--根据id删除一个Book-->
  12. <delete id="deleteBookById" parameterType="int">
  13. delete from ssmbuild.books where bookID=#{bookID}
  14. </delete>
  15. <!--更新Book-->
  16. <update id="updateBook" parameterType="Books">
  17. update ssmbuild.books
  18. set bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail}
  19. where bookID = #{bookID}
  20. </update>
  21. <!--根据id查询,返回一个Book-->
  22. <select id="queryBookById" resultType="Books">
  23. select * from ssmbuild.books
  24. where bookID = #{bookID}
  25. </select>
  26. <!--查询全部Book-->
  27. <select id="queryAllBook" resultType="Books">
  28. SELECT * from ssmbuild.books
  29. </select>
  30. </mapper>

6.Service层的接口和实现类

  1. package com.example.service;
  2. import com.example.pojo.Books;
  3. import java.util.List;
  4. //BookService:底下需要去实现,调用dao层
  5. public interface BookService {
  6. //增加一个Book
  7. int addBook(Books book);
  8. //根据id删除一个Book
  9. int deleteBookById(int id);
  10. //更新Book
  11. int updateBook(Books books);
  12. //根据id查询,返回一个Book
  13. Books queryBookById(int id);
  14. //查询全部Book,返回list集合
  15. List<Books> queryAllBook();
  16. }
  1. package com.example.service;
  2. import com.example.dao.BookMapper;
  3. import com.example.pojo.Books;
  4. import java.util.List;
  5. public class BookServiceImpl implements BookService {
  6. //调用dao层的操作,设置一个set接口,方便Spring管理
  7. private BookMapper bookMapper;
  8. public void setBookMapper(BookMapper bookMapper) {
  9. this.bookMapper = bookMapper;
  10. }
  11. public int addBook(Books book) {
  12. return bookMapper.addBook(book);
  13. }
  14. public int deleteBookById(int id) {
  15. return bookMapper.deleteBookById(id);
  16. }
  17. public int updateBook(Books books) {
  18. return bookMapper.updateBook(books);
  19. }
  20. public Books queryBookById(int id) {
  21. return bookMapper.queryBookById(id);
  22. }
  23. public List<Books> queryAllBook() {
  24. return bookMapper.queryAllBook();
  25. }
  26. }

四、Spring层

(数据源使用c3p0连接池)

1.Spring容器整合Mybatis的配置文件

spring-dao.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. https://www.springframework.org/schema/context/spring-context.xsd">
  9. <!-- 配置整合mybatis -->
  10. <!-- 1.关联数据库文件 -->
  11. <context:property-placeholder location="classpath:database.properties"/>
  12. <!-- 2.数据库连接池 -->
  13. <!--数据库连接池
  14. dbcp 半自动化操作 不能自动连接
  15. c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)
  16. -->
  17. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  18. <!-- 配置连接池属性 -->
  19. <property name="driverClass" value="${jdbc.driver}"/>
  20. <property name="jdbcUrl" value="${jdbc.url}"/>
  21. <property name="user" value="${jdbc.username}"/>
  22. <property name="password" value="${jdbc.password}"/>
  23. <!-- c3p0连接池的私有属性 -->
  24. <property name="maxPoolSize" value="30"/>
  25. <property name="minPoolSize" value="10"/>
  26. <!-- 关闭连接后不自动commit -->
  27. <property name="autoCommitOnClose" value="false"/>
  28. <!-- 获取连接超时时间 -->
  29. <property name="checkoutTimeout" value="10000"/>
  30. <!-- 当获取连接失败重试次数 -->
  31. <property name="acquireRetryAttempts" value="2"/>
  32. </bean>
  33. <!-- 3.配置SqlSessionFactory对象 -->
  34. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  35. <!-- 注入数据库连接池 -->
  36. <property name="dataSource" ref="dataSource"/>
  37. <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
  38. <property name="configLocation" value="classpath:mybatis-config.xml"/>
  39. </bean>
  40. <!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
  41. <!--解释 :https://www.cnblogs.com/jpfss/p/7799806.html-->
  42. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  43. <!-- 注入sqlSessionFactory -->
  44. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  45. <!-- 给出需要扫描Dao接口包 -->
  46. <property name="basePackage" value="com.example.dao"/>
  47. </bean>
  48. </beans>

2.Spring整合service层

spring-service.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd">
  9. <!-- 扫描service相关的bean -->
  10. <context:component-scan base-package="com.example.service" />
  11. <!--BookServiceImpl注入到IOC容器中-->
  12. <bean id="BookServiceImpl" class="com.kuang.service.BookServiceImpl">
  13. <property name="bookMapper" ref="bookMapper"/>
  14. </bean>
  15. <!-- 配置事务管理器 -->
  16. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  17. <!-- 注入数据库连接池 -->
  18. <property name="dataSource" ref="dataSource" />
  19. </bean>
  20. </beans>

五、SpringMVC层

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--DispatcherServlet-->
  7. <servlet>
  8. <servlet-name>DispatcherServlet</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <init-param>
  11. <param-name>contextConfigLocation</param-name>
  12. <!--一定要注意:我们这里加载的是总的配置文件,之前被这里坑了!-->
  13. <param-value>classpath:applicationContext.xml</param-value>
  14. </init-param>
  15. <load-on-startup>1</load-on-startup>
  16. </servlet>
  17. <servlet-mapping>
  18. <servlet-name>DispatcherServlet</servlet-name>
  19. <url-pattern>/</url-pattern>
  20. </servlet-mapping>
  21. <!--encodingFilter-->
  22. <filter>
  23. <filter-name>encodingFilter</filter-name>
  24. <filter-class>
  25. org.springframework.web.filter.CharacterEncodingFilter
  26. </filter-class>
  27. <init-param>
  28. <param-name>encoding</param-name>
  29. <param-value>utf-8</param-value>
  30. </init-param>
  31. </filter>
  32. <filter-mapping>
  33. <filter-name>encodingFilter</filter-name>
  34. <url-pattern>/*</url-pattern>
  35. </filter-mapping>
  36. <!--Session过期时间-->
  37. <session-config>
  38. <session-timeout>15</session-timeout>
  39. </session-config>
  40. </web-app>

spring-mvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/mvc
  11. https://www.springframework.org/schema/mvc/spring-mvc.xsd">
  12. <!-- 配置SpringMVC -->
  13. <!-- 1.开启SpringMVC注解驱动 -->
  14. <mvc:annotation-driven />
  15. <!-- 2.静态资源默认servlet配置-->
  16. <mvc:default-servlet-handler/>
  17. <!-- 3.配置jsp 显示ViewResolver视图解析器 -->
  18. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  19. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  20. <property name="prefix" value="/WEB-INF/jsp/" />
  21. <property name="suffix" value=".jsp" />
  22. </bean>
  23. <!-- 4.扫描web相关的bean -->
  24. <context:component-scan base-package="com.example.controller" />
  25. </beans>

Spring配置整合

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <import resource="spring-dao.xml"/>
  7. <import resource="spring-service.xml"/>
  8. <import resource="spring-mvc.xml"/>
  9. </beans>

 六、Controller层

BookController

1.查询所有书籍

  1. @Controller
  2. @RequestMapping("/book")
  3. public class BookController {
  4. @Autowired
  5. @Qualifier("BookServiceImpl")
  6. private BookService bookService;
  7. @RequestMapping("/allBook")
  8. public String list(Model model) {
  9. List<Books> list = bookService.queryAllBook();
  10. model.addAttribute("list", list);
  11. return "allBook";
  12. }
  13. }

2.添加书籍

  1. @RequestMapping("/toAddBook")
  2. public String toAddPaper() {
  3. return "addBook";
  4. }
  5. @RequestMapping("/addBook")
  6. public String addPaper(Books books) {
  7. System.out.println(books);
  8. bookService.addBook(books);
  9. return "redirect:/book/allBook";
  10. }

3.修改书籍

  1. @RequestMapping("/toUpdateBook")
  2. public String toUpdateBook(Model model, int id) {
  3. Books books = bookService.queryBookById(id);
  4. System.out.println(books);
  5. model.addAttribute("book",books );
  6. return "updateBook";
  7. }
  8. @RequestMapping("/updateBook")
  9. public String updateBook(Model model, Books book) {
  10. System.out.println(book);
  11. bookService.updateBook(book);
  12. Books books = bookService.queryBookById(book.getBookID());
  13. model.addAttribute("books", books);
  14. return "redirect:/book/allBook";
  15. }

4.删除书籍

  1. @RequestMapping("/del/{bookId}")
  2. public String deleteBook(@PathVariable("bookId") int id) {
  3. bookService.deleteBookById(id);
  4. return "redirect:/book/allBook";
  5. }

 七、表现层

1.首页 index.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  2. <!DOCTYPE HTML>
  3. <html>
  4. <head>
  5. <title>首页</title>
  6. <style type="text/css">
  7. a {
  8. text-decoration: none;
  9. color: black;
  10. font-size: 18px;
  11. }
  12. h3 {
  13. width: 180px;
  14. height: 38px;
  15. margin: 100px auto;
  16. text-align: center;
  17. line-height: 38px;
  18. background: deepskyblue;
  19. border-radius: 4px;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <h3>
  25. <a href="${pageContext.request.contextPath}/book/allBook">点击进入列表页</a>
  26. </h3>
  27. </body>
  28. </html>

2.列表页面 allbook.jsp

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5. <title>书籍列表</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <!-- 引入 Bootstrap -->
  8. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  9. </head>
  10. <body>
  11. <div class="container">
  12. <div class="row clearfix">
  13. <div class="col-md-12 column">
  14. <div class="page-header">
  15. <h1>
  16. <small>书籍列表 —— 显示所有书籍</small>
  17. </h1>
  18. </div>
  19. </div>
  20. </div>
  21. <div class="row">
  22. <div class="col-md-4 column">
  23. <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增</a>
  24. </div>
  25. </div>
  26. <div class="row clearfix">
  27. <div class="col-md-12 column">
  28. <table class="table table-hover table-striped">
  29. <thead>
  30. <tr>
  31. <th>书籍编号</th>
  32. <th>书籍名字</th>
  33. <th>书籍数量</th>
  34. <th>书籍详情</th>
  35. <th>操作</th>
  36. </tr>
  37. </thead>
  38. <tbody>
  39. <c:forEach var="book" items="${requestScope.get('list')}">
  40. <tr>
  41. <td>${book.getBookID()}</td>
  42. <td>${book.getBookName()}</td>
  43. <td>${book.getBookCounts()}</td>
  44. <td>${book.getDetail()}</td>
  45. <td>
  46. <a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.getBookID()}">更改</a> |
  47. <a href="${pageContext.request.contextPath}/book/del/${book.getBookID()}">删除</a>
  48. </td>
  49. </tr>
  50. </c:forEach>
  51. </tbody>
  52. </table>
  53. </div>
  54. </div>
  55. </div>

3.添加页面:addBook.jsp

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5. <title>新增书籍</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <!-- 引入 Bootstrap -->
  8. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  9. </head>
  10. <body>
  11. <div class="container">
  12. <div class="row clearfix">
  13. <div class="col-md-12 column">
  14. <div class="page-header">
  15. <h1>
  16. <small>新增书籍</small>
  17. </h1>
  18. </div>
  19. </div>
  20. </div>
  21. <form action="${pageContext.request.contextPath}/book/addBook" method="post">
  22. 书籍名称:<input type="text" name="bookName"><br><br><br>
  23. 书籍数量:<input type="text" name="bookCounts"><br><br><br>
  24. 书籍详情:<input type="text" name="detail"><br><br><br>
  25. <input type="submit" value="添加">
  26. </form>
  27. </div>

4.修改页面  updateBook.jsp

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5. <title>修改信息</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <!-- 引入 Bootstrap -->
  8. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  9. </head>
  10. <body>
  11. <div class="container">
  12. <div class="row clearfix">
  13. <div class="col-md-12 column">
  14. <div class="page-header">
  15. <h1>
  16. <small>修改信息</small>
  17. </h1>
  18. </div>
  19. </div>
  20. </div>
  21. <form action="${pageContext.request.contextPath}/book/updateBook" method="post">
  22. <input type="hidden" name="bookID" value="${book.getBookID()}"/>
  23. 书籍名称:<input type="text" name="bookName" value="${book.getBookName()}"/>
  24. 书籍数量:<input type="text" name="bookCounts" value="${book.getBookCounts()}"/>
  25. 书籍详情:<input type="text" name="detail" value="${book.getDetail() }"/>
  26. <input type="submit" value="提交"/>
  27. </form>
  28. </div>

 八、项目结构

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/200080
推荐阅读
相关标签
  

闽ICP备14008679号