Framework does not matter, I'll take you to customize the frame

Framework does not matter, I'll take you to customize the frame

Preface: This title is a little too big to say, back when a title party, before the time referred to the school JSP JSTL and EL expressions, as has been in love with Servlet, has yet another update, this time be regarded jump out. This playback big move, with Spring + SpringMVC + Spring Jdbc Template, implement a CRUD plus pages, but the focus is not on this, my focus is JSTL and EL expressions, although the title a little big, but if not rough rough handling I really want to customize the framework, of course, this framework can be very flexible, I can not say much, use JSTL custom tags package pagination or can also count on up to learn JSTL and EL expressions it . For those who have been following my blog pace with new friends, I remind you not to worry, if you're curious you can first try to follow my case to try hand, do not learn to see SSM framework say, what's not, Haha, kidding, did not learn how could it, I said, this focus is JSTL and EL expressions, important words of no less than three times, as to the additional SSM, I will continue with the new, it will be hands-on with you understand, do not worry, do not worry, we know what the head of SSM it.

 

 

Preparing the Environment

I use development tools IDEA, if there is not written with IDEA before friends can see the blog " IDEA newbie tutorial ," I built this is a Maven project, Maven does not know if you have friends, you can look at I wrote before the introduction of Maven's blog " Maven ", do not know how to configure the Maven environment can be seen "Maven installation and configuration" https://www.cnblogs.com/zyx110/p/10801666.html do not know how to IDEA friends in the construction Maven project can be seen " IDEA for the novice professional building ," this case will be used Tomcat, likewise, does not configure Tomcat in IDEA friends can see " IDEA for the novice professional to create " good, complete these, you can start to knock code.

 

 

 

With a frame package JSTL

Before writing briefly explain the JSTL and EL expressions:

JSTL Introduction and environmental structures

What is JSTL

JSTL custom tag library is a set of Java

Why use JSTL

Code-reuse JSP pages, based on the principle of tag libraries, high repetition rate support reuse blocks of code and improve efficiency

When writing more readable JSP page, it looked like XML, easy to view and participate in the development of front-end

For example:


 
Different roles in different message displayed to the user at login

 

Module to import JSTL

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

 

  

 

EL expressions used in conjunction with JSTL

The first JSTL small program

Import JSTL tag library in a JSP page

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  

 

Use out label output

<c:out value="Hello JSTL"></c:out>

  

Four classification JSTL tags: core tags, formatting tags, SQL tags, XML tags EL expression

  • EL expression full name Expression Language, often used in conjunction with JSTL, so that JSP pages more intuitive, simpler wording.

The wording general expression: <% = session.getValue ( "name")%>

EL expression written: <c: out value = "$ {sessionScope.name}" />

  • EL expressions format

With a dollar sign "$" delimitation, including the braces "{}" in;

  • "." And "[]" operator

Typically ² are generic or $ {user.sex} $ {user [ "sex"]}

² "[]" may also be used to locate the set of elements $ {booklist [0] .price}

² When included special characters must use the "[]", for example: $ {user [ "first-name"]}

² Value by dynamic variables: $ {user [param]}, for example: param may be a name / sex / others

EL variable

 

 

EL automatic conversion

 

 

EL implicit object

 

 

EL operator

 

 

 

JSP custom tags

What is a custom label

A lot of html does not appear in the actual development process + java code is mixed jsp page, but sometimes jsp tag and third-party tags can not meet the normal development work, which requires developers to encapsulate business logic class specifications in line with jsp or interface to define their own tags to meet different development needs. The downside to this is that the development will add to the workload, but simplifies the communication before and after the end of the development process, facilitate the maintenance of late, this work is negligible. We can define your own set of labels mechanism, so that people know nothing about writing code to develop a web site out.

Development of a custom label

Case Scenario:

Display the current time, format the page: "Current time: August 1, 2017 10:30:50"

  • If conventional jsp script development, code is as follows:
<%

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

String date = sdf.format(new Date());

%>

当前时间为:<%=date %>

  


 显示结果:

 

 

  • 下面使用自定义标签库来实现这个案例

第一步:编写自定义标签的业务逻辑处理类

 

 

