精华内容
下载资源
问答
  • 一、接口地址首先介绍了一个接口测试的网址,大家可以该网址测试一些简单的接口https://reqres.in通过这个图,我们能够获取这些信息2)用户展示请求方式是: Get3)接口的url 是: /api/users4)接口的响应状态码是200,...

    一、接口地址

    首先介绍了一个接口测试的网址,大家可以该网址测试一些简单的接口https://reqres.in

    通过这个图,我们能够获取这些信息

    2)用户展示请求方式是: Get

    3)接口的url 是: /api/users

    4)接口的响应状态码是200,还可以看到响应body的JSON内容。

    677d54cbbf3589e5115cdf6cbeab4d7d.png

    二、设计配置文件

    在resources下新建一个config.properties文件,文件内容如下。

    eaf4467179a8e207403b6ae5023a5ad4.png

    然后在src/main/java下新建一个包:com.qa.base,新建一个TestBase.java,这个类作为所有接口请求测试的父类,都需要继承这个父类,目前我们就写一个构造方法,实现加载读取properties文件。

    TestBase.java 代码如下:

    packagecom.qa.base;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.util.Properties;/**用于读取文件并定于状态码*/

    public classTestBase {public Properties prop;//对象

    public int RESPNSE_STATUS_CODE_200 = 200;public int RESPNSE_STATUS_CODE_201 = 201;public int RESPNSE_STATUS_CODE_404 = 404;public int RESPNSE_STATUS_CODE_500 = 500;publicTestBase(){

    prop=newProperties();try{//System.out.println(System.getProperty("user.dir"));//获取当前项目路径

    FileInputStream fis=new FileInputStream(System.getProperty("user.dir")+

    "/src/main/resources/config.properties");try{

    prop.load(fis);

    }catch(IOException e) {

    e.printStackTrace();

    }

    }catch(FileNotFoundException e) {

    e.printStackTrace();

    }

    }

    }

    三、Get请求方法代码实现

    新建一个包:com.qa.util,存放我们的工具类,然后新建一个RestClient.java文件,下面是具体代码,实现了get请求,和得到相应状态码和响应头信息,以及响应主体的json内容。

    packagecom.qa.util;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.entity.StringEntity;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;public classRestClient {//1.Get请求方法

    public CloseableHttpResponse get(String url) throwsIOException {//创建一个可以关闭的HttpClient对象

    CloseableHttpClient httpClient =HttpClients.createDefault();//创建一个HttpGet的请求对象

    HttpGet httpget = newHttpGet(url);//执行请求,相当于postman上的发送按钮,然后赋值给HttpResponse对象接收

    CloseableHttpResponse httpResponse =httpClient.execute(httpget);returnhttpResponse;

    }//2.Get方法(带请求头信息)

    public CloseableHttpResponse get(String url, HashMap headermap) throwsIOException {//创建一个可关闭的HttpClient对象

    CloseableHttpClient httpclient=HttpClients.createDefault();//创建一个HttpGet的请求对象

    HttpGet httpget=newHttpGet(url);//加载请求头到httpget对象

    for(Map.Entryentry:headermap.entrySet()){

    httpget.addHeader(entry.getKey(),entry.getValue());

    }//执行请求,相当于postman上点击发送按钮,然后赋值给HttpResonse对象接收

    CloseableHttpResponse httpResponse=httpclient.execute(httpget);returnhttpResponse;

    }

    四、Josn解析工具

    128504a624382696968023386e163c4a.png

    上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能直接去拿到里面值,需要遍历数组。 下面,我们写一个JSON解析的工具方法类,如果是像第一个红圈的JSON对象,我们直接返回对应的值,如果是需要解析类似data数组里面的json对象的值,这里我们构造方法默认解析数组第一个元素的内容。在src/main/java下新建一个包:com.qa.util,然后在新包下创建一个TestUtil.java类。

    packagecom.qa.util;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;public classJsonUtil {/***@paramresponseJson ,这个变量是拿到响应字符串通过json转换成json对象

    *@paramjpath,这个jpath指的是用户想要查询json对象的值的路径写法

    * jpath写法举例:1) per_page 2)data[1]/first_name ,data是一个json数组,[1]表示索引

    * /first_name 表示data数组下某一个元素下的json对象的名称为first_name

    *@return,返回first_name这个json对象名称对应的值*/

    //json解析方法

    public staticString getValueByJPath(JSONObject responseJson,String jpath){

    Object obj=responseJson;for(String s:jpath.split("/")){if(!s.isEmpty()){if(!(s.contains("[")||s.contains("]"))){

    obj=((JSONObject)obj).get(s);

    }else if(s.contains("[")||s.contains("]")){

    obj=((JSONArray)((JSONObject)obj).get(s.split("\\[")[0]))

    .get(Integer.parseInt(s.split("\\[")[1].replaceAll("]", "")));

    }

    }

    }returnobj.toString();

    }

    }

    简单解释下上面的代码,主要是查询两种json对象的的值,第一种最简单的,这个json对象在整个json串的第一层,例如上面截图中的per_page,这个per_page就是通过jpath这个参数传入,返回的结果就是3. 第二种jpath的查询,例如我想查询data下第一个用户信息里面的first_name的值,这个时候jpath的写法就是data[0]/first_name,查询结果应该是Eve。

    五、TestNG用例测试Get方法

    下面,我们TestNG测试用例代码如下

    importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.qa.base.TestBase;importcom.qa.util.RestClient;importcom.qa.util.JsonUtil;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.util.EntityUtils;importorg.testng.Assert;importorg.testng.annotations.BeforeClass;importorg.testng.annotations.Test;importjava.io.IOException;import java.util.*;public class GetDemo extendsTestBase {

    TestBase testBase;

    String host;

    String url;

    RestClient restClient;

    CloseableHttpResponse closeableHttpResponse;

    @BeforeClasspublic voidsetup() {

    testBase= newTestBase();

    host= prop.getProperty("GETPOST");

    url= host + "api/users";

    }//get方法带请求头

    @Test(description = "get请求成功")public void getAPITest() throwsIOException {

    restClient= newRestClient();

    restClient.get(url);

    HashMap hashMap = new HashMap();

    hashMap.put("Content-Type", "application/json");

    closeableHttpResponse=restClient.get(url, hashMap);//断言状态码

    int statusCode =closeableHttpResponse.getStatusLine().getStatusCode();

    System.out.println(statusCode);

    Assert.assertEquals(statusCode, RESPNSE_STATUS_CODE_200,"状态码不是200");//把响应内容存储在字符串对象

    String responseString = EntityUtils.toString(closeableHttpResponse.getEntity(), "UTF-8");//System.out.println(responseString);

    JSONObject responseJson =JSON.parseObject(responseString);//json内容解析

    String s = JsonUtil.getValueByJPath(responseJson, "data[0]/first_name");//断言第一个名字是否是"George"

    Assert.assertEquals(s, "George", "fiset_name is not George");

    }

    }

    展开全文
  • 员工操作页面与主页面3个公共部分相同,不同之处在于中间部分展示的是员工信息的表格显示,而主页面是一个轮播图。 下面就将实现employeePage的页面,详细代码见employeePage.jsp(即将main.jsp中的轮播部分换成...
  • 员工操作页面与主页面3个公共部分相同,不同之处在于中间部分展示的是员工信息的表格显示,而主页面是一个轮播图。 下面就将实现employeePage的页面,详细代码见employeePage.jsp(即将main.jsp中的轮播部分换成...
  • 图片上传的配置请查看文档尾部的注释,图片大小要求不能超过1M,支持jpg、png等多种格式的图片,上传成功后可在相应的展示栏进行回显。 文件上传 文件上传使用了一个开源的jQuery文件上传插件,可以在common.js...
  • Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则...
  • Spire.Cloud.SDK for Java WebAPI提供了pdfBookmarkApi接口可用于添加书签addBookmark()、更新书签updateBookmark()、获取书签信息getBookmarksInfo()、以及删除书签deleteBookmarks(),下面将通过具体操作步骤和...

    Spire.Cloud.SDK for Java WebAPI提供了pdfBookmarkApi接口可用于添加书签addBookmark()、更新书签updateBookmark()、获取书签信息getBookmarksInfo()、以及删除书签deleteBookmarks(),下面将通过具体操作步骤和Java代码示例来展示如何实现以上操作要求。

    一、导入jar文件

    创建Maven项目程序,通过maven仓库下载导入。以IDEA为例,新建Maven项目,在pom.xml文件中配置maven仓库路径,并指定spire.cloud.sdk的依赖,如下:

    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>cloud</name>
            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>
    
    <dependencies>
            <dependency>
                <groupId> cloud </groupId>
                <artifactId>spire.cloud.sdk</artifactId>
                <version>3.5.0</version>
            </dependency>
    
            <dependency>
            <groupId> com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.1</version>
            </dependency>
    
            <dependency>
                <groupId> com.squareup.okhttp</groupId>
                <artifactId>logging-interceptor</artifactId>
                <version>2.7.5</version>
            </dependency>
    
            <dependency>
                <groupId> com.squareup.okhttp </groupId>
                <artifactId>okhttp</artifactId>
                <version>2.7.5</version>
            </dependency>
    
            <dependency>
                <groupId> com.squareup.okio </groupId>
                <artifactId>okio</artifactId>
                <version>1.6.0</version>
            </dependency>
    
            <dependency>
                <groupId> io.gsonfire</groupId>
                <artifactId>gson-fire</artifactId>
                <version>1.8.0</version>
            </dependency>
    
            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>1.5.18</version>
            </dependency>
    
            <dependency>
                <groupId> org.threeten </groupId>
                <artifactId>threetenbp</artifactId>
                <version>1.3.5</version>
            </dependency>
    </dependencies>

    完成配置后,点击“Import Changes” 即可导入所有需要的jar文件。如果使用的是Eclipse,可参考这里的导入方法。

    导入结果:

    a149ce04d347698b343b4bfd58b48759.png

    二、登录冰蓝云账号,创建文件夹,上传文档。

    48d2cac3dbb7c0ab4877573fa58b5474.png

    三、创建应用程序,获取App ID及App Key。

    9af9465a95580a3b3b4aebfdd8efdf7a.png

    四、Java代码示例

    1. 添加书签

    import spire.cloud.pdf.sdk.*;
    import spire.cloud.pdf.sdk.api.PdfBookmarksApi;
    import spire.cloud.pdf.sdk.model.*;
    
    public class AddBookmark {
     //配置App账号信息
     static String appId = "App ID";
     static String appKey = "App Key";
     static String baseUrl = "https://api.e-iceblue.cn";
     static Configuration PdfConfiguration = new Configuration(appId, appKey, baseUrl);
     static PdfBookmarksApi pdfBookmarkApi = new PdfBookmarksApi(PdfConfiguration);
    
     public static void main(String[] args) throws ApiException{
            String name = "sample.pdf";//需要添加书签的PDF源文档
            String outPath = "output/AddBookmark.pdf";//结果文档路径
            String bookmarkPath = "1";//指定书签级别
    
            //创建书签,并设置书签标题、颜色、字体等等
            Bookmark bookmark = new Bookmark();
            bookmark.setTitle("testTitle");
            Color color= new Color();
            color.A(0);
            color.R(255);
            color.G(0);
            color.B(0);
            bookmark.setColor(color);
            bookmark.setPageNumber(1);//添加书签的页面
            bookmark.setBold(true);
            bookmark.setItalic(true);
            bookmark.setPageDisplay(Bookmark.PageDisplayEnum.XYZ);
            bookmark.setPageDisplayLeft(10f);
            bookmark.setPageDisplayTop(20f);
    
            String folder = "input";//源文档所在的云端文件夹
            String password = null;//源文档密码(无密码设置为null)
            String storage = null;//冰蓝云提供的2G免费存储空间
    
            //调用方法添加书签到PDF
            pdfBookmarkApi.addBookmark(name, outPath, bookmarkPath, bookmark, folder, storage, password);
        }
    }

    书签添加结果:

    6f5bab4f7f93f1fb1ba041b144d6061f.png

    2. 更新PDF中的指定书签

    import spire.cloud.pdf.sdk.*;
    import spire.cloud.pdf.sdk.api.PdfBookmarksApi;
    import spire.cloud.pdf.sdk.model.*;
    
    public class UpdateBookmark {
     //配置App账号信息
     static String appId = "App ID";
     static String appKey = "App Key";
     static String baseUrl = "https://api.e-iceblue.cn";
     static Configuration PdfConfiguration = new Configuration(appId, appKey, baseUrl);
     static PdfBookmarksApi pdfBookmarkApi = new PdfBookmarksApi(PdfConfiguration);
    
     public static void main(String[] args) throws ApiException {
            String name = "AddBookmark.pdf";//包含书签的PDF源文档
     String outPath = "output/UpdateBookmark.pdf";//指定结果文档路径
     String bookmarkPath = "1";//指定书签级别
    
            //实例化Bookmark类的对象,设置新的书签内容及格式
            Bookmark bookmark = new Bookmark();
            bookmark.title("updateTitile");
            Color color= new Color();
            color.A(0);
            color.R(0);
            color.G(0);
            color.B(255);
            bookmark.setColor(color);
            bookmark.pageNumber(1);
            bookmark.bold(false);
            bookmark.italic(false);
            bookmark.pageDisplay(Bookmark.PageDisplayEnum.XYZ);
            bookmark.pageDisplayLeft(10f);
            bookmark.pageDisplayTop(20f);
    
            String folder = "output";//源文档所在文件夹
            String storage = null;//冰蓝云提供的2G免费存储空间
            String password = null;//源文档密码
    
            //调用方法更新书签
            pdfBookmarkApi.updateBookmark(name, outPath, bookmarkPath, bookmark, folder, storage, password);
        }
    }

    书签更新结果:

    064fa6c1ee50d801e1e0927254f7d82b.png

    3. 获取书签信息

    import spire.cloud.pdf.sdk.*;
    import spire.cloud.pdf.sdk.api.PdfBookmarksApi;
    import spire.cloud.pdf.sdk.model.*;
    
    public class GetBookmarkInfo {
     //配置App账号信息
     static String appId = "App ID";
     static String appKey = "App Key";
     static String baseUrl = "https://api.e-iceblue.cn";
     static Configuration PdfConfiguration = new Configuration(appId, appKey, baseUrl);
     static PdfBookmarksApi pdfBookmarkApi = new PdfBookmarksApi(PdfConfiguration);
    
     public static void main(String[] args) throws ApiException{
            String name = "Bookmarkfile.pdf";//包含书签的PDF源文档
            String folder = "input";//源文档所在文件夹
            //String bookmarkPath = "1-1";//如果只需要获取指定书签信息,需要指定书签级别
            String storage = null;//冰蓝云提供的2G免费云存储空间
            String password = null;//源文档密码
    
            //调用方法读取所有书签信息,包括父级书签、子书签等
            Bookmarks response = pdfBookmarkApi.getBookmarksInfo(name, folder, storage, password);
            System.out.println(response);
    
            /*//获取指定级别的书签信息
            Bookmark response =pdfBookmarkApi.getBookmarkInfo(name, bookmarkPath, folder, storage, password);*/
       }
    }

    书签信息读取结果:

    fe509f1ce091a31487b584e3a160cc78.png

    4. 删除书签

    import spire.cloud.pdf.sdk.*;
    import spire.cloud.pdf.sdk.api.PdfBookmarksApi;
    
    public class DeleteBookmark {
     //配置App账号信息
     static String appId = "App ID";
     static String appKey = "App Key";
     static String baseUrl = "https://api.e-iceblue.cn";
     static Configuration PdfConfiguration = new Configuration(appId, appKey, baseUrl);
     static PdfBookmarksApi pdfBookmarkApi = new PdfBookmarksApi(PdfConfiguration);
    
     public static void main(String[] args) throws ApiException{
            String name = "AddBookmark.pdf";//PDF源文档
            String outPath = "output/DeleteBookmark.pdf";//指定结果文档路径
            //String bookmarkPath = "2-3";//如需删除子书签,需要指定书签级别
            String folder = "output";//源文档所在文件夹
            String storage = null;//冰蓝云提供的2G免费云存储空间
            String password = null;//源文档密码
    
            //调用方法删除所有书签
            pdfBookmarkApi.deleteBookmarks(name, outPath, folder, storage, password);
    
            /*//调用方法删除子书签
            pdfBookmarkApi.deleteBookmark(name, outPath, bookmarkPath, folder, storage, password);*/
     }
    }

    书签删除结果:

    bd4b16df8ede8a0b2e70852bf4e7a119.png

    (完)

    展开全文
  • restfultoolkit 展示接口 translation 翻译 codeglance 右边地图 rainbow brackets 彩色括号 backgroundimage 背景图 grep console 日志级别信息 free mybatis mapper文件快速生成 maven helper maven依赖管理 sonar...

    restfultoolkit 展示接口,并且可以测试类似postman

    translation 翻译

    codeglance 右边地图

    rainbow brackets 彩色括号

    backgroundimage 背景图

    grep console 日志级别信息

    free mybatis mapper文件快速生成

    maven helper maven依赖管理

    sonarlint 扫描代码安全问题

    gsonformat json快速根据json转换对象代码

    mybatis log plugin 打印完整的sql语句

    stack overflow 搜错误答案

    Docker 连接docker的利器,他可以部署镜像到容器自动化

    Codota 他可以帮你查找一些api的用法,解释。

    展开全文
  • Maven资源过滤设置配置application-context.xml编写数据库对应的POJO实体类和对应mapperservice接口servic接口的实现类配置web.xml实现DispatchServlet和过滤器controller信息展示页面输入信息页面获取Id的工具类...

    环境要求

    IDEA

    MySQL 5.7

    Tomcat 8.5

    Maven 3.6

    数据库环境

    • 设置一个鸭子信息的表
    create database java_11_06;
    use java_11_06;
    create table duck (
    id varchar (10) primary key ,
    name varchar (20) not null ,
    birthday timestamp not null,
    height decimal (3, 2) not null,
    weight decimal (3, 2) not null,
    food decimal (3, 2) not null
    );
    

    基本环境搭建

    1、新建一Maven项目!添加web的支持

    导入相关的pom依赖!

        <!--导包-->
        <dependencies>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.49</version>
            </dependency>
            <!-- 数据库连接池 -->
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
    
    
            <!--Servlet - JSP -->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.2</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.3</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.1.4.RELEASE</version>
            </dependency>
    
            <!--spring操作数据库的话, 需要一个连接包-->
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.1.4.RELEASE</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.4</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.1</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.20</version>
                <scope>provided</scope>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.8</version>
            </dependency>
    
    
        </dependencies>
    

    Maven资源过滤设置

     <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
            </resources>
    

    配置application-context.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:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <!--配置mybatis-->
        <!--导入数据配置-->
        <context:property-placeholder location="classpath:database.properties"/>
        <!--配置DataSource-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>
        <!--sqlSession配置-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
        </bean>
        <!--配置自动扫描生成对应接口的mapper并且注入到spring中-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            <!--配置扫描mapper借口-->
            <property name="basePackage" value="com.duck.dao"/>
        </bean>
    
        <!--配置service-->
        <context:component-scan base-package="com.duck.service"/>
        <!--将serviceImpl注入到spring中-->
        <bean id="duckService" class="com.duck.service.DuckServiceImpl">
            <property name="duckMapper" ref="duckMapper"/>
        </bean>
        <!--配置事务-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        <!--结合AOP的思想为被代理类实现事务的支持-->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <!--配置具体切入点需要事务通知 * 表示所用方法-->
            <tx:attributes>
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>
        <!--配置事务的切入, 也就是配置通知和切入点的连接-->
        <aop:config >
            <aop:pointcut id="pointcut" expression="execution(* com.duck.service.DuckServiceImpl.*(..))"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
        </aop:config>
    
    
        <!--SpringMVC配置-->
        <!--开启mvc注解支持-->
        <mvc:annotation-driven/>
        <!--静态资源过滤-->
        <mvc:default-servlet-handler/>
        <!--扫描包-->
        <context:component-scan base-package="com.duck.controller"/>
        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    
    </beans>
    
    • mybatis配置mybatis-config.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <!--开启日志-->
        <settings>
            <setting name="logImpl" value="STDOUT_LOGGING"/>
        </settings>
    
        <!--配置别名-->
        <typeAliases>
            <package name="com.duck.pojo"/>
        </typeAliases>
    
        <!--连接映射文件-->
        <mappers>
           <package name="com.duck.dao"/>
        </mappers>
    
    </configuration>
    
    • DataSourc信息配置database.properties
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/java_11_06?useSSL=true&useUnicode=true&characterEncoding=utf8
    jdbc.username=root
    jdbc.password=listen
    

    编写数据库对应的POJO实体类和对应mapper

    • pojo实体类
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Duck {
    
        private String id;
        private String name;
        private Timestamp birthday;
        private BigDecimal height;
        private BigDecimal weight;
        private BigDecimal food;
    }
    
    • pojo的dao操作接口
    public interface DuckMapper {
    
        List<Duck> select();
        int insert(Duck duck);
        int update(Duck duck);
        int delete(@Param("id") String id);
        List<Duck> selectByLike(String keyWords);
        List<Duck> selectByRange(Map<String ,Object> map);
        Duck selectOne(@Param("id") String id);
    }
    
    • 接口对应的mapper.xml映射文件
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.duck.dao.DuckMapper">
        <select id="select" resultType="duck">
            select * from duck;
        </select>
        <insert id="insert" parameterType="duck">
            insert into duck
            values (#{id}, #{name}, #{birthday}, #{height}, #{weight}, #{food})
        </insert>
    
        <update id="update" parameterType="duck">
            update duck
            <set>
                <if test="name != null">
                    name=#{name},
                </if>
                <if test="height != null">
                    height=#{height},
                </if>
                <if test="weight != null">
                    weight=#{weight},
                </if>
                <if test="food != null">
                    food=#{food}
                </if>
            </set>
            where id=#{id}
        </update>
    
        <delete id="delete" parameterType="string">
            delete from duck where id=#{id};
        </delete>
    
        <select id="selectByLike" parameterType="string" resultType="duck">
            select * from duck where name like #{keyWords}
        </select>
    
        <select id="selectByRange" parameterType="map" resultType="duck">
            select * from duck
            <where>
               <if test="minHeight != null">
                   height &gt; #{minHeight}
               </if>
               <if test="maxHeight != null">
                   and height &lt; #{maxHeight}
               </if>
                <if test="minWeight != null">
                   and weight &gt; #{minWeight}
                </if>
                <if test="maxWeight != null">
                    and weight &lt; #{maxWeight}
                </if>
            </where>
        </select>
    
        <select id="selectOne" resultType="duck" parameterType="string">
            select * from duck where id=#{id};
        </select>
    </mapper>
    

    service接口

    public interface DuckService {
    
        List<Duck> select();
        int insert(Duck duck);
        int update(Duck duck);
        int delete(String id);
        List<Duck> selectByLike(String keyWords);
        List<Duck> selectByRange(Map<String ,Object> map);
        Duck selectOne(String id);
    }
    

    servic接口的实现类

    public class DuckServiceImpl implements DuckService {
    
        private DuckMapper duckMapper;
    
        public void setDuckMapper(DuckMapper duckMapper) {
            this.duckMapper = duckMapper;
        }
    
        public List<Duck> select() {
            return duckMapper.select();
        }
    
        public int insert(Duck duck) {
            return duckMapper.insert(duck);
        }
    
        public int update(Duck duck) {
            return duckMapper.update(duck);
        }
    
        public int delete(String id) {
            return duckMapper.delete(id);
        }
    
        public List<Duck> selectByLike(String keyWords) {
            return duckMapper.selectByLike(keyWords);
        }
    
        public List<Duck> selectByRange(Map<String, Object> map) {
            return duckMapper.selectByRange(map);
        }
    
        public Duck selectOne(String id) {
            return duckMapper.selectOne(id);
        }
    }
    
    

    配置web.xml实现DispatchServlet和过滤器

    <?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">
        
        <!--配置DispatchServlet-->
        <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:application-context.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>
        <!--配置编码过滤器-->
        <filter>
            <filter-name>encooding</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>
        </filter>
        <filter-mapping>
            <filter-name>encooding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
    </web-app>
    

    controller

    package com.duck.controller;
    
    import com.duck.pojo.Duck;
    import com.duck.service.DuckService;
    import com.duck.util.IDUtil;
    import com.duck.util.Time;
    import org.springframework.beans.factory.annotation.Qualifier;
    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 javax.servlet.http.HttpServletRequest;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * Created with IntelliJ IDEA.
     * Description: If you don't work hard, you will a loser.
     * User: Listen-Y.
     * Date: 2020-11-06
     * Time: 14:44
     */
    
    @Controller
    @RequestMapping("/duck")
    public class DuckController {
    
        private final DuckService duckService;
    
        public DuckController(@Qualifier("duckService") DuckService duckService) {
            this.duckService = duckService;
        }
    
        //展示所有鸭子
        @RequestMapping("/all")
        public String getAllDuck(Model model) {
            List<Duck> list = duckService.select();
            model.addAttribute("list", list);
            return "allDuck";
        }
    
        //删除鸭子
        @RequestMapping("/delete")
        public String delete(String duckID) {
            duckService.delete(duckID);
            return "redirect:/duck/all";
        }
    
        //修改鸭子
        @RequestMapping("/update/{duckID}/{key}")
        public String update(Duck duck, @PathVariable String duckID, @PathVariable int key, Model model) {
            if (key == 1) {
                Duck duck1 = duckService.selectOne(duckID);
                model.addAttribute("duck", duck1);
                return "updateDuck";
            }
            duckService.update(duck);
            return "redirect:/duck/all";
        }
    
        //模糊查找鸭子
        @RequestMapping("/like")
        public String like(String keyWords, Model model) {
            List<Duck> list = duckService.selectByLike("%" + keyWords + "%");
            if (list.size() == 0) {
                model.addAttribute("ERROR", "未找到");
            } else {
                model.addAttribute("list", list);
            }
            return "allDuck";
        }
    
        //增加一个鸭子
        @RequestMapping("/add/{key}")
        public String add(Duck duck, @PathVariable int key) {
            if ( key == 1) {
                //只需进行跳转
                return "addDuck";
            }
            duck.setId(IDUtil.getID());
            duck.setBirthday(Time.getTime());
            duckService.insert(duck);
            return "redirect:/duck/all";
        }
    
        //范围查找鸭子
        @RequestMapping("/range/{key}")
        public String range(@PathVariable int key, HttpServletRequest request, Model model) {
            if (key == 1) {
                return "range";
            } else {
                String minHeight = request.getParameter("minHeight");
                String maxHeight = request.getParameter("maxHeight");
                String minWeight = request.getParameter("minWeight");
                String maxWeight = request.getParameter("maxWeight");
                System.out.println("***" + minHeight + "," + maxHeight + "," + minWeight + "," + maxWeight);
                Map<String, Object> map = new HashMap<String, Object>();
                if (!(minHeight == null) && !minHeight.equals("")) {
                    map.put("minHeight", minHeight);
                }
                if (!(maxHeight == null) && !maxHeight.equals("")) {
                    map.put("maxHeight", maxHeight);
                }
                if (!(minWeight == null) && !minWeight.equals("")) {
                    map.put("minWeight", minWeight);
                }
                if (!(maxWeight == null) && !maxWeight.equals("")) {
                    map.put("maxWeight", maxWeight);
                }
    
                List<Duck> list = duckService.selectByRange(map);
                model.addAttribute("list", list);
                return "allDuck";
            }
        }
    
    
    }
    
    

    信息展示页面

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%--
      Created by IntelliJ IDEA.
      User: Huawei
      Date: 2020/11/6
      Time: 14:48
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>黑天鹅</title>
    
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    
    <div class="container">
    
        <div class="row clearfix">
            <div class="col-md-12 column">
                <div class="page-header"></div>
                <h1>
                    <small>黑天鹅</small>
                </h1>
            </div>
        </div>
    
        <div class="row clearfix">
            <div class="col-md-12 column">
                <div class="btn-group" role="group" aria-label="...">
                    <button type="button" class="btn btn-default">
                        <a href="${pageContext.request.contextPath}/duck/add/1" class="text-decoration: none">添加黑天鹅</a>
                    </button>
                </div>
                <div class="btn-group" role="group" aria-label="...">
                    <button type="button" class="btn btn-default">
                        <a href="${pageContext.request.contextPath}/duck/range/1" class="text-decoration: none">条件查找</a>
                    </button>
                </div>
                <div class="col-lg-6">
                    <form class="form-inline" action="${pageContext.request.contextPath}/duck/like" method="post">
                        <div class="form-group">
                            <label>
                                <input type="text" name="keyWords" class="form-control"  placeholder="输入要查询的名字">
                            </label>
                        </div>
                        <div class="form-group">
                            <input type="submit" class="form-control" value="查询">
                        </div>
                        <span class="form-group" style="color: red; font-weight: bold">${ERROR}</span>
                    </form>
                </div>
                <table class="table table-hover table-striped">
                    <thead>
                    <th>编号</th>
                    <th>名称</th>
                    <th>入校日期</th>
                    <th>身高</th>
                    <th>体重</th>
                    <th>饭量</th>
                    <th>操作</th>
                    </thead>
                    <tbody>
                    <c:forEach var="duck" items="${list}">
                        <tr> <td>${duck.id}</td>
                            <td>${duck.name}</td>
                            <td>${duck.birthday}</td>
                            <td>${duck.height}</td>
                            <td>${duck.weight}</td>
                            <td>${duck.food}</td>
                            <td><a href="${pageContext.request.contextPath}/duck/update/${duck.id}/1"
                                   class="btn btn-default">修改</a>
                                |
                                <a href="${pageContext.request.contextPath}/duck/delete?duckID=${duck.id}"
                                   class="btn btn-default">删除</a>
                            </td>
                        </tr>
                    </c:forEach>
                    </tbody>
                </table>
            </div>
        </div>
    
    </div>
    
    </body>
    </html>
    
    

    输入信息页面

    <%--
      Created by IntelliJ IDEA.
      User: Huawei
      Date: 2020/11/6
      Time: 15:45
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>添加黑天鹅</title>
    
        <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
        <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <div class="container">
        <div class="row clearfix">
            <form action="${pageContext.request.contextPath}/duck/add/2" method="post">
                <div class="input-group">
                    <span class="input-group-addon" >名称</span>
                    <input type="text" class="form-control" name="name" placeholder="" aria-describedby="basic-addon1">
                </div>
                <div class="input-group">
                    <span class="input-group-addon" >身高</span>
                    <input type="text" class="form-control" name="height" placeholder="单位米" aria-describedby="basic-addon1">
                </div>
                <div class="input-group">
                    <span class="input-group-addon" >体重</span>
                    <input type="text" class="form-control" name="weight" placeholder="单位KG" aria-describedby="basic-addon1">
                </div>
                <div class="input-group">
                    <span class="input-group-addon">饭量</span>
                    <input type="text" class="form-control" name="food" placeholder="单位KG" aria-describedby="basic-addon1">
                </div>
                <div class="input-group">
                    <input type="submit" class="form-control" value="提交" aria-describedby="basic-addon1">
                </div>
            </form>
        </div>
    </div>
    </body>
    </html>
    
    

    获取Id的工具类

    public class IDUtil {
    
        public static String getID() {
            String s = UUID.randomUUID().toString().replaceAll("-", "");
            return s.substring(0, s.length() / 4);
        }
    }
    

    获取Timestamp的工具类

    public class Time {
    
        public static Timestamp getTime() {
            return new Timestamp(new Date().getTime());
        }
    }
    
    展开全文
  • 套餐列表页面动态展示3.1 完善页面3.1.1 展示套餐信息3.1.2 获取套餐列表数据3.2 后台代码3.2.1 Controller3.2.2 服务接口3.2.3 服务实现类3.2.4 Dao接口3.2.5 Mapper映射文件4. 套餐详情页面动态展示4.1 完善页面...
  • 利用天气预报接口,把获取的json信息,封装再用前端页面展示。 开发环境: Eclipse,JDK10,Redis,Maven, 天气预报接口:http://wthrcdn.etouch.cn/weather_mini? 城市id的xml文件(resource目录下): <?xml ...
  • 页面展示 项目地址 首页展示 个人信息 标签 创作页面 博文查看页面 项目需求 功能需求 编写博文(仅对网站管理员开放) 个人介绍 访客注册登录 根据标签分类博文 用户评论博文 用户留言板 安装部署 ...
  • SpringBoot项目实战总结

    2020-12-16 11:50:35
    1.项目信息 项目模板地址 项目结构 项目运行 2.特殊功能与实现 日志记录功能 单点登录问题 Redis Session问题 消息管理模块 意见反馈模块 登录失败锁定功能 初始化时接口定义...
  • Spire.Cloud.SDK for Java WebAPI提供了pdfBookmarkApi接口可用于添加书签addBookmark()、更新书签updateBookmark()、获取书签信息getBookmarksInfo()、以及删除书签deleteBookmarks(),下面将通过具体操作步骤和...
  • 鲜花的展示(这个主要 是用到了webservice技术来调用了一组的鲜花展示接口,关于webservice的技术我还在练习阶段,并没有很深的研究,我在使用的过程中也遇到了一点小问题,不过最终还是被克服了,1.先是加入...
  • :pushpin:规则引擎 :pushpin: ...规则配置信息展示 配置完成后我们就可以调用接口来执行引擎中的规则了 POST http://ruleserver.cn/ruleEngine/generalRule/execute Content-Type: application/json {
  • 其他涉及到的中间件包括Redis,ActiveMQ,阿里云OSS,视频点播业务中使用了ECharts做图表展示,使用POI完成用户信息批量上传,注册分布式单点登录使用了JWT (2)项目前初步分离开发,引入采用SpringCloud微服务...
  • ERP_day11_CXF框架_红日物流BOS系统_ERP物流信息管理 ERP_day12_Easyui--Thee插件_权限管理_权限菜单_用户角色权限 ERP_day14_Shoir颗粒认证-redis缓存机制提升软件性能_svn协作开发 ERP_day15项目展示 13-...
  • excel下载:自定义sql导出excel、也可在页面展示sql结果数据 字典管理:一些常量字典的维护 个人信息修改 修改密码 头像修改 其他说明: 日志模块 sl4j日志分包:将sql日志、业务日志、异常日志进行了分离,...
  • 商品基本信息展示.avi │ 10.商品描述展示.avi │ 11.规格参数展示.avi │ 淘淘商城第九天笔记.doc │ ├─10.第十天(单点登录系统实现) │ │ 01. 参考资料.rar │ │ │ ├─02.教案 │ │ ...
  • 若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功 必要配置 1、修改数据库连接 编辑resources目录下的application-druid.yml url: 服务器地址 username: 账号 password: 密码 2、开发...
  • 1.分页展示文章信息 2.可对文章进行再编辑以及删除文章 发布文章 1.使用markdown编辑器,支持插入代码,插入图片等功能 2.文章可选择分类和标签,以及转载文章支持链接原作者文章 分类管理,支持增加、删除、...
  • 修改各dao模块和rpc-service模块的redis.properties、jdbc.properties、generator.properties数据库连接等配置信息,其中master.redis.password、master.jdbc.password、slave.jdbc.password、generator.jdbc....
  • 单点登录源码

    2018-01-09 20:56:08
    Maven | 项目构建管理 | [http://maven.apache.org/](http://maven.apache.org/) #### 前端技术: 技术 | 名称 | 官网 ----|------|---- jQuery | 函式库 | [http://jquery.com/](http://jquery.com/) Bootstrap | ...
  • (1)使用 Maven 作为构建管理和依赖管理工具。 (2)使用 SpringMVC 作为 Web 层框架。 ①普通请求:返回响应体通常为一个页面(Admin数据) ②Ajax 请求:返回响应体通常为一个 JSON 数据(Role数据) 针对...
  • 版本管理工具:Maven 版本控制工具:GitHub 3.2 实现过程 3.2.1 商品首页实现 其他部分实现效果 3.2.2 二手商城实现 商城商品展示 3.2.3 商品详情实现 留言 3.2.4 站内搜索引擎实现 搜索结果 ...
  • 修改数据库配置,redis配置,等待Maven下载依赖 启动backend项目 前端 安装node.js 切换到frontend文件夹下 # 安装yarn npm install -g yarn # 下载依赖 yarn install # 启动 yarn start 功能模块 ├...
  • cms后台管理系统

    2018-07-22 15:32:57
    2. 分层设计:(数据库层,数据访问层,业务逻辑层,展示层)层次清楚,低耦合,各层必须通过接口才能接入并进行参数校验(如:在展示层不可直接操作数据库),保证数据操作的安全。 3. 双重验证:用户表单提交双...
  • 项目展示 地址:https://smallsnail-wh.github.io 用户名:admin 密码:admin (第一次打开可能会有点慢) 技术栈 spring boot mybatis Spring Security Spring Security OAuth2 Redis 接口设计: RESTful 认证...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

maven展示接口信息