做Android开发有一段时间了,经常与后台服务器进行交互,有时就会想,后台服务器到底是怎么工作的呢?我发出去一个http请求,他怎么接收到,又怎么进行处理、返回信息呢?

怀着这个疑问,我进行了好一通搜索。然后,还是想动动手,自己搭建一个简单的服务器。

我的环境是win7,那么,就在win7下搭建一个吧。最简单的,自然是win7自带的,IIS,全称Internet Information Service,即Internet信息服务,专用于微软操作系统平台。

简单说下步骤:

1,启用IIS功能,一般在控制面板的“启用或关闭windows功能”里面;

2,准备好一个html文件,例如如下的内容:

<html><head>
<title>Lintax的主页</title>
</head><body>
<h1>lintax的主页</h1>
<p><font color="green">内容会很精彩的哦</font></p>
<img src="lovely.jpg" width="300" />
<p><font color="red">敬请期待...</font></p>
</body></html>

放在默认的路径下(C:\Inetpub\wwwroot),文件名使用index.htm。

为什么要使用index.htm,原来是默认打开的文件名有这样几个:

我们使用index.htm,就可以使用 http://localhost/ 来访问了。否则,就需要指定htm文件名才能访问,像这样:
http://localhost/login.htm 。

3,输入网址测试访问,可以看见:

这样,我们就搭建起来了一个简单的服务器。在局域网里其他的电脑上输入:
http://192.168.100.100 (这个ip是我的电脑的ip,根据需要修改)
就可以访问我们提供的页面了。如果转到公网上,全世界的人都可以访问到了。

但是,最初的问题还存在,就是我们现在看见的,只是一个静态页面,这个服务器,并不能针对我们的请求进行正确与否的判断,进而做出相应的回复。

那么,怎样才能对请求进行处理?
在再次经历一番搜索后,我选择了一个方案,使用java的servlet+tomcat来实现。毕竟,做Android这么久了,对java还是比较熟悉了,用java来进行后台控制,后续如果想深入的话,可以在此基础上继续研究。

下面说下搭建过程:

1,下载tomcat,解压。我用的版本是:apache-tomcat-7.0.57。
2,下载eclipse j2ee,注意,即使原来是用eclipse开发的Android,现在开发java的eclipse版本也是不一样的。
我用的eclipse版本是:Kepler Service Release 2
然后,对下载的压缩包解压,然后运行起来。

3,在eclipse中新建一个web project工程,选择动态的。

4,通过Eclipse创建和编写Servlet。
建立一个类,继承HttpServlet,实现doGet()、doPost(),代码如下:

package servlet.study;import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class ServletDemo*/
public class ServletDemo extends HttpServlet {private static final long serialVersionUID = 1L;private String name = "";private String password = "";/*** Default constructor. */public ServletDemo() {System.out.println("log: ServletDemo enter");}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String url=request.getRequestURL().toString();System.out.println("log: ServletDemo doGet: url="+url);String strName = request.getParameter("name");String strPassword = request.getParameter("password");System.out.println("log: ServletDemo doGet: name="+strName+": password="+strPassword);      boolean isPass = false;if(url!=null && url.contains("login")){         try{if((strName!=null)&&(strPassword!=null)){if(name.contentEquals(strName) && password.contentEquals(strPassword) ){isPass = true;}}} catch (Exception e){e.printStackTrace();}}//返回jsonresponse.setContentType("text/json");PrintWriter out = response.getWriter();if(isPass){out.println("{\"result\":\"success\"}");} else {out.println("{\"result\":\"input info is invalid\"}");}           out.flush();out.close();                }/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("log: ServletDemo doPost:");     response.setContentType("text/json");PrintWriter out = response.getWriter();        String url=request.getRequestURL().toString();System.out.println("log: ServletDemo doPost: url="+url);     try{name = request.getParameter("name");password = request.getParameter("password");System.out.println("log: ServletDemo doPost: name="+name+": password="+password);if(url!=null && url.contains("register")){out.println("{\"result\":\"success\"}");} else {out.println("{\"result\":\"fail\"}");}} catch (Exception e){          out.println("{\"result\":\"fail\"}");}}
}