DateTag
package utils;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTag extends TagSupport {
    private String format="yyyy-MM-dd HH:mm:ss";
    private String color="blue";
    private String fontSize="12px";

    public void setFormat(String format) {
        this.format = format;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setFontSize(String fontSize) {
        this.fontSize = fontSize;
    }

    public int doStartTag() throws JspException {
        //自定义业务
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        String date = simpleDateFormat.format(new Date());

        String htmlshow = "<p class='' style='font-size:"+fontSize+";color:"+color+"'>"+date+"</p>";

        try {
            pageContext.getOut().print(htmlshow);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return super.doStartTag();
    }
}

  

第二步:在WEB-INF目录下编写*.tld文件注册标签

 

 

 

格式模板

datetag.tld

 

<?xml version="1.0" encoding="utf-8"?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>myshortname</short-name>
    <uri>http://mycompany.com</uri>

    <tag>
        <name>date</name>
        <tag-class>utils.DateTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>format</name>
            <required>false</required>
        </attribute>
        <attribute>
            <name>color</name>
            <required>false</required>
        </attribute>
        <attribute>
            <name>fontSize</name>
            <required>false</required>
        </attribute>

    </tag>

</taglib>

  

 

JSP显示

 

 

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="z" uri="http://mycompany.com" %>
<%@ taglib prefix="c" uri="http://mycompany.com" %>
<html>
<head>
    <title>显示时间</title>
</head>
<body>
<h1>index.jsp</h1>
<c:date/>
</body>
</html>

 

 

  

 

 

 

Spring+SpringMVC+Spring Jdbc Template

数据库结构

 

 

项目结构

 

 

 

Pom.xml

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>
  <!--Spring核心基础依赖-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <!--日志相关-->
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
  </dependency>
</dependencies>

 

  

 

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>

  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!--处理中文乱码-->
  <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>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!--设置访问静态资源-->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.mp3</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.mp4</url-pattern>
  </servlet-mapping>

</web-app>

  

 

 

applicationContext.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:tx="http://www.springframework.org/schema/tx"
       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/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
        ">
 

    <!--配置注解要扫描的包-->
    <context:component-scan base-package="controller"></context:component-scan>
    <context:component-scan base-package="dao"></context:component-scan>
    <context:component-scan base-package="Service"></context:component-scan>
    <context:component-scan base-package="pojo"></context:component-scan>
    <context:component-scan base-package="utils"></context:component-scan>
    <context:component-scan base-package="test"></context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--配置spring-jdbcTemplate-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--配置事务-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--注册事务注解驱动-->
    <tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven>

    <!--配置访问静态资源-->
    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
    <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
    <mvc:resources mapping="/img/**" location="/img/"></mvc:resources>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置前缀-->
        <property name="prefix" value="/"></property>
        <!--配置后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--创建文件上传组件对象-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
</beans>

 

  

 

Book

package pojo;

public class Book {
    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", bookname='" + bookname + '\'' +
                ", price=" + price +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBookname() {
        return bookname;
    }

    public void setBookname(String bookname) {
        this.bookname = bookname;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    private int id;
    private String bookname;
    private int price;


}

 

  

PageBean

package pojo;

import java.util.List;

public class PageBean<T> {

    private int pageCode;//当前页码
    private int totalPage;//总页数
    private int count;//总记录数
    private int pageSize;//每页记录数
    private List<T> pageList;//每页的数据


    public PageBean(int pageCode, int pageSize, int count, List<T> pageList) {
        this.pageCode = pageCode;
        this.count = count;
        this.pageSize = pageSize;
        this.pageList = pageList;
    }

    public PageBean() {
    }

    public int getPageCode() {
        return pageCode;
    }

    public void setPageCode(int pageCode) {
        this.pageCode = pageCode;
    }

    public int getTotalPage() {
        int tp = count/pageSize;
        return count%pageSize==0 ? tp : tp+1;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public List<T> getPageList() {
        return pageList;
    }

    public void setPageList(List<T> pageList) {
        this.pageList = pageList;
    }
}

 

  

 

BookDao

package dao;

import pojo.Book;

import java.util.List;

public interface BookDao {
    public List<Book> findByPage(int pageCode,int pageSize);
    public int count();
}

 

  

BookDaoImpl

package dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import pojo.Book;

import java.util.List;
@Repository
public class BookDaoImpl implements BookDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public List<Book> findByPage(int pageCode, int pageSize) {
        String sql = "select * from book limit ?,?";
        Object[] param = {(pageCode-1)*pageSize,pageSize};
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class),param);
    }

    @Override
    public int count() {
        String sql = "select count(*) from book";
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
}

  

 

BookService

package Service;

import pojo.Book;
import pojo.PageBean;

public interface BookService {
    public PageBean<Book> findByPage(int pageCode,int pageSize);
}

 

  

BookServiceImpl

package Service;

import dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pojo.Book;
import pojo.PageBean;
@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public PageBean<Book> findByPage(int pageCode, int pageSize) {
        return new PageBean<Book>(pageCode,pageSize,bookDao.count(),bookDao.findByPage(pageCode,pageSize));
    }
}

 

  

 

BookController

package controller;

import Service.BookService;
import com.sun.org.apache.xml.internal.resolver.readers.XCatalogReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pojo.Book;
import pojo.PageBean;
import utils.RequestPage;

@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;

    @RequestMapping("/query")
    public String findByPage(Integer page, Model model){
        page = RequestPage.getPage(page);//判断是否为空
        PageBean<Book> pageBean = bookService.findByPage(page,RequestPage.PAGE_SIZE);
        model.addAttribute("pageBean",pageBean);

        return "book";
    }


}

  

 

