一、前言

  Java Servlet是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet实际上就是按照Servlet规范编写一个Java类。

  Servlet运行需要一个运行环境,即需要一个Servlet容器,这里我们使用Tomacat。Tomcat作为一个Web服务器,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器。

二、Tomcat的安装与配置

  安装Tomcat之前要先下载JDK并配置好环境变量,然后访问http://tomcat.apache.org/,下载最新版Tomcat压缩包,解压缩后目录结构为如下图所示

  

  进入目录/bin,双击startup.bat文件,即可启动Tomcat。启动成功后,在浏览器中访问http://localhost:8080/,出现如下页面。

  

三、使用Eclipse开发Servlet

  在使用Eclipse开发Servlet之前,要先将Tomcat源文件导入Eclipse中,步骤如下:

  在Eclipse界面,点击窗口菜单->首选项,选择服务器->运行时环境,再点击添加按钮,将下载的Tomcat源文件导入Eclipse中去。

  

  

  导入后,将Eclipse切换到JavaEE模式,新建一个动态Web工程,整个工程的目录如下:

  

  实现一个helloWord例子。

  方式一:通过实现Servlet接口来编写Servlet类,需要实现接口中定义的5个方法,代码如下:

 package day_052102;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/*
这里通过实现Servlet接口来编写一个简单的Servlet
*/
public class ServletDemo implements Servlet
{
public void init(ServletConfig config) throws ServletException
{
}
public ServletConfig getServletConfig()
{ return null;
}
public String getServletInfo()
{
return null;
}
public void destroy()
{
}
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
PrintWriter out=res.getWriter();
out.print("hello World!");
out.close();
}
}

  然后进行web.xml的配置,代码如下:

<servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>day_052102.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>
<url-pattern>/ServletDemo</url-pattern>
</servlet-mapping>

  点击运行按钮,启动tomacat服务器,然后在浏览器中输入http://localhost:8080/day_052102/ServletDemo,即可进行实现页面显示hello World的示例。结果如下。

  

  方式二:继承抽象类GenericServlet,该类定义了一个通用的Servlet。

public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable

  代码示例实现hellWord如下:

public class GenericServletDemo extends GenericServlet
{ @Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
PrintWriter out=res.getWriter();
out.println("hello World!");
out.close(); } }

  方式三:通过继承抽象的HttpServlet类,此类继承于GenericServlet类。

  PS:HttpServlet类中没有抽象的方法。这个类重写了service方法,它会根据请求的方式调用doGet或者doGet方法,部分源码如下:

protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String method = req.getMethod();
if (method.equals(METHOD_GET)) //当请求方式为GET时,调用doGet方法
{
long lastModified = getLastModified(req);
if (lastModified == -1)
{
// servlet doesn't support if-modified-since, no reason
// to go through further expensive logic
doGet(req, resp);
}
else
{
long ifModifiedSince;
try
{
ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
}
catch (IllegalArgumentException iae)
{
// Invalid date header - proceed as if none was set
ifModifiedSince = -1;
}
if (ifModifiedSince < (lastModified / 1000 * 1000))
{
// If the servlet mod time is later, call doGet()
// Round down to the nearest second for a proper compare
// A ifModifiedSince of -1 will always be less
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
}
else
{
resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
}
}

  如果在自己写的类中重写了service方法,那么Servlet容器就会把请求交给你重写的service方法处理。

public class HttpServletDemo extends HttpServlet
{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
PrintWriter out=resp.getWriter();
out.println("hello!");
out.close();
}
}

最新文章

  1. RSA算法学习
  2. icon fonts
  3. Android学习五:Content Provider 使用
  4. PHP vs Python
  5. CSS 实现:图片+文字的布局(综合)
  6. 明修栈道,暗渡陈仓----之私募一哥徐翔新玩法 z
  7. 搭建java开发环境
  8. 核心运营报表无线端数据,pv,uv相关数据,从9月1号开始就没了,为什么?
  9. Code Complete阅读笔记(一)
  10. Microsoft SqlSever 数据库--软谋1
  11. Kafka笔记——技术点汇总
  12. 201521123088《Java程序设计》第13周学习总结
  13. 使用canvas编写时间轴插件
  14. openjudge(二)
  15. 【移动开发】 Android隐藏输入法软键盘的一些说明
  16. C语言实现4种常用排序
  17. linux下D盘(适用于U盘、硬盘等一切移动存储设备)策略(比格式化猛,因为是不可恢复!)
  18. oss命令使用
  19. vue的Http请求拦截及处理
  20. Vue Loader

热门文章

  1. (笔记)Linux线程编译undefined reference to &#39;pthread_create&#39;
  2. 使用ClaimsIdentity来实现登录授权
  3. C# 结构体 struct
  4. ubuntu下查看windows的 txt 文件乱码
  5. MVC4小细节
  6. Jenkins的安装配置[转]
  7. UITableView 顶部能够放大的图片
  8. js 按键
  9. UFLDL教程练习(exercise)答案(2)
  10. 【python】并行化的又一种思路