如何給自己的Android應用快速搭建測試后臺?

在個人的Android開發(fā)的過程中,總會存在缺乏后臺支持的問題俗扇,因為個人開發(fā)者并不會像在公司團隊里那樣方便,有專業(yè)的后臺開發(fā)人員瓦宜。有不少初學者會選擇一些免費的第三方服務器平臺(如Bmob)筐喳,然后一般在這些平臺上都已經規(guī)定好訪問服務器的方式,開發(fā)者并不能根據自己的規(guī)范或需求去定義自己應用的訪問方式悬而,如:

來源于Bmob

同時呜舒,也因為過度包裝,初學者使用這些平臺時并不能很好地理解Http請求的過程笨奠,所以在個人開發(fā)過程中袭蝗,如果不是為了敏捷開發(fā),一般建議搭建自己的服務器般婆。

搭建自己的服務器到腥,應該說難(畢竟我們的開發(fā)工作并不是后臺開發(fā)),但也可以說不難腺兴,因為我們僅僅是將其作為我們app開發(fā)過程的測試支持左电,并不需要對框架,安全性等問題做深度的研究和探討页响,在此篇文章小編想要簡單介紹一下如何使用Servlet + MySQL快速搭建app的測試后臺:

一篓足、配置開發(fā)環(huán)境

  1. 安裝并配置Java開發(fā)環(huán)境

  2. 下載eclipse-jee-kepler-SR2-win64,解壓后打開eclipse.exe

  3. 下載tomcat闰蚕,解壓到指定目錄下栈拖,并在eclipse的Preferences中配置環(huán)境

  4. 安裝MySQL和對應的查看工具Navicat

  5. 下載mysql-connector-java(MySQL的JDBC編程驅動程序)并解壓

    mysql-connector-java解壓目錄

  6. 下載gson.jar(用于JSON數據的格式化與解析工作)并添加為工程的依賴

  7. 下載花生殼應用


    百度下載

二、初步后臺程序開發(fā)

  1. 新建一個Dynamic Web Project没陡,工程目錄如下:


    Dynamic Web Project目錄
  2. 在src目錄下新建一個Servlet類涩哟,繼承HttpServlet

public class HelloServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        // 初始化(不帶參數)
        System.out.println("init without parameters ======");
        super.init();
    }
    
    @Override
    public void init(ServletConfig config) throws ServletException {
        // 初始化(帶參數)
        System.out.println("init with parameters ======");
        super.init(config);
    }
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 調用次數跟請求次數有關
        System.out.println("service ======");
        super.service(req, resp);
    }
    
    @Override
    public void destroy() {
        
        System.out.println("destroy ======");
        super.destroy();
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // 接收程序get請求時執(zhí)行的操作
        System.out.println("doGet ======");
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // 接收程序post請求時執(zhí)行的操作
        System.out.println("doPost ======");
    }
}

Servlet生命周期分為三個階段:
1,初始化階段 —— 調用init()方法
2盼玄,響應客戶請求階段 —— 調用service()方法
3贴彼,終止階段 —— 調用destroy()方法

  1. 在web.xml中配置Servlet
  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.scnu.zhou.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/Login</url-pattern>
  </servlet-mapping>

其中url-pattern為訪問Servlet的相對路徑

  1. 運行后臺程序
    選擇工程 -》Run As -》 Run As on Server,選擇tomcat運行


  2. 查看訪問結果(控制臺輸出)

瀏覽器訪問
控制臺輸出

到這里一個初步的后臺程序已經寫好了埃儿,接下來就是接收應用的http請求器仗,并進行相應的業(yè)務或數據處理。

三、JDBC編程

  1. 添加MySQL的JDBC的驅動程序
    將mysql-connector-java(解壓后)目錄下的jar文件復制粘貼到項目的WEB-INF/lib目錄下精钮,接著選擇項目 -》右鍵 -》Properties -》Java Build Path -》Libraries -》 Add JARs威鹿,把WEB-INF/lib下的jar添加進去


  2. 新建數據庫配置文件
    選擇Java Resources -》 右鍵 -》 new -》 other -》 General -》 File,新建一個.properties文件轨香,填寫數據庫相關屬性


  • driver是JDBC驅動程序名
  • dburl是本地數據庫user表的訪問url
  • user和password分別是訪問數據庫的用戶名和密碼
  1. 編寫數據庫連接工具類
