首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaWeb入门之Servlet基础 1

JavaWeb入门之Servlet基础 1

原创
作者头像
黄桂期
修改于 2018-05-13 16:02:46
修改于 2018-05-13 16:02:46
99710
代码可运行
举报
文章被收录于专栏:土豆专栏土豆专栏
运行总次数:0
代码可运行

写给还是小白的我们,一起加油~

首先来简单介绍一下Servlet,它是和平台无关的服务器端组件,运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应的模式”。

简单来说,就是Servlet可以通过浏览器直接访问Java类。

Servlet可完成以下功能:

  • 创建并返回基于客户请求的动态HTML页面
  • 创建可嵌入到现有HTML页面中的部分HTML页面
  • 与其他服务器资源(如数据库或基于Java的应用程序)进行通信

Servlet容器响应客户请求的过程:

再来讲述一下Servlet的生命周期,以下方法都是由Servlet容器负责调用:

  1. 构造器 只有在第一次请求Servlet的时候,创建Servlet的实例,调用构造器,而且Servlet是单实例的。
  2. init 只被调用一次,在创建好实例后会立即被调用,它用于初始化Servlet
  3. service 被多次调用,每次请求都会调用service方法。实际上是用于响应请求的
  4. destroy 只被调用一次,在当前Servlet 所在的web应用被关闭前调用,它用于释放当前Servlet所占有的资源

Servlet容器响应客户请求的过程:

  1. Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则执行第2步
  2. 装载并创建该Servlet的一个实例对象:调用该Servlet的构造器
  3. 调用Servlet实例对象的init()方法
  4. 创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去
  5. web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法

然后就是在ecplise中的配置了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
web.xml:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0">
    <!-- 配置当前WEB应用的初始化参数 -->
    <context-param>
        <param-name>driver</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
    <context-param>
        <param-name>jdbcUrl</param-name>
        <param-value>jdbc:mysql://qwikki</param-value>
    </context-param>
      <!-- 配置和映射Servlet -->
      <servlet>
          <servlet-name>helloServlet</servlet-name><!--servlet名字-->
          <servlet-class>per.huang.pra.HelloServlet</servlet-class><!--servlet对应的Java代码位置-->
          <!-- 配置Servlet的初始化参数 -->
          <init-param>
              <param-name>user</param-name>
          <!-- 参数值 -->
              <param-value>root</param-value>
          </init-param>
          <load-on-startup>5</load-on-startup><!--servlet执行顺序-->
      </servlet>
      <servlet-mapping>
          <servlet-name>helloServlet</servlet-name><!--servlet名字-->
          <url-pattern>/hello</url-pattern><!--地址栏访问路径-->
      </servlet-mapping>
</web-app>

当servlet配置了初始化参数之后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init()方法时,将ServletConfig对象传递给Servlet。所以我们可以通过Servlet对象得到当前servlet的初始化参数信息。

附上第一个Servlet程序,方法的作用已在注释里说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package per.huang.pra;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet{

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("destroy");
    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        System.out.println("getServletConfig");
        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        System.out.println("getServletInfo");
        return null;
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("init");
        //获取Servlet的初始化参数和值
        String user=servletConfig.getInitParameter("user");
        System.out.println("user: "+user);
        //获取ServletContext对象
        ServletContext servletContext=servletConfig.getServletContext();
        String driver=servletContext.getInitParameter("driver");
        System.out.println("driver: "+driver);
        Enumeration<String> names2=servletContext.getInitParameterNames();
        while(names2.hasMoreElements()){
            String name=names2.nextElement();
            System.out.println("--> "+name);
        }
        //获取文件的绝对路径(在服务器上的路径,而不是这个文件的绝对物理路径)
        String realPath=servletContext.getRealPath("/webContent里面的文件名");
        System.out.println(realPath);
        //获取当前WEB应用的名称
        String contextPath=servletContext.getContextPath();
        System.out.println("contextPath:"+contextPath);
        //获取当前WEB应用的某一个文件对应的输入流
        try {
            ClassLoader classLoader=getClass().getClassLoader();
            InputStream is=classLoader.getResourceAsStream("jdbc.properties");
            System.out.println("1."+is);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            InputStream is2=servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
            System.out.println("2."+is2);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("service");
    }
    public HelloServlet(){
        System.out.println("constructor");
    }

}

Servlet还有很多东西需要学习,今天就先讲一部分,未完待续~

