Servlet:从入门到实战学习(3)—Servlet实例【图文】

本篇通过图像和文字实例给我们详细讲述怎么样建立贰个Servlet,配置好运转条件并打响总是到MYSQL的数据库,举办数据的查询展现。

 

1.类型创制:IDEA -> Create New Project

Android Testing学习02 HelloTesting 项目确立与执行

 

  Android测试,分为待测试的档次和测试项目,那多少个种类会转变四个独立的apk,不过个中,它们会共享同3个历程。

   下边,新建一个Android待测试的门类,即一般的Android工程,那里起名为:MainProject

 

图片 1

新建测试工程

  再建三个测试项目,叫MainProjectTest,对MainProject进行测试。

  能够间接右键New->Project…->Android Test
Project:

 图片 2

 

  项目名起为:MainProjectTest

  点击Next,选用要测试的档次为待测试的档次,那里即为MainProject。

  选拔好后,测试项目就确立成功了。

图片 3

 

 

 

 

IDE帮咱们做了什么?

  测试项目即便创立成功了,然则IDE帮大家做了什么样啊?

  首先,相比明确的是生成了相应的包名,在原先的包名后加了.test:

  com.shengqishiwind.myproject.test

  其次,打开测试项目的AndroidManifest.xml

图片 4图片 5

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.shengqishiwind.myproject.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.shengqishiwind.myproject" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

AndroidManifest.xml

 

  解释标注如下:

图片 6

 

 

 

  尾数变动,右键MainProjectTest项目,Properties->Java
Build
Path->Projects
,能够看来曾经投入了MainProject,引入了被测试工程,就此测试工程得以访问被测试工程的类

图片 7

 

2.增选Project
SDK(本人装的JDK版本,系统没提示的话本人选拔JDK目录),下个界面友好挑选工程存款和储蓄目录和工程名,小编起名为德姆oServlet

成立测试

  成立测试如故能够一贯运用IDE:

  在测试项目标包上右键->New->JUnit Test
Case
:

   创造如下:

图片 8

 

 

  点击Next,能够挑选生成一些措施,到时候根据必要接纳吗。

图片 9

  生成的测试类代码如下,加上了print语句:

package com.shengqishiwind.myproject.test;

import junit.framework.TestCase;

public class MyFirstTest extends TestCase
{

    public MyFirstTest(String name)
    {
        super(name);
        System.out.println("MyFirstTest");
    }

    protected void setUp() throws Exception
    {
        super.setUp();
        System.out.println("setUp()");
    }

    protected void tearDown() throws Exception
    {
        super.tearDown();
        System.out.println("tearDown()");
    }

    public void testSomething()
    {
        System.out.println("testSomething()");
        fail("Not implemented yet");

    }

}

 

 

  因为单元测试框架是基于JUnit
3的,所以艺术须要以test开始。

  那里插一段:

  在JUnit
3.第88中学,测试方法须要满足如下原则:

  1.public的。

  2.void的。

  3.无方法参数。

  4.办法名称必须以test先河。
(它经过反射找出全体办法,然后找出以test先河的法子)。

 

图片 10 

运营测试

  1.最简易的法门:运营具有测试:

  右键测试项目Run As ->Android JUnit
Test

  这样将运转项目中保有的测试。

  2.运作一些test
case:

  右键项目:Run As -> Run
Configurations,然后在里面选用Run a single test.

  这里看到也能够自行选购一些test
case来二头运营。

  运转后的结果在左手的JUnit小窗口中显得,LogCat中也有有关呈现。

 

  3.由此命令行来运营测试

  先adb
shell之后就足以经过如下命令行命令来运维测试:

  测试结果只可以从LogCat中查阅了。

 

  **am instrument
[flags] <COMPONENT>**

  -r: print raw results (otherwise decode
REPORT_KEY_STREAMRESULT)

  -e <NAME> <VALUE>: set
argument <NAME> to <VALUE>

  -p <FILE>: write profiling data
to <FILE>

  -w: wait for instrumentation to finish
before returning

 

  关于命令参数的越来越多,能够查看:http://developer.android.com/tools/testing/testing_otheride.html

  和 http://developer.android.com/reference/android/test/InstrumentationTestRunner.html

 

 

 

3.打听了文件目录,我们继承往下安插,菜单栏 ->run -> 艾德it
Configurations 下展开布局

参考资料

  《Android Application Testing
Guide》

  Android Testing官网链接:

  http://developer.android.com/tools/testing/index.html

  http://developer.android.com/tools/testing/activity_test.html

  http://developer.android.com/tools/testing/testing_otheride.html

  Testing Fundamentals

  http://developer.android.com/tools/testing/testing_android.html

  AndroidTestCase

  http://developer.android.com/reference/android/test/AndroidTestCase.html

  ViewAsserts

  http://developer.android.com/reference/android/test/ViewAsserts.html

  MoreAsserts

  http://developer.android.com/reference/android/test/MoreAsserts.html

  正则表明式:

  http://developer.android.com/reference/java/util/regex/package-summary.html

 

  InstrumentationTestRunner文书档案,当中有命令行运转测试相关:

  http://developer.android.com/reference/android/test/InstrumentationTestRunner.html

 

  关于JUnit