public class ConnectionFactory {

    private String driver;
    private String dburl;
    private String user;
    private String password;
    
    private Connection conn;
    
    private ConnectionFactory(){
        // 解析配置文件
        Properties prop = new Properties();
        try {
            InputStream in = ConnectionFactory.class.getClassLoader()
                    .getResourceAsStream("dbconfig.properties");
            prop.load(in);
        } catch (IOException e) {
            System.out.println("讀取配置文件出錯");
        }
        
        driver = prop.getProperty("driver");
        dburl = prop.getProperty("dburl");
        user = prop.getProperty("user");
        password = prop.getProperty("password");
    }
    
    private static class FactoryHolder{
        private static final ConnectionFactory instance = new ConnectionFactory();
    }
    
    public static ConnectionFactory getInstance(){
        
        return FactoryHolder.instance;
    }

    public Connection makeConnection(){
        // 數據庫連接
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(dburl, user, password);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
}
  1. 編寫數據庫操作類Dao(增刪改查)
public interface UserDao {
      User getUser(Connection conn, String name, String password) throws SQLException;
      void insert(Connection conn, User user) throws SQLException;
      void update(Connection conn, User user) throws SQLException;
      void delete(Connection conn, User user) throws SQLException;
}  
public class UserDaoImpl implements UserDao{

    @Override
    public User getUser(Connection conn, String name, String password) throws SQLException {
        String sql = "SELECT * FROM user WHERE name = '" + name + 
                "' AND password = '" + password + "'";
        Statement st = conn.createStatement();
        ResultSet rt = st.executeQuery(sql);
        
        if (rt.next()){
            User user = new User();
            user.setId(rt.getLong("id"));
            user.setName(rt.getString("name"));
            user.setPassword(rt.getString("password"));
            return user;
        }
        else{
            return null;
        }
    }

    @Override
    public void insert(Connection conn, User user)  throws SQLException{
        
        PreparedStatement ps = conn.prepareCall(
                "INSERT INTO user(name, password) VALUES (?, ?)");
        ps.setString(1, user.getName());
        ps.setString(2, user.getPassword());
        ps.execute();
    }

    @Override
    public void update(Connection conn, User user)  throws SQLException{
        
        PreparedStatement ps = conn.prepareCall(
                "UPDATE user SET name = ?, password = ? WHERE id = ?");
        ps.setString(1, user.getName());
        ps.setString(2, user.getPassword());
        ps.setLong(3, user.getId());
        ps.execute();
    }

    @Override
    public void delete(Connection conn, User user)  throws SQLException{
        
        PreparedStatement ps = conn.prepareCall(
                "DELETE FROM user WHERE id = ?");
        ps.setLong(1, user.getId());
        ps.execute();
    }
}

四忽你、后臺程序二次開發(fā)

以處理get請求為例,根據請求體中的name和pasword從數據庫中查詢并返回相關數據

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // 接收程序get請求時執(zhí)行的操作
        System.out.println("doGet ======");
        
        // 獲得參數
        String name = req.getParameter("name");
        String password = req.getParameter("password");
        