借用一句话,没有天生的高手,也没有永远的菜鸟!小白们一起加油~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
写的特别好, 一目了然厉害了
写的特别好, 一目了然厉害了
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
JavaWeb后端入门6—Servlet
Servlet是一个运行在Web服务器上的Java程序,用于处理从Web客户端发送的请求并对请求做出响应。
用户6948990
2025/04/03
1380
JavaWeb后端入门6—Servlet
JavaWeb入门之Servlet小练习
在web.xml文件中设置两个WEB应用的初始化参数,username,password,创建一个html页面,定义两个请求字段并发送到一个Servlet中,对应web.xml中的参数是否一样;若一致,响应hello:username;若失败则Sorry:username
黄桂期
2018/05/16
1.1K5
javaEE之JavaWeb知识点(二)
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API动态的向客户端输出内容
软件小生活
2021/10/08
4780
javaEE之JavaWeb知识点(二)
Servlet 学习笔记
Servlet 运行在服务器上的 java 类; Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据。 现在我们知道了 Servlet 是运行在服务器上的 Java 类,那么什么是服务器?我们平常最常用的服务器都有哪些呢?   服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应;   最常用的Web服务器是Apache和Microsoft的Internet信息服务器。 对于现在大多
bgZyy
2018/05/16
6840
ServletContext对象
ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。
星哥玩云
2022/09/14
3270
Servlet技术入门及其实践
当浏览器请求服务器对应服务时,服务器会根据请求url查找是否创建了对应url的servlet;如果已经创建则直接调用对应的service方法进行服务的处理,如果没有创建,则会创建对应的servlet并调用对应servlet的init方法进行servlet的初始化工作,之后继续调用service方法进行服务的处理,当服务器正常关闭时,在销毁删除servlet对象之前,会调用对应servlet的destory方法,进行资源释放或关闭执行功能的执行
张哥编程
2024/12/13
1450
第71节:Java中HTTP和Servlet
什么是协议,就是规则,规范,用于双方在交互,通讯的时候遵循的一种规范,规则.而http协议是对网络上的客户端和服务端在执行http请求的时候遵循的一种规范,其实就是规定了客户端在访问服务器端的时候,要带上一些东西,服务端返回数据的时候,也要带点东西,礼尚往来嘛!!!
达达前端
2019/07/03
5680
第71节:Java中HTTP和Servlet
JavaWeb
1、servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。 2、servlet是运行在服务器上的java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
Java微观世界
2025/01/20
2120
JavaWeb
Java匹马行天下之JavaWeb核心技术——Servlet
Servlet是在服务器上运行的小程序,也就是一个Java类,但比较特殊,不需要new,自动就可以运行。也有创建、垃圾回收和销毁过程。Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
泰斗贤若如
2019/06/18
7810
Log4j详细使用教程
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log
java达人
2018/01/31
1K0
Log4j详细使用教程
解读 Servlet 源码:GenericServlet,ServletConfig,ServletContext
Servlet 必须重写的五方法分别为:init(),service(ServletRequest request, ServletResponse response),getServletConfig(),getServletInfo(),destroy(),还有一个无参构造器 什么时候创建的,什么时候调用的,什么时候销毁的。
RainbowSea
2023/03/20
7900
Servlet基础入门学习1
描述:在进行JavaWeb开发学习的时候必不可少就是Tomcat Web 容器服务器,因为它开源免费、便于上手,并且使用安装简单。
全栈工程师修炼指南
2020/10/23
7910
Servlet基础入门学习1
谈谈 ServletConfig 和 ServletContext
一、ServletConfig 和 ServletContext 的概念含义创建时期作用范围二、ServletConfig 和 SerlvetContext 代码表示ServletConfigServletContext
cxuan
2019/06/03
4530
log4j使用方法_pipe使用教程
地址:http://www.codeceo.com/log4j-usage.html
全栈程序员站长
2022/10/04
6370
log4j使用方法_pipe使用教程
Servlet笔记3(Eclipse实现)
目录 --------- Servlet学习笔记1------------ ----------Servlet学习笔记2------------ ----------Servlet学习笔记3------------
别团等shy哥发育
2023/02/25
3220
Web阶段:第八章:Servlet上
Servlet技术 a)什么是Servlet 1、Servlet是一个接口(JavaEE规范) 2、Servlet是运行在服务器(Tomcat或其他的服务器)上的小程序。 3、Servlet程序用来接收用户的请求,和给客户端响应数据。(接收请求,回传响应)
Java廖志伟
2022/09/28
2950
Web阶段:第八章:Servlet上
当Java遇见了Html--Servlet篇
方志朋
2017/12/29
8840
当Java遇见了Html--Servlet篇
JavaWeb09-Servlet(Java真正的全栈开发)
Servlet 一.Servlet 1. servlet介绍 Servlet 是在服务器上运行的小程序。Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。(它可以做css和html做的所有)这个过程为如图: a. 客户端发送请求至服务器端; b. 服务器将请求信息发送至 Servlet; c. Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求; d. 服务器将响应返回给客户端。 一个 Servlet 就是 Java语言中的一个类,
Java帮帮
2018/03/16
1.2K0
JavaWeb09-Servlet(Java真正的全栈开发)
Java Web Servlet (Part B)- ServletConfig &amp; ServletContext
ServletConfig类时Servlet程序的配置信息类,使用Servlet可以实现
RiemannHypothesis
2022/09/26
3770
Java Web Servlet (Part B)- ServletConfig &amp; ServletContext
Javaweb03-servlet&filter
第一个servlet应用程序,实现servlet接口 定义:凡是实现了servlet api接口(或者继承servlet api接口的实现类)的类就是servlet应用程序;
化羽羽
2022/10/28
2050
相关推荐
JavaWeb后端入门6—Servlet
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档