您的位置:首页 > 理论基础 > 计算机网络

03.HTTP协议之服务器实现

2015-04-20 13:40 316 查看



转载请标明出处: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

package com.jiangdongguo.login;
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;

public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html"); //设置返回类型为网页形式
PrintWriter out = response.getWriter(); //输出
String name = request.getParameter("username"); //获取请求传入的参数-用户名信息
String psd = request.getParameter("psd"); // -密码
System.out.println("username="+name+"psd="+psd);
if("jiang".equals(name)&&"111".equals(psd)) //与服务器数据做对比,并返回响应信息
{
out.print(true);
//输出响应数据信息("true")给客户端
}
else
{
out.print(false); //输出响应数据信息("false")给客户端
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);

}
}



总结:Servlet处理和响应客户端请求的过程

◆客户端发送请求至服务器端;
◆服务器将请求信息发送至Servlet;
◆Servlet生成响应内容并将其传给服务器,响应内容动态生成,通常取决于客户端的请求;
◆服务器将响应结果以指定的形式返回给客户端。



二、安装Tomcat服务器

Tomcat是一个免费的、开源的web应用服务器,它是一个轻量级应用服务器。在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试Java
web程序的首选。
步骤如下:
(1)下载apache-tomcat-7.0.61.exe:


http://tomcat.apache.org/download-70.cgi

(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,才能启动。
注意:

可能很多人在配置java的环境变量时,觉得java_home很麻烦,就略去了,但是,在启动tomcat的时候问题就出来了,点击tomcat路径下任何一个.bat文件,都只是闪一下,这是由于java_home没有配置的缘故,正确配置了以后启动就没问题了;可以启动一个cmd窗口,然后去运行startup.bat文件,控制台就会报错,自己根据实际情况解决即可。

三、在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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: