Servlet 请求和响应

这篇具有很好参考价值的文章主要介绍了Servlet 请求和响应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Servlet的存在就是要为客户服务。servlet的任务是得到一个客户的请求,再发回一个响应。

1 servlet的生命周期

加载类

容器加载servlet类。

初始化servlet

Servlet类的无参构造函数运行。

init()

在service()方法被调用之前执行,且Servlet在整个生命周期中,值执行一次。

service()

处理客户请求,有这个方法决定调用哪个方法(doGet或doPost 或者其他)。

destory()

容器调用这个方法,在servlet被回收前有机会清理资源。

表 servlet的生命周期

1.1 init() 方法

构造函数只是使Servlet类成为一个对象,而执行完init()是成为一个Servlet。

在执行init()方法期间,将会访问到ServletConfig及ServletContext对象。

ServletConfig

  1. 每个servlet都有一个ServletConfig对象。
  2. 用于向servlet传递部署时信息。
  3. 用于访问ServletContext。
  4. 参数在部署描述文件中配置。

ServletContext

  1. 每个Web应用有一个ServletContext(AppContext)。
  2. 用于访问Web应用参数(也在部署描述文件中配置)。
  3. 相当于一种应用公告栏,可以在这放置消息,应用的其他部分可以访问这些信息。
  4. 用于得到服务器信息,包括容器名称、版本以及所支持AP I得版本等。

表 ServletConfig和ServletContext对象

2 HTTP方法

GET

从服务器获取资源。

POST

用于向服务器提交数据、创建新的资源。通常用于提交表单数据、发送数据到服务器上的数据库或进行身份验证。

HEAD

只要求得到GET返回结果的首部部分。

TRACE

要求请求信息回送,以便客户可以看到中间服务器进行了哪些进度或增量,一般用于测试。

PUT

更新资源。主要用来传输文件,就像FTP协议的文件上传一样。但是因为HTTP/1.1 的PUT方法不带验证机制,存在安全性问题,所以一般都不用这个方法进行文件传输。

DELETE

用于删除服务器上的资源。

OPTIONS

用于向服务器请求关于支持的方法、认证信息和可接受的内容类型等信息。

CONNECT

要求连接以便建立隧道。

表 http常见方法

2.1 幂等操作

幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

GET、HEAD和PUT方法是幂等的。

3 请求 HttpServletRequest

getParameteValue() 是用来从请求中得到一个参数。返回值总是一个String。

如果对应一个给定的参数名有多个参数值,要使用getParameteValues()方法来返回一个String数组。

getReader()和getInputStream()方法:只包含请求体和不包含请求头。

getHeader()和getIntHeader()方法:获取请求头信息。

getRemotePort()

获取客户的端口。

getServerPort()

获取服务器所监听的端口。

getLocalPort()

服务器会为每个请求线程找一个不同的本地端口,该方法获取的就是这个本地端口。

表 getServletPort()、getLocalPort()和getRemotePort()方法对比

4 实战

编写一个Servlet,要求打印出其生命周期中各个节点,同时编写Servlet对应的多个HTTP方法,获取相关请求参数及做出响应。

public class LifeServlet extends HttpServlet {

    public LifeServlet() {
        System.out.println("LifeServlet 无参数构造函数");
    }

    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("LifeServlet init()");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.service(req, resp);
        System.out.println("LifeServlet service()");
    }

    @Override
    public void destroy() {
        super.destroy();
        System.out.println("LifeServlet destroy");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost");
    }

//    运行结果:
//    LifeServlet 无参数构造函数  // 在第一次发起该servlet请求时触发
//    LifeServlet init()
//    doGet
//    LifeServlet service()
//    ...  // 停止tomcat
//    LifeServlet destroy
}

public class HttpMethodsServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("param1:" + req.getParameter("params1"));
        String[] param2s = req.getParameterValues("param2");
        System.out.println("param2:" + Arrays.asList(param2s));
        System.out.println("headNames:" + req.getHeaderNames());
        BufferedReader reader = req.getReader();
        System.out.println("reader:" + reader.readLine());

        PrintWriter writer = resp.getWriter();
        writer.println("hello response");
        reader.close();
        writer.close();
    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    <servlet>
        <servlet-name>lifeServlet</servlet-name>
        <servlet-class>controller.LifeServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>lifeServlet</servlet-name>
        <url-pattern>/lifeServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>httpMethodsServlet</servlet-name>
        <servlet-class>controller.HttpMethodsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>httpMethodsServlet</servlet-name>
        <url-pattern>/httpMethods</url-pattern>
    </servlet-mapping>