在web.xml中配置servlet和servlet-mapping:

<?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" id="WebApp_ID" version="2.5"><display-name>WebTest</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description>my J2EE deom for servlet</description><display-name>disp ServletDemo</display-name><servlet-name>ServletDemo</servlet-name><servlet-class>servlet.study.ServletDemo</servlet-class></servlet><servlet-mapping><servlet-name>ServletDemo</servlet-name><url-pattern>/api/login</url-pattern><url-pattern>/api/register</url-pattern></servlet-mapping>
</web-app>

在servlet-mapping中,我映射了两个url,一个是“/api/register”,一个是“/api/login”,分别代表注册与登录。实际上,对于同一个servlet,这只是两个不同的称呼罢了,真正做区别处理的是java代码中。我添加了对url命令的判断,在doGet中处理了login,在doPost中处理了register,从而实现了注册与登录功能。

5,运行,选择Run on Server
选择手动指定server,找到tomcat的目录,运行。

此时报错,编译不过,有如下信息:

Description Resource    Path    Location    Type
HttpServlet cannot be resolved to a type    ServletDemo.java
/WebTest/src/servlet/study  line 12 Java Problem
HttpServlet cannot be resolved to a type

原来是jdk 里不包括servlet-api.jar 这个包,此包在Tomcat 中存在,按如下方式操作一下即可:
项目名–> 右键
Property–> 选择
Java Build Path–> 选择
Add External JARs–> 选择
把servlet-api.jar 的路径输入。

继续运行,出现doGet调用信息(是eclipse环境运行,执行了一次默认请求):

log: ServletDemo doGet: url=http://localhost:8080/WebTest/api/login
log: ServletDemo doGet: name=null: password=null

如图:

这次请求,由于没有指定用户名与密码,所以返回失败。

第二次发请求,进行注册:
使用Postman进行post请求注册,
具体Postman的按照与使用,可以参考:
http://www.cnblogs.com/s380774061/p/4624326.html
url使用:http://127.0.0.1:8080/WebTest/api/register
用表单提交两项:name=z&password=a
然后出现doPost调用信息:

log: ServletDemo doPost: url=http://localhost:8080/WebTest/api/register
log: ServletDemo doPost: name=z: password=a

正常的注册操作,返回成功,如下图:

第三次,在浏览器上发Get请求登录:
http://127.0.0.1:8080/WebTest/api/login?name=z&password=a
服务器端的log信息:

log: ServletDemo doGet: url=http://127.0.0.1:8080/WebTest/api/login
log: ServletDemo doGet: name=z: password=a

由于第二次的post已经给用户名与密码赋值了,这次的访问,使用的是同样的用户名与密码,所以,这次的访问,返回是成功的结果:

上面我们是使用的浏览器与postman进行的测试,还有一个测试的方法,就是使用Android工程运行测试,可以使用上一个博文的附件Android demo(http://download.csdn.net/detail/lintax/9777979),是与本文的服务器端的demo相匹配的。
注意,在Android Deom中要指定正确的IP,在我的demo中,设置的是我的电脑的ip(192.168.100.100),在具体测试环境中,要相应修改下。运行时,要保证手机与服务器在一个局域网中,通常使用WIFI就可以了。

本文的服务器端的demo:
http://download.csdn.net/detail/lintax/9786392

参考:
http://blog.csdn.net/yuanguozhengjust/article/details/25747729
http://blog.chinaunix.net/uid-25799257-id-3774015.html

搭建一个简单的服务器相关推荐

  1. 用nodejs搭建一个简单的服务器

    使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...

  2. Node.js搭建一个简单的服务器

    文章目录 Node.js的安装 了解Node.js模块系统 服务器的搭建 一.创建一个Web服务器 注意 程序代码 运行 二.静态资源托管 静态资源 注意 程序代码 运行 三.简单接口的实现(简单服务 ...

  3. express 文件服务器,Express搭建一个简单后台服务器

    Express框架 Web 应用程序 Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能. API 使用您所选择的各种 ...

  4. 搭建一个简单Git服务器

    1.在PC上创建一个git空仓库 # mkdir -p /home/git_test # cd git_test # git init --bare test.git //test.git目录被clo ...

  5. 搭建一个简单repo服务器

    一.服务器端 1.安装依赖 # sudo apt install repo创建manifest.test1.test2仓库 1.创建manifest中心仓库 # cd /home/demo/repo_ ...

  6. 使用XMAPP搭建一个简单的服务器

    1.首先去官网下载XMAPP,https://www.apachefriends.org/zh_cn/download.html 2.无脑点击next进行安装 3. 找到安装路径(我安装在d盘):D: ...

  7. 自己动手搭建一个简单的静态资源服务器

    文章目录 自己动手搭建一个简单的静态资源服务器 介绍 一.设计到的模块 备注: 二.代码结构 三.具体代码 自己动手搭建一个简单的静态资源服务器 介绍 ​ 通过此文章的学习,可以自己使用NodeJs搭 ...

  8. ubuntu搭建一个简单的http服务器

    使用ubuntu搭建一个简单的http服务器 安装apache2 1.sudo apt-get update 2.sudo apt-get install apache2 安装成功后,再/etc/ap ...

  9. Linux上利用nginx搭建一个简单的rtmp视频流服务器(不涉及直播)

    文章目录 Linux上利用nginx搭建一个简单的rtmp视频流服务器(不涉及直播) 一.基础环境搭建 二.构建Nginx 下载nginx-rtmp-module 安装Nginx 编译nginx,代理 ...

  10. 用思科网络模拟器搭建一个简单的局域网

    目录 前言 搭建 配置 前言 在搭建一个简单的局域网前,你必须知道一些常识. 网线(双绞)线的标准 T568A标准:白绿.绿.白橙.蓝.白蓝.橙.白棕.棕 T568B标准:白橙.橙.白绿.蓝.白蓝.绿 ...

最新文章

  1. pyinstaller安装以及生成exe文件
  2. Translating Embedding for Modeling Multi-relational Data
  3. Laravel Model 利用 Macroable 为数据模型添加宏能力
  4. 部署webservice到远程服务器
  5. 解决H5在微信浏览器或QQ浏览器修改title的问题
  6. 你必须知道iPad的10件事
  7. java获取时分秒毫秒_Calendar获取年月日时分秒毫秒
  8. PyQt之计数器(QSpinBox)控件的常用方法
  9. anaconda环境迁移
  10. 【C语言】转义字符\xhh和\ddd到底如何判断?被兔子个数支配的恐惧你也有吗?(每日小细节001)
  11. md+邮件服务器+334错误,邮件发送,无尽的501错误。TCP发送邮件解决方案
  12. 图像中里面的Ground Truth是什么意思
  13. 22考研上岸西电计科初试395分经验分享
  14. 基于GPS经纬度和当地时间计算日落日出时间实现
  15. Unity涂鸦【1】——基于Vectrosity的屏幕涂鸦和白板涂鸦的简单实现
  16. 专为Oracle数据恢复而生 - PRM/DUL
  17. Systemd入门:边玩边学
  18. 微信代驾小程序-景德镇代驾服务平台小程序源码分享
  19. Android -- 手机真机调试
  20. webapi输出炜json_C# WebApi 返回JSON

热门文章

  1. java messagedigest_Java自带的加密类MessageDigest类代码示例
  2. UnityEditor-Windows编辑器与Inspector编辑器
  3. DOSBox安装流程
  4. linux中UDP编程
  5. 软件生命周期的八个阶段
  6. python小欢喜(八)俄罗斯方块 (12) 添加游戏音效
  7. 深入理解浏览器的缓存机制
  8. Linux编译并更新内核(替换Linux内核)
  9. windows 查看局域网内所有已使用的IP
  10. 机器学习、神经网络、深度学习的关系