DateTag

package utils;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTag extends TagSupport {
    private String format="yyyy-MM-dd HH:mm:ss";
    private String color="blue";
    private String fontSize="12px";

    public void setFormat(String format) {
        this.format = format;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setFontSize(String fontSize) {
        this.fontSize = fontSize;
    }

    public int doStartTag() throws JspException {
        //自定义业务
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        String date = simpleDateFormat.format(new Date());

        String htmlshow = "<p class='' style='font-size:"+fontSize+";color:"+color+"'>"+date+"</p>";

        try {
            pageContext.getOut().print(htmlshow);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return super.doStartTag();
    }
}

 

  

PageTag

package utils;

import pojo.PageBean;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;

public class PageTag extends TagSupport {


    private PageBean pageBean;
    private String url;

    public void setUrl(String url) {
        this.url = url;
    }

    public void setPageBean(PageBean pageBean) {
        this.pageBean = pageBean;
    }

    @Override
    public int doStartTag() throws JspException {

        try {
            StringBuffer sb = new StringBuffer();
            //首页
            sb.append("<a href=\"" + url + "?page=1\">首页</a> ");
            //上一页
            if (pageBean.getPageCode() <= 1) {
                sb.append("<span style=\"color: #555;\">上一页</span> ");
            } else {
                sb.append("<a href=\"" + url + "?page=" + (pageBean.getPageCode() - 1) + "\">上一页</a> ");
            }

            //显示页码
            int begin, end;
            if (pageBean.getTotalPage() <= 10) {
                begin = 1;
                end = pageBean.getTotalPage();
            } else {
                begin = pageBean.getPageCode() - 5;
                end = pageBean.getPageCode() + 4;
                if (begin < 1) {
                    begin = 1;
                    end = 10;
                } else if (end > pageBean.getTotalPage()) {
                    begin = pageBean.getTotalPage() - 9;
                    end = pageBean.getTotalPage();
                }
            }

            for (int i = begin; i <= end; i++) {
                if (i == pageBean.getPageCode()) {
                    sb.append("<span style=\"color:red;\">" + i + "</span> ");
                } else {
                    sb.append("<a href=\"" + url + "?page=" + i + "\">[" + i + "]</a> ");
                }
            }

            //下一页
            if (pageBean.getPageCode() >= pageBean.getTotalPage()) {
                sb.append("<span style=\"color: #555;\">下一页</span>");
            } else {
                sb.append("<a href=\"" + url + "?page=" + (pageBean.getPageCode() + 1) + "\">下一页</a> ");
            }
            //尾页
            sb.append("<a href=\"" + url + "?page=" + pageBean.getTotalPage() + "\">尾页</a> \n" +
                    "    页码" + pageBean.getPageCode() + "/" + pageBean.getTotalPage());

            pageContext.getOut().print(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }

        return super.doStartTag();
    }
}

 

 

RequestPage
package utils;

public class RequestPage {
    public static final int PAGE_SIZE =5;

    public static Integer getPage(Integer page){
        if (page==null||page<1){
            page=1;
        }

        return page;
    }

}

  

datetag.tld

<?xml version="1.0" encoding="utf-8"?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>myshortname</short-name>
    <uri>http://mycompany.com</uri>

    <tag>
        <name>date</name>
        <tag-class>utils.DateTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>format</name>
            <required>false</required>
        </attribute>
        <attribute>
            <name>color</name>
            <required>false</required>
        </attribute>
        <attribute>
            <name>fontSize</name>
            <required>false</required>
        </attribute>

    </tag>
    <tag>
        <name>page</name>
        <tag-class>utils.PageTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>pageBean</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>url</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

</taglib>

 

  

 

book.jsp

 

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="z" uri="http://mycompany.com" %>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/book.css">
<html>
<head>
    <title>图书</title>
</head>
<body>
<h1 align="center">图书列表</h1>
<hr>
<table>
    <tr>
        <th>ID</th>
        <th>书名</th>
        <th>价格</th>

    </tr>
    <c:forEach var="book" items="${pageBean.pageList}">
        <tr>
            <td>${book.id}</td>
            <td>${book.bookname}</td>
            <td>${book.price}</td>
        </tr>
    </c:forEach>
</table>
<div id="page">
    <z:page url="${pageContext.request.contextPath}/book/query" pageBean="${pageBean}"></z:page>
</div>
</body>
</html>

 

  

 

运行显示

 

 

 

 

 

 

分享结束

后面我会持续分享SSM框架知识,欲知后文如何,请看下回分解

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

转载请说明出处

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,人生赢在转折处,改变从现在开始!

支持我的朋友们记得点波推荐哦,您的肯定就是我前进的动力。

 

 

Guess you like

Origin www.cnblogs.com/zyx110/p/11295044.html