</web-app>

web.xml文章来源地址https://www.toymoban.com/news/detail-694416.html

到了这里,关于Servlet 请求和响应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于javaweb+mysql的jsp+servlet图书图书馆管理系统(java+jsp+layui+bootstrap+servlet+mysql)

    基于javaweb+mysql的jsp+servlet图书图书馆管理系统(java+jsp+layui+bootstrap+servlet+mysql) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 基于javaweb+mysql的JSP+Servlet图书图书馆管理系统

    2024年02月04日
    浏览(53)
  • Servlet JSP-实现简单的登录功能

    本篇文章讲解如何使用Servlet-JSP-实现简单的登录功能。我们在进行Servlet和JSP实现简单登录功能的过程中,首先通过Eclipse创建了一个Maven项目,这为我们的Web应用提供了良好的项目管理和依赖管理。接下来,我们解决了新建项目时可能出现的报错状态,通过右击项目的Deployme

    2024年01月23日
    浏览(54)
  • 基于javaweb+mysql的jsp+servlet幼儿园管理系统(java+jsp+easyui+h-ui+servlet+mysql)

    基于javaweb+mysql的jsp+servlet幼儿园管理系统(java+jsp+easyui+h-ui+servlet+mysql) 私信 源码获取及调试交流 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 基于javaweb的JSP+Servlet幼儿

    2024年01月16日
    浏览(75)
  • 基于javaweb+mysql的jsp+servlet学生成绩管理系统(管理员、教师、学生)(java+jsp+servlet+javabean+mysql+tomcat)

    基于javaweb+mysql的jsp+servlet学生成绩管理系统(管理员、教师、学生)(java+jsp+servlet+javabean+mysql+tomcat) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 管理员:个人信息、课程

    2024年02月02日
    浏览(58)
  • 掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记

    🚀🚀1. 什么时间直播? 晚上8:00到10:00 🚀🚀2. 每周直播几天? 3天(周一、周三、周五) 本周比较特殊:周四周五周六三天直播,从下周开始就是一三五直播。 🚀🚀3. 直播什么内容? 从JavaWEB开始。(Servlet为核心,从Servlet开始学习。) JSP(JSP使用较少了,但是还有用,

    2024年02月15日
    浏览(41)
  • day32-EMP项目实战(servlet+jsp)

    1. 1.  创建maven工程,导入依赖,创建service(服务包),dao(持久包),servlet(控制包),entity(实体包)包,jsp(页面) 2.  创建数据库,创建表t_user,t_employee 3.  依据数据库字段创建实体类User,Employee 4.  创建工具类BaseDao,UserDao和其实现类,EmployeeDao和其实现类;重写实

    2024年02月13日
    浏览(45)
  • 使用JSP+Servlet+MySQL实现登录注册功能

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏: MySQL学习 🥭本文内容:使用JSP+Servlet+MySQL实现登录注册功能 📚个人知识库: Leo知识库,欢迎大家访问 大家好,

    2024年02月04日
    浏览(51)
  • jsp+servlet+mysql阳光网吧管理系统

    项目介绍: 本系统使用jsp+servlet+mysql开发的阳光网吧管理系统,纯手工敲打,系统管理员和用户角色,功能如下: 管理员:修改个人信息、修改密码;机房类型管理;机房管理;机位(主机)管理;用户管理(冻结、充值);用户消费管理; 用户:注册、登录;快捷方式快

    2024年02月10日
    浏览(39)
  • 基于Servlet+JSP的增删改查练手项目

    我们每写一步,就测试一步,不要等到所有都写好了再测试,如果都写好了再测试,最后出错的话,会很崩溃,代码量大,调试就不容易,话不多说,开始今天的练手项目。下面的代码,每一步都是按照我自己的步骤,一步一步敲出来,调试出来的,大家第一遍可以跟着敲代

    2024年02月09日
    浏览(46)
  • 学生信息管理系统(mysql+jsp+servlet)

    JDBC是Java Database Connectivity(Java数据库连接)的缩写,编程人员可以通过这个API接口连接到数据库,并使用结构化查询语言(SQL)完成对数据库的查找和更新 JDBC的目标是屏蔽不同的数据库驱动程序之间的差别,为开发者提供一个标准的、纯Java的数据库程序设计接口,为在Ja

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包