(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 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生成响应内容并将其传给服务器,响应内容动态生成,通常取决于客户端的请求;
◆服务器将响应结果以指定的形式返回给客户端。
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>标签之上,添加如下代码。
◆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时设置),否则,说明部署不成功
(1)启动Tomcat,打开MyEclipse中的Servlet应用;
(2)在Eclipse中启动客户端app,输入请求数据,测试客户端与服务器是否能通信;
另外,如果客户端与服务器通信成功,Tomcat窗口也会显示客户端传送过来的数据。
2.服务器处理和响应流程
第一步:根据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服务器中;
◆需要在清单文件中添加访问网络的权限;
◆不能直接访问网络,需进行相应处理,建议采用消息传递机制;
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>