开发一个Servlet示例

Servlet响应请求步骤:

Servlet是一个基于Java技术的Web组件,运行在服务器端,用户利用Servlet可以很轻松地扩展Web服务器的功能,使其满足特定的应用需要。Tomcat是一个常用的Servlet容器。接收客户端并请求做出响应的步骤如下:

  1. 客户端访问Web服务器,发送HTTP请求。
  2. Web服务器接收到请求后,传递给Servlet容器。
  3. Servlet容器加载Servlet,产生Servlet实例,并向其传递表示请求和响应的对象。
  4. Servlet得到客户端的请求信息,并进行相应处理。
  5. Servlet实例把处理结果以送回给客户端,容器负责确保响应正确送出,同时将控制返回给Web服务器。

Servlet生命周期:

  • 第一阶段,装载Servlet,一般为动态执行。
  • 第二阶段,创建一个Servlet实例
  • 第三阶段,调用Servlet的init()方法
  • 第四阶段,服务,如果容器接收到对此Servlet的请求,那么它将调用Servlet的service()方法
  • 第五阶段,销毁,通过调用Servlet的destory()方法来销毁Servlet

开发Servlet程序示例:

为了简化开发,用户缩写的Servlet一般直接继承HttpServlet,HttpServlet封装了编写基于HTTP的Servlet大部分的功能。HelloWorldServlet.java文件代码如下:

package com.jsp.ch3;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorldServlet
 */
@WebServlet(description = "This is the description of my J2EE component", urlPatterns = { "/HelloWorldServlet" })
public class HelloWorldServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloWorldServlet() {
        super();
    }
    
    public void destroy() {
        super.destroy();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("    <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("    <BODY>");
        out.println("        This is ");
        out.println(this.getClass());
        out.println(", using the GET method");
        out.println(" </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("    <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("    <BODY>");
        out.println("        This is ");
        out.println(this.getClass());
        out.println(", using the POST method");
        out.println(" </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    public void init() throws ServletException {
        
    }
}

在WebContent\WEB-INF\web.xml文件中描述Servlet。web.xml文件代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
    
    <!-- =====================开始============================================================================= -->
    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <!-- servlet类名称 -->
        <servlet-name>HelloWorldServlet</servlet-name>
        <!-- servlet类路径 -->
        <servlet-class>com.jsp.ch3.HelloWorldServlet</servlet-class>
    </servlet>
    
    <!-- 定义一个映射。<servlet-name>元素给出的Servlet名字必须是在<servlet>元素中声明过的Servlet的名字。
                    <url-pattern>元素指定对应于Servlet的URL路径,该路径是相对于Web应用程序上下文根的路径 -->
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/servlet/HelloWorldServlet</url-pattern>
    </servlet-mapping>
    
    <!-- ==========================结束======================================================================= -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术碎碎念

servlet设置缓存时间以及文件的下载

缓存时间的设置: 1 public void doGet(HttpServletRequest request, HttpServletResponse res...

3127
来自专栏微信公众号:Java团长

Java Web学习总结(六)——Servlet开发(二)

  在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

982
来自专栏Java Edge

Spring Session关键类源码分析

要想使用spring session,还需要创建名为springSessionRepositoryFilter的SessionRepositoryFilter类...

2595
来自专栏程序之美

重写request设置自定义超时

1344
来自专栏日常分享

JSP/Servlet Web 学习笔记 DayFour —— 实现一个简单的JSP/Servlet交互

    b)JSP页面由表单获取一个开始数字,一个结束数字,交给Servlet打印响应的乘法表。

752
来自专栏菩提树下的杨过

JSP中的Servlet及Filter

asp.net中,如果开发人员想自己处理http请求响应,可以利用HttpHandler来满足这一要求;类似的,如果要拦截所有http请求,可以使用HttpMo...

2065
来自专栏玩转JavaEE

Spring Cloud中Feign的继承特性

上篇文章我们了解了Feign的基本使用,在HelloService类中声明接口时,我们发现这里的代码可以直接从服务提供者的Controller中复制过来,这些可...

3296
来自专栏强仔仔

SpringBoot中实现拦截器级别的URl访问过快拦截,并利用JPA实现IP黑名单的功能。

今天给大家介绍一下SpringBoot中实现拦截器级别URl过快访问拦截,并利用JPA实现IP黑名单的功能。 上一节中已经将中已经介绍了在控制器层面上面的URL...

2146
来自专栏ml

springMVC拦截器和过滤器总结

拦截器: 用来对访问的url进行拦截处理 用处: 权限验证,乱码设置等 spring-mvc.xml文件中的配置: <beans xmlns="http://w...

2717
来自专栏好好学java的技术栈

重温java web过滤器filter

Filter 技术是servlet 2.3 新增加的功能。Filter翻译过来的意思就是过滤器,能对客户端的消息进行预处理,然后将请求转发给其它的web组件,可...

611

扫码关注云+社区