3的根基,本博客在此之前有文:

  http://www.cnblogs.com/mengdd/archive/2013/03/26/2983565.html

 

  

  博客:

  http://mintelong.iteye.com/blog/460903

  http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/

 

 

图片 11

 

4.跻身后点击左上角+号(注意不要挑选default),添加 tomcat
 server->local ,配置
修改name,作者那边改为了tomcat;然后Deployment里能够加个war包,点击OK

图片 12

图片 13

 

5.布局完结之后,采用菜单栏->file->project structure
,来添加一些我们须要的包

图片 14

 

6.增选Modules-> Dependencies 点击上面+号 添加
如图所示的多少个包,第3个(含jsp-api和servlet-api)能够在
tomcat的解压文件夹的\lib里导入,第一个大家能够去下载下,是连接mysql的包,附上下载地址:

http://download.csdn.net/detail/oyuntaolianwu/5822697

只顾:一定要悬赏Export,不然恐怕会报错连接不上数据库

图片 15

 

 

7.布局达成之后,新建大家的Servlet,选中Servlet文件夹-> 右键-> new
->Servlet,作者的命名为:Servlet 和文书夹名保持一致。

图片 16

 

8.IDEA里自带简单的数据库管理工科具,在视图的最右侧能够找到,Database,那里我们选用添加
Data Sourse -> MySQL 

图片 17

 

9.这边我们要去团结的MYSQL里创建Database和User,工具为MYSQL Workbench
或许Sequel Pro,建立了后可在IDEA里点Test
Connection测试是不是能够得逞总是。
IDEA里能够延续了数据库未来落成建表和添加数据,点开IDEA里的操纵界面执行建表以及数额插入语句:

图片 18

图片 19

图片 20

CREATE TABLE `websites` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
  `url` varchar(255) NOT NULL DEFAULT '',
  `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
  `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'),
  ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'),
  ('4', '微博', 'http://weibo.com/', '20', 'CN'),
  ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');

 

10.数据库的表和数据建好以后,我们编辑Servlet,写1个粗略连接自身树立的mysqlCurry的一个表的例证,

图片 21

 

package Servlet;

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 java.sql.*;
import java.io.*;

/**
 * Created by weber on 2017/4/20.
 */
@WebServlet("/Servlet")
public class Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    // JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false";

    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "weber";
    static final String PASS = "123456";
    protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        doGet(request, response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

        Connection conn = null;
        Statement stmt = null;
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String title = "Servlet Mysql 测试";
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n");

        try{
            // 注册 JDBC 驱动器
            Class.forName(JDBC_DRIVER);

            // 打开一个连接
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            // 执行 SQL 查询
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, name, url FROM websites " ;
            ResultSet rs = stmt.executeQuery(sql);

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String url = rs.getString("url");

                // 输出数据
                out.println("ID: " + id);
                out.println(", 站点名称: " + name);
                out.println(", 站点 URL: " + url);
                out.println("<br />");
            }
            out.println("</body></html>");

            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch(SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch(Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 最后是用于关闭资源的块
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){
            }
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }

    }
}

代码附上

11.这里我们在web.xml里布置Servlet的mapping,正是布置Servlet的前端路径,那样我们能够在浏览器里输入
localhost:8080/test来访问查看

图片 22

 

12.1个Servlet基本写完了,那里大家运维project,打开浏览器输入localhost:8080/test来查阅是还是不是Servlet建立成功,并且成功总是到数据库,输出结果如下。

图片 23

 

迄今截止,二个能不负众望总是到数据库的Servlet的Demo已经主导完结,下篇介绍怎么着将Servlet搭建到服务器上,完毕和app/web的切切实实交互。

 

接下去相比忙,所以先简单提一下贯彻原理:我们早就学会了什么树立多个Servlet,当我们在Ali云/腾讯云上买一个服务器现在,在服务器上搭配和我们刚本地一样的布局环境,并且把变化的Servlet实例放到服务器上举行布置之后,那大家都开自个儿的无绳电话机/电脑就足以输入:123.456.7.8(服务器地址)/api/servlet/test
(本身定义的Servlet匹配地址),和大家地方访问差别换了个ip地址而已。那样就放置服务器上啊,同样的数据库建立到服务器上,那样访问的输入三个上述的U奥迪Q7L地址访问的正是服务器的数据。那样大家最想询问的后端连接前端的功用就曾经达成啦。

有关具体使用Servlet来举行具体app/web的劳务,实际上是通过JSON传输的,意思正是当真的doGet会获取一些数额(不像我们刚写的demo没写传来的多寡),得到那一个数据之后经过一多元处理(比如调用哪个数据库的怎么数据等等),获取要传输的数目,通过创建成JSON格式的数组,那样app端访问那个U劲客L之后就会博得它需求的JSON数据(比如imgU奇骏L,imgNAME等等)用于app端/web端的操作使用。

 

闲了更。要忙一段时间。有标题留言

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图