        try {
            Connection conn = ConnectionFactory.getInstance().makeConnection();
            // 查詢用戶數據
            UserDao dao = new UserDaoImpl();
            User user = dao.getUser(conn, name, password);
            // 返回Json數據
            PrintWriter pw = resp.getWriter();
            pw.println(new Gson().toJson(user));
            pw.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

這樣臂容,一個接口就完成了科雳,哈哈,是不是很簡單脓杉,post方法也是一樣的操作炸渡,簡單地來說,我們的應用需要后臺提供接口丽已,讓用戶對后臺的數據進行增刪改查的操作


當然用戶登錄接口可不能這樣寫,該有的安全性還是要的买决,這里只是一個簡單的例子沛婴,你get到了嗎(得意臉)

五、讓我們的移動應用使用這些接口

當然督赤,你會發(fā)現(xiàn)嘁灯,目前這些接口的使用范圍也僅限于本機(電腦),我們的移動應用(手機)上并不能訪問躲舌,也達不到測試的要求丑婿,這里有兩種解決方法,一種是直接將你的后臺部署到服務器上去(如果條件允許的話)没卸,第二種則是將自己的電腦擼成服務器(畢竟只是作為測試服務器)羹奉,下面小編主要介紹第二種方法:

  1. 下載花生殼免費版應用


    花生殼
  2. 點擊內網穿透


    內網穿透
  3. 添加映射


    添加映射

內網主機:進入網絡和共享中心-》點擊電腦當前的網絡-》進入詳細信息 -》 IPv4地址就是需要填寫的內網主機
內網端口:可任意填寫(1-65535)

然后我們就可以在外網訪問我們的接口了:

外網訪問

哈哈,有需求才有學習的動力约计,雖然本篇講的是Servlet+MySQL搭建的后臺诀拭,并沒有使用其他高效的框架,這也是我們前端應用開發(fā)者對后臺理解的第一步煤蚌,希望對大家 有所幫助耕挨。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尉桩,隨后出現(xiàn)的幾起案子筒占,更是在濱河造成了極大的恐慌,老刑警劉巖蜘犁,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翰苫,死亡現(xiàn)場離奇詭異,居然都是意外死亡沽瘦,警方通過查閱死者的電腦和手機革骨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門农尖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人良哲,你說我怎么就攤上這事盛卡。” “怎么了筑凫?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵滑沧,是天一觀的道長。 經常有香客問我巍实,道長滓技,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任棚潦,我火速辦了婚禮令漂,結果婚禮上,老公的妹妹穿的比我還像新娘丸边。我一直安慰自己叠必,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布妹窖。 她就那樣靜靜地躺著纬朝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骄呼。 梳的紋絲不亂的頭發(fā)上共苛,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音蜓萄,去河邊找鬼隅茎。 笑死,一個胖子當著我的面吹牛绕德,可吹牛的內容都是我干的患膛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耻蛇,長吁一口氣:“原來是場噩夢啊……” “哼踪蹬!你這毒婦竟也來了?” 一聲冷哼從身側響起臣咖,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤跃捣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后夺蛇,有當地人在樹林里發(fā)現(xiàn)了一具尸體疚漆,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娶聘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闻镶。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丸升,靈堂內的尸體忽然破棺而出铆农,到底是詐尸還是另有隱情,我是刑警寧澤狡耻,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布墩剖,位于F島的核電站,受9級特大地震影響夷狰,放射性物質發(fā)生泄漏岭皂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一沼头、第九天 我趴在偏房一處隱蔽的房頂上張望爷绘。 院中可真熱鬧,春花似錦进倍、人聲如沸揉阎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洞斯,卻和暖如春毡庆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烙如。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工么抗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亚铁。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓蝇刀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親徘溢。 傳聞我的和親對象是個殘疾皇子吞琐,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)然爆,斷路器站粟,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法曾雕,內部類的語法奴烙,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 本文包括傳統(tǒng)JDBC的缺點連接池原理自定義連接池開源數據庫連接池DBCP連接池C3P0連接池Tomcat內置連接池...
    廖少少閱讀 16,741評論 0 37
  • 一套完整的登陸注冊業(yè)務邏輯 準備部分基礎工具類Basepackage com.jericho.tools;impo...
    JerichoPH閱讀 2,442評論 0 9
  • 這幾天切诀,看到孩子斗志昂昂的主動學習揩环,心里是竊喜!腦海里浮現(xiàn)的是玉民一句話‘你兒子非常棒的一個孩子幅虑,因為有如此...
    徐麗紅閱讀 175評論 0 0