python爬蟲(chóng)+JavaWeb接口+Android完整的小項(xiàng)目開(kāi)發(fā)案例(2)

上一篇講了python 爬取糗事百科的數(shù)據(jù)到數(shù)據(jù)庫(kù)中,本篇講解java web接口開(kāi)發(fā),以json的形式展示接口

準(zhǔn)備:java 環(huán)境蝎抽,tomcat環(huán)境,eclipse路克,eclipse集成tomcat ,json.jar,mysql-connect-java .jar

eclipse新建Dynamic web project,目錄層級(jí)如下:


image.png

將jar包復(fù)制到lib目錄下樟结,然后add build to path

下面詳述代碼:

1.創(chuàng)建糗事百科實(shí)體類Qiushibaike

package com.entity;

public class Qiushibaike {
    private int id;
    private String imgurl;
    private String username;
    private String vote;
    private String comments;
    private String content;
    private String imgpath;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getImgurl() {
        return imgurl;
    }
    public void setImgurl(String imgurl) {
        this.imgurl = imgurl;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getVote() {
        return vote;
    }
    public void setVote(String vote) {
        this.vote = vote;
    }
    public String getComments() {
        return comments;
    }
    public void setComments(String comments) {
        this.comments = comments;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getImgpath() {
        return imgpath;
    }
    public void setImgpath(String imgpath) {
        this.imgpath = imgpath;
    }
    
    

}

2.寫(xiě)一個(gè)分頁(yè)實(shí)體類QiushiPage:

package com.entity;

import java.util.List;

public class QiushiPage {
     private int currentPage;//當(dāng)前頁(yè)
        private int totalPage;//總頁(yè)數(shù)
        private int count;//一頁(yè)多少條數(shù)據(jù)
        private int totalCount;//數(shù)據(jù)總條數(shù)
        private List<Qiushibaike> qiushibaikes;//當(dāng)前頁(yè)的數(shù)據(jù)
       
        
        public int getTotalCount() {
            return totalCount;
        }
        public void setTotalCount(int totalCount) {
            this.totalCount = totalCount;
        }
        
        public List<Qiushibaike> getQiushibaikes() {
            return qiushibaikes;
        }
        public void setQiushibaikes(List<Qiushibaike> qiushibaikes) {
            this.qiushibaikes = qiushibaikes;
        }
        public int getCurrentPage() {
            return currentPage;
        }
        public void setCurrentPage(int currentPage) {
            this.currentPage = currentPage;
        }
        public int getTotalPage() {
            return totalPage;
        }
        public void setTotalPage(int totalPage) {
            this.totalPage = totalPage;
        }
        public int getCount() {
            return count;
        }
        public void setCount(int count) {
            this.count = count;
        }
        
        
}

3.數(shù)據(jù)庫(kù)操作類QiushiDaoImpl:

package com.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.entity.Qiushibaike;


public class QiushiDaoImpl  {
    private PreparedStatement ptmt = null;  
    private ResultSet rs = null;
    
    //獲取表中的數(shù)據(jù)精算,放入list,并返回
    public List<Qiushibaike> getCaseAll(int page, int count) {
        // TODO Auto-generated method stub
        List<Qiushibaike> list = new ArrayList<Qiushibaike>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/shop?useunicuee=true& characterEncoding=utf8";
            String username="root";
            String password="root";
            Connection conn=DriverManager.getConnection(url,username,password);
            String sql="select id,imgurl,comments,username,content,vote,imgpath from qiushibaike LIMIT ?,?";
            PreparedStatement ps = conn.prepareStatement(sql);
            
            
            ps.setInt(1, (page-1)*count);
            ps.setInt(2, count);
            
            ResultSet rs=ps.executeQuery();
            
            //查詢實(shí)體放入list
            while(rs.next()){
                Qiushibaike qiushibaike=new Qiushibaike();
                
                //查詢的每個(gè)字段值放入到實(shí)體中
                qiushibaike.setId(rs.getInt("id"));
                qiushibaike.setImgurl(rs.getString("imgurl"));
                qiushibaike.setComments(rs.getString("comments"));
                qiushibaike.setUsername(rs.getString("username"));
                qiushibaike.setContent(rs.getString("content"));
                qiushibaike.setVote(rs.getString("vote"));
                qiushibaike.setImgpath(rs.getString("imgpath"));
                
                list.add(qiushibaike);
            }
            rs.close();
            ps.close();
            conn.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
        
    }
    
    //查詢表中的記錄數(shù)瓢宦,并返回
    public int count() throws SQLException {
        int count = 0;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/test?useunicuee=true& characterEncoding=utf8";
            String username="root";
            String password="root";
            Connection conn=DriverManager.getConnection(url,username,password);
            if(conn==null){
                throw new NullPointerException("conn is null");
            }
            PreparedStatement ps = conn.prepareStatement("SELECT COUNT(*) FROM qiushibaike");
            if(ps==null){
                throw new NullPointerException("ps is null");
            }
            ResultSet rs = ps.executeQuery();

            if(rs==null){
                throw new NullPointerException("rs is null");
            }   
            
            if (rs.next()) {
                count = rs.getInt(1);
            }

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return count;
        
    }

}

4.數(shù)據(jù)分頁(yè)類QiushiServiceImpl:

package com.dao;

import java.sql.SQLException;
import java.util.List;


import com.entity.QiushiPage;
import com.entity.Qiushibaike;


public class QiushiServiceImpl {
    
     private QiushiDaoImpl qiushiDaoImpl = new QiushiDaoImpl();

        
        public QiushiPage findPage(int page, int count) {
            if(qiushiDaoImpl==null){
                qiushiDaoImpl = new QiushiDaoImpl();
            }
            try {
                List<Qiushibaike> qiushibaikes = qiushiDaoImpl.getCaseAll(page, count);
                System.out.println(qiushibaikes);
                int totle = qiushiDaoImpl.count();
                System.out.println(totle);
                QiushiPage p=new QiushiPage();
                
                p.setQiushibaikes(qiushibaikes);;
                p.setCurrentPage(page);
                p.setCount(count);
                p.setTotalCount(totle);
                int totlePage = totle%count==0?totle/count:(totle/count)+1;
                p.setTotalPage(totlePage);
                return p;
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }

}

5.servlet類QiushiServlet:

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.QiushiDaoImpl;
import com.dao.QiushiServiceImpl;

import com.entity.QiushiPage;
import com.entity.Qiushibaike;

import com.google.gson.Gson;




/**
 * Servlet implementation class TestAdd
 */
public class QiushiServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public QiushiServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        QiushiServiceImpl qiushiServiceImpl=new QiushiServiceImpl();
        int currentPage=1;
        //每一頁(yè)15條數(shù)據(jù)
        int count=15;
        String value = request.getParameter("page");
        if(value!=null&&!"".equals(value)){         
            currentPage = Integer.parseInt(value);
        }

        //轉(zhuǎn)化成json
        QiushiPage page  = qiushiServiceImpl.findPage(currentPage, count);
        Gson gson = new Gson();
        String json = gson.toJson(page);

        // 輸出到界面
        System.out.println(json);
        //response.setCharacterEncoding("utf-8");
        response.setContentType("text/json;charset=utf-8");  
             
        
        //PrintWriter out = response.getWriter();
        
        
               PrintWriter out = new PrintWriter(response.getWriter());
        out.print(json); 
        out.flush();
        
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

6.WEB-INF 目錄下新建一個(gè)xml文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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_2_5.xsd" version="2.5">
  <display-name></display-name>
 
<servlet>
    <servlet-name>QiushiServlet</servlet-name>
    <servlet-class>com.servlet.QiushiServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>QiushiServlet</servlet-name>
    <url-pattern>/QiushiServlet</url-pattern>
  </servlet-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

7.WebContent下新建一個(gè)jsp文件:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>首頁(yè)</title>
</head>
<body>
 <a href = "QiushiServlet">點(diǎn)擊接口</a><br>
 
</body>
</html>

代碼部分就是這樣,附上代碼結(jié)構(gòu)圖:


image.png

最有右擊項(xiàng)目灰羽,run on server結(jié)果如圖


image.png

點(diǎn)擊上圖的按鈕跳轉(zhuǎn)到接口界面:


image.png

需要訪問(wèn)第二頁(yè)時(shí)輸入如下網(wǎng)址驮履,page后面的數(shù)字表示頁(yè)數(shù):
http://localhost:8080/QiuShiSample/QiushiServlet?page=2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鱼辙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玫镐,更是在濱河造成了極大的恐慌倒戏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恐似,死亡現(xiàn)場(chǎng)離奇詭異杜跷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蹂喻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門葱椭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人口四,你說(shuō)我怎么就攤上這事孵运。” “怎么了蔓彩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵治笨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赤嚼,道長(zhǎng)旷赖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任更卒,我火速辦了婚禮等孵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹂空。我一直安慰自己俯萌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布上枕。 她就那樣靜靜地躺著咐熙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辨萍。 梳的紋絲不亂的頭發(fā)上棋恼,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音锈玉,去河邊找鬼爪飘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拉背,可吹牛的內(nèi)容都是我干的悦施。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼去团,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起土陪,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昼汗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鬼雀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體顷窒,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年源哩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鞋吉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡励烦,死狀恐怖谓着,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坛掠,我是刑警寧澤赊锚,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站屉栓,受9級(jí)特大地震影響舷蒲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜友多,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一牲平、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧域滥,春花似錦纵柿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至酬土,卻和暖如春荆忍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撤缴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工刹枉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屈呕。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓微宝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親虎眨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蟋软,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容