一、前言

  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个方法,代码如下:

  1. package day_052102;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.Servlet;
  5. import javax.servlet.ServletConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. /*
  10. 这里通过实现Servlet接口来编写一个简单的Servlet
  11. */
  12. public class ServletDemo implements Servlet
  13. {
  14. public void init(ServletConfig config) throws ServletException
  15. {
  16. }
  17. public ServletConfig getServletConfig()
  18. {
  19.  
  20. return null;
  21. }
  22. public String getServletInfo()
  23. {
  24. return null;
  25. }
  26. public void destroy()
  27. {
  28. }
  29. public void service(ServletRequest req, ServletResponse res)
  30. throws ServletException, IOException
  31. {
  32. PrintWriter out=res.getWriter();
  33. out.print("hello World!");
  34. out.close();
  35. }
  36. }

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

  1. <servlet>
  2. <servlet-name>ServletDemo</servlet-name>
  3. <servlet-class>day_052102.ServletDemo</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>ServletDemo</servlet-name>
  7. <url-pattern>/ServletDemo</url-pattern>
  8. </servlet-mapping>

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

  

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

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

  代码示例实现hellWord如下:

  1. public class GenericServletDemo extends GenericServlet
  2. {
  3.  
  4. @Override
  5. public void service(ServletRequest req, ServletResponse res)
  6. throws ServletException, IOException
  7. {
  8. PrintWriter out=res.getWriter();
  9. out.println("hello World!");
  10. out.close();
  11.  
  12. }
  13.  
  14. }

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

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

  1. protected void service(HttpServletRequest req, HttpServletResponse resp)
  2. throws ServletException, IOException
  3. {
  4. String method = req.getMethod();
  5. if (method.equals(METHOD_GET)) //当请求方式为GET时,调用doGet方法
  6. {
  7. long lastModified = getLastModified(req);
  8. if (lastModified == -1)
  9. {
  10. // servlet doesn't support if-modified-since, no reason
  11. // to go through further expensive logic
  12. doGet(req, resp);
  13. }
  14. else
  15. {
  16. long ifModifiedSince;
  17. try
  18. {
  19. ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
  20. }
  21. catch (IllegalArgumentException iae)
  22. {
  23. // Invalid date header - proceed as if none was set
  24. ifModifiedSince = -1;
  25. }
  26. if (ifModifiedSince < (lastModified / 1000 * 1000))
  27. {
  28. // If the servlet mod time is later, call doGet()
  29. // Round down to the nearest second for a proper compare
  30. // A ifModifiedSince of -1 will always be less
  31. maybeSetLastModified(resp, lastModified);
  32. doGet(req, resp);
  33. }
  34. else
  35. {
  36. resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
  37. }
  38. }
  39. }

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

  1. public class HttpServletDemo extends HttpServlet
  2. {
  3. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  4. throws ServletException, IOException
  5. {
  6. PrintWriter out=resp.getWriter();
  7. out.println("hello!");
  8. out.close();
  9. }
  10. }

Servlet基本用法(一)基本配置的更多相关文章

  1. 初学servlet之使用web.xml配置

    先写两个servlet,之后展示web.xml配置 package app01c;import java.io.IOException;import java.io.PrintWriter;impor ...

  2. 【Javaweb】Servlet的xml和注解配置

    1.xml <%@ page language="java" contentType="text/html;" %> <!DOCTYPE ht ...

  3. Servlet+JSP 对外访问路径配置

    servlet类似 servlet配置为: <servlet>    <servlet-name>Demo01_OutWrite</servlet-name>    ...

  4. 【转】Servlet与web.xml的配置

    Web.xml常用元素<web-app><display-name></display-name>定义了WEB应用的名字<description>< ...

  5. Servlet中Web.xml的配置详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

  6. Java Servlet的配置文件web.xml配置内容和具体含义

    文件名:“SimpleServlet.java” package cn.mldn.lxh.servlet ;//定义包 import java.io.* ; // HttpServlet属于javax ...

  7. Servlet程序开发--取得初始化配置信息

    代码: 两个初始化init方法,一起出现的话,有参的才起作用 package org.lxh.servletdemo ; import java.io.* ; import javax.servlet ...

  8. Servlet 3.0 使用注解配置URl提示404错误

    我的环境是  Eclipse oxygen + Servlet 3.0 因为3.0已经开始使用注解了 之前我都是配置listenner 还有Servlet mapping  在 web.xml 中 就 ...

  9. Servlet生命周期和注解配置

    Servlet的生命周期和注解配置问题 /* Servlet? 运行在服务器上的小程序 定义浏览器访问到Tomcat的规则 一.生命周期? 1.创建 2.提供服务 3.被销毁 二.servlet3.0 ...

随机推荐

  1. e859. 将键盘事件和字符串对应

    The KeyStroke.toString() method does not return a string that can be parsed by KeyStroke.getKeyStrok ...

  2. 嵌入式驱动开发只设备数---dts

    http://blog.sina.com.cn/s/blog_ad64b8200101e7q0.html

  3. Volley的Get、Post方式(JsonObjectRequest、StringRequest)以及Volley获取图片的3种方式

    activity_main.xml 里面什么也没有 AndroidManifest.xml(重点是android:name="com.example.volley.MyApplication ...

  4. HTML5/CSS3实现五彩进度条应用

    今天要介绍的是一款基于HTML5和CSS3的进度条应用,这款进度条是静态的,仅提供进度条的五彩外观.当然你可以在CSS中动态设置进度值来让其变得动态,一个很好的实现方式是利用jQuery动态改变CSS ...

  5. hive 配置元数据以mysql 存储

    <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="confi ...

  6. Spring依赖注入原理分析

    在分析原理之前我们先回顾下依赖注入的概念: 我们常提起的依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念.具体含义是:当某个角色( ...

  7. nginx隐藏server信息和版本信息

    1.隐藏版本信息 在nginx.conf里面添加 server_tokens off; 2.隐藏server信息 需要重新编译ngnix进入解压出来的nginx 源码目录 vi src/http/ng ...

  8. 怎么设置BarTender中二维码大小为25*25

    有小伙伴近期问了小编一个问题,说客户需要25*25大小的QR Code二维码,用BarTender怎么做出来?想要指定条形码的大小,还得BarTender符号与版本选项来帮忙.本文小编就来给大家详细讲 ...

  9. QT编译错误:Project ERROR: This example requires Qt to be configured with -opengl desktop

    学习QT场景视图,对一个Boxes的例子比较感兴趣,于是去编译学习,结果编译不能通过(使用的是QT5.12): Project ERROR: This example requires Qt to b ...

  10. mysql中如何修改表的名字?修改表名?

    需求描述: 今天在进行mysql表的历史数据迁移,需要将某张表进行备份,修改表的名字,在此记录下操作过程. 操作过程: mysql> create table ts01 like ti_o_sm ...