03.HTTP协议之服务器实现

转载请标明出处:http://blog.csdn.net/u012637501
一、Java web(Servlet)开发
(1)Servlet简介
    Servlet(Server+let)是在服务器上运行的小程序,具有独立于平台和协议的特性,可以生成动态的web页面,用于处理及响应客户端的请求,担当客户请求(web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层
(2)Servlet类
    Servlet实质上是个特殊的Java类,该类继承于Servley或其子类(如HttpServlet),Servlet用于处理和响应客户端的请求,Servlet提供了不同的方法用于响应客户端请求。通常客户端的请求只有GET和POST两种,Servlet为了响应这两种请求,只需重写doGet()和doPost()两个方法即可。
(3)MyEclipse中开发一个Servlet项目
第一步:安装MyEclipse
    MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。下载地址:http://www.xiazaiba.com/html/23858.html
第二步:MyEclipse中创建Servlet的配置
技术分享
注意:Mapping URL设置的值为访问该Servlet的URL路径。
E:\Java Web\InfoSearch\src\...\login\LoginServlet.java
  1. package com.jiangdongguo.login;    
  2. import java.io.IOException;  
  3. import java.io.PrintWriter;  
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8. public class LoginServlet extends HttpServlet {  
  9.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  10.             throws ServletException, IOException {  
  11.   
  12.         response.setContentType("text/html");           //设置返回类型为网页形式  
  13.         PrintWriter out = response.getWriter();         //输出  
  14.         String name = request.getParameter("username"); //获取请求传入的参数-用户名信息  
  15.         String psd = request.getParameter("psd");       //              -密码  
  16.         System.out.println("username="+name+"psd="+psd);  
  17.         if("jiang".equals(name)&&"111".equals(psd)) //与服务器数据做对比,并返回响应信息  
  18.         {  
  19.               out.print(true);  //输出响应数据信息("true")给客户端
  20.         }  
  21.         else  
  22.         {  
  23.                 out.print(false);  //输出响应数据信息("false")给客户端
  24.         }  
  25.     }  
  26.   
  27.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  28.             throws ServletException, IOException {  
  29.         this.doGet(request, response);  
  30.       
  31.     }   
  32. }  
总结:Servlet处理和响应客户端请求的过程
    ◆客户端发送请求至服务器端;
    ◆服务器将请求信息发送至Servlet;
    ◆Servlet生成响应内容并将其传给服务器,响应内容动态生成,通常取决于客户端的请求;
    ◆服务器将响应结果以指定的形式返回给客户端。

二、安装Tomcat服务器
    Tomcat是一个免费的、开源的web应用服务器,它是一个轻量级应用服务器。在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试Java web程序的首选。
步骤如下
(1)下载apache-tomcat-7.0.61.exe:
(2)双击apache-tomcat-7.0.61.exe,查看端口号8080;
(3)启动服务器
    方式一:双击tomcat图标
    方式二:..\Tomcat 7.0\bin目录下双击Tomcat7
(4)在浏览器中输入:http://localhost:8080/,测试是否安装成功。
技术分享
技术分享
注意:安装和使用中需注意
(1)设置Tomcat的端口号:默认情况下,该端口为8080,如果需要设置,最好选一个1024以上的端口号。1024以内的端口大部分都被系统所用,以避免端口冲突;
(2)设置Tomcat管理员账户和密码,管理应用时需要登录;
(3)启动Tomcat:直接双击Tomcat安装路径下的bin路径的tomcat6.exe即可。重复启动Tomcat,控制台将会报错并直接退出,因为第二次启动时,端口已经被占用,必须关闭之前的Tomcat,才能启动。

三、在Tomcat中部署Java Web应用
1.Java Web应用部署到Tomcat服务器
    Java Web部署方式有多种,使用Tomcat安装目录下的conf文件夹下的Server.xml
(D:\Apache Software Foundation\Tomcat 7.0\conf)
文件进行部署。在该文件的倒数第四行即</host>标签之上,添加如下代码。
技术分享
技术分享
    ◆path虚拟路径,启动Tomcat后,可通过http://localhost:8080/login/来访问该项目中的相关页面;               
    ◆docBase:Servlet项目根目录所在路径,是本机上的一个绝对路径,即Java Web应用所存放的位置,需要定位到WebRoot目录下;  
    ◆reloadable:设置为"true",表示修改Servlet文件后,不需要重启服务器就可以实现页面的同步更新
2.测试是否部署成功
(1)启动Tomcat:双击bin目录下的Tomcat7.exe
技术分享
技术分享
(2)在Tomcat中部署Servlet应用,并启动MyEclipse中的Servlet项目(每次Servelet应用有改变时只需保存即可);
(3)在浏览器中输入:http://localhost:8080/,点击"Manager App"
    ◆输入账户、密码(在安装Tomcat时设置)
    技术分享
    ◆在Applications栏目,查看Path列是否包含"/login"(path=/login在部署Java web时设置),否则,说明部署不成功
    技术分享
    ◆点击"/login"进入web应用,浏览器中输入"http://localhost:8080/login/LoginServlet?username=jiangdongguo&psd=111"。如果网页界面显示"true/false",说明Java web应用(Servlet项目)测试成功,可以进一步测试客户端是否能与服务器通信成功,Tomcat窗口会显示服务器接收到的数据,如下所示。如果网页界面无任何反应,Tomcat窗口没有任何显示,则Servlet项目有问题。
技术分享
技术分享
四.客户端(app)与服务器通信测试
1.测试步骤
(1)启动Tomcat,打开MyEclipse中的Servlet应用;
(2)在Eclipse中启动客户端app,输入请求数据,测试客户端与服务器是否能通信;
    另外,如果客户端与服务器通信成功,Tomcat窗口也会显示客户端传送过来的数据。
技术分享
技术分享
2.服务器处理和响应流程
    当客户端发送http://localhost:8080/login/LoginServlet请求时,服务器是如何处理和响应的呢? 
    第一步:根据Tomcat的Server.xml文件,查看login虚拟路径所对应的物理路径,即docBase所对应的值;   
    第二步:找到该物理路径下的web.xml文件,找到包含<url-pattern> /LoginServlet</url- pattern>的<Servlet-mapping>;  
    第三步:根据<servlet-name>LoginServlet</servlet-name>找到对应的<servlet-class>的值,获取类名iet.jxufe.cn.server.LoginServlet ;    
    第四步:根据反射机制,创建iet.jxufe.cn.server.LoginServlet类对象,并执行相应的方法,在方法处理中,会返回相应的处理结果。最后将结果返回给客户端。
注意事项
◆Tomcat已启动,并且Java Web程序已部署到Tomcat服务器中;     
◆客户端访问服务端的URL要正确,在此为http://10.0.2.2:8080/login/LoginServlet而不是Java Web中的http://localhost:8080/login/LoginServlet。因为模拟机通过127.0.0.1访问的是模拟器本身。在模拟器上访问安装模拟器的电脑,需要使用android内置的IP:10.0.2.2。10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名,如果是网络服务器,可直接写相应的IP或网址;     
◆需要在清单文件中添加访问网络的权限;     
◆不能直接访问网络,需进行相应处理,建议采用消息传递机制;

3.开发过程中遇到的问题
    在测试客户端与服务器通信的过程中,客户端无法获得服务器响应的"true"或"false"数据,Tomcat窗口也没有显示客户端传送过来的数据信息,说明客户端与服务器通信失败。通过在客户端的Http请求与获取响应数据模块,System.out.println(e.getMessege())打印异常信息"Connection Http://10.0.2.2:8080/login/LoginServlet refused",即客户端访问10.0.2.2:8080/login/LoginServlet被拒绝,原因在于没有在客户端app的清单文件(AndroidMainfest.xml)中增加互联网访问权限:
                <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。