servlet学习笔记(一)

Servlet-学习笔记 Servlet-授课 一、 Servlet 1.1 Servlet概述 Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一。我们可以像学习Java基础一样,通过API来学习Servlet。这里需要注意的是,在我们之前JDK的API中是没有Servlet规范的相关内容,需要使用JavaEE的API。目前在Oracle官网中的最新版本是JavaEE8,该网址中介绍了JavaEE8的一些新特性。当然,我们可以通过访问官方API,学习和查阅里面的内容。 打开官方API网 阅读详情

SERVLET入门(一)


参考:http://www.cnblogs.com/xdp-gacl/p/3760336.html
这个博主的知识点写的非常棒而且细致,推荐新手入门的大家直接过去充能~

一.什么是servlet


servlet是按照servlet规范编写的java类。它运行于支持java的应用服务器中,主要用于响应web(HTTP)方面的请求。

二.servlet的作用


servlet在服务器端运行,主要用于处理客户端的请求。
web服务器习惯于处理静态页面,对于动态请求,一般交由一个帮助程序进行处理,再将处理后的静态页面返回给web服务器。servlet就是这样的帮助程序。通常由浏览器向web容器发送HTTP请求,根据web容器中的web.xml文件,决定由具体的某个servlet来对其进行处理。

三.servlet生命周期


servlet生命周期指的是,从创建servlet实例后,servlet存在到销毁的整个过程。
生命周期中主要有以下几个阶段:
1.实例化。servlet容器加载servlet类,并将.class 文件读取到内存中,由servlet容器创建一个servlet实例。
2.初始化。servlet容器调用init()函数完成参数的初始化。
3.运行。当servlet容器接收到请求时,会根据请求创建ServletRequest和ServletResponse对象,并将其传递给调用的service()方法。service()方法通过request获取请求的内容,并对其进行处理,将请求的结果封装在response中。每个请求均在独立的线程中运行。
4.销毁。servlet容器调用destroy()方法,销毁servlet对象,并释放它占用的资源。

在一个生命周期中,init()方法和destroy()方法都只会被调用一次。而service方法执行的次数则取决于被客户端访问的次数。

四.使用MyEclipse建立一个基础的servlet


1.新建一个web-project,生成的目录如下:
web-project

2.在src目录下,新建一个servlet文件
新建servlet1
新建servlet2
新建servlet3

那么,自动生成的servlet文件和在web.xml文件中的配置如下:
AutoServlet文件:

package com.test1;

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

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

public class AutoServlet extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public AutoServlet() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    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.print("    This is ");
        out.print(this.getClass());
        out.println(", using the GET method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    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.print("    This is ");
        out.print(this.getClass());
        out.println(", using the POST method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

对于每一个具体的程序块的用途,MyEclipse自动生成时都附上了详细的注释。

web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    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_3_0.xsd">
  <display-name></display-name>
  <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-name>AutoServlet</servlet-name>
    <servlet-class>com.test1.AutoServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AutoServlet</servlet-name>
    <url-pattern>/servlet/AutoServlet</url-pattern>
  </servlet-mapping>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

主要看<servlet></servlet><servlet-mapping></servlet-mapping> 这两对标签中的内容。在这里,配置了对特定servlet文件的映射关系。

注意:
(1)两个servlet-name必选相同;
(2)默认的url-pattern为:/servlet/servlet-name


接下来,将这个web-project部署到tomcat上,启动tomcat后,就可以在网页上访问这个servlet了。
网页访问servlet

访问的地址为:
http://localhost:8080/servlet-test/servlet/AutoServlet
也就是:"http://localhost:8080/" + web项目名称+web.xml中配置的url-pattern


五.其他细节

1.servlet的url映射配置

由于客户端是根据url来访问web中的资源,因此,要想访问一个servlet,就要把它映射到一个url地址上,这个工作,在web.xml中,由<servlet></servlet><servlet-mapping></servlet-mapping> 这两对标签来完成。
<servlet></servlet> 标签用于注册servlet,其中,servlet-name是servlet的名称,servlet-class中写servlet所在的完整类名。
<servlet-mapping></servlet-mapping> 标签用于映射一个已注册的servlet和它的对外访问路径。一个注册的servlet可以有多个访问路径。
如:

  <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-name>AutoServlet</servlet-name>
    <servlet-class>com.test1.AutoServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AutoServlet</servlet-name>
    <url-pattern>/servlet/AutoServlet</url-pattern>
  </servlet-mapping>    
  <servlet-mapping>
      <servlet-name>AutoServlet</servlet-name>
      <url-pattern>/1.html</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>AutoServlet</servlet-name>
      <url-pattern>/2.jsp</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>AutoServlet</servlet-name>
      <url-pattern>/3.php</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>AutoServlet</servlet-name>
      <url-pattern>/4.ASPX</url-pattern>
  </servlet-mapping>

那么,使用地址:
http://localhost:8080/servlet-test/servlet/AutoServlet
http://localhost:8080/servlet-test/1.html
http://localhost:8080/servlet-test/2.jsp
http://localhost:8080/servlet-test/3.php
http://localhost:8080/servlet-test/4.ASPX
都可以访问同一servlet。


此外,还可以使用*通配符来匹配映射的url地址。
使用通配符时,只有两种固定格式:
1.使用*.扩展名
2.使用正斜杠(/)开头,并以/*结尾。
如: 对于上述例子中的servlet,在web.xml中配置

  <servlet-mapping>
    <servlet-name>AutoServlet</servlet-name>
    <url-pattern>/servlet/AutoServlet</url-pattern>
  </servlet-mapping>    
  <servlet-mapping>
      <servlet-name>AutoServlet</servlet-name>
      <url-pattern>/find/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>AutoServlet</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>

那么,就可以使用:
http://localhost:8080/servlet-test/find/aabbcc
或:
http://localhost:8080/servlet-test/aabbcc.do
来访问上述servlet
(aabbcc可以由任意字符串代替)

对于多个注册的servlet都使用了通配符的情况,在映射过程中,遵循那个更相似,就匹配到哪一个的原则

2.<load-on-startup>标签

根据上面的知识点,可以知道,在处理客户端的servlet请求时,首先需要有一个servlet实例。对于多次请求,仅创建一个实例,调用一次init()方法。每次请求过程中,servlet引擎将创建新的HttpServletRequest请求对象和HttpServletResponse响应对象,并将其作为参数传递给service(),service()再根据请求的内容,调用响应的doXXX方法,对请求进行处理。
在web.xml中配置<load-on-startup>,那么,在web应用启动时,就会装载并实例化servlet,并调用实例对象的init()方法。

  <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-name>AutoServlet</servlet-name>
    <servlet-class>com.test1.AutoServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

标签中的数字,用于标记容器是否在启动时就加载这个servlet,以及加载的优先级。
当数字为负数或是无指定值时,容器只在该servlet被选择是才对它进行加载。
当数字为非负数是,表示容器在启动时就加载这个servlet。数字越小,启动这个servlet的优先级越高(如:0的优先级大于1)

3.缺省的servlet

当一个servlet的访问路径(url-pattern)配置为一个正斜杠(/)时,这个servlet就称为web容器的缺省servlet。
即,凡是找不到对应的<servlet-mapping></servlet-mapping>的url请求,都将访问该缺省servlet。

4.servlet线程安全

当多个客户端并发访问一个servlet时,web服务器就会为每一个访问创建一个线程,每个线程分别调用servlet实例的service()方法。如果多个service()方法同时访问同一个资源,就会导致线程安全问题。
线程安全问题只存在多个线程并发操作同一个资源的情况下,所以在编写Servlet的时候,如果并发访问某一个资源(变量,集合等),就会存在线程安全问题。
就之前学过的java基础部分的知识点而言,可以使用线程锁synchronized来解决线程问题.即,将可能产生线程安全问题的程序块写在

synchronized(this) {
    ....
}

中。当有线程访问该资源时,它就拿到了这把锁。那么,如果有并发的线程同时访问该资源,就必须等待上一个线程访问完毕,将锁释放出来。
但是,在实际的应用中,使用servlet时,不可以使用该方式。针对线程安全问题,在servlet2.4之前,采用的方法是,让servlet继承Sun公司提供的标记接口:SingleThreadModel,这样,这个servlet无论何时,都将单线程运行。
需要注意的是,这种方法的实质是产生多个Servlet实例对象,每个并发的线程分别对应一个实例对象。因此,这种方法并没有真正解决多并发的线程安全性问题,在servlet2.4以后,已被标记为deprecated(过时)

如何利用ADS中的耦合线设计带通滤波器并转换为HFSS模型 耦合线带通滤波器是一种常用的微带滤波器形式,由多个长度为四分之一波长的耦合线节组成,在所需频点形成谐振,构成滤波器的频率响应特性。首先我们先来了解一下耦合线带通滤波器的电路结构,见下图:包括两对耦合线,中间为公共连接点,其中两对耦合线的偶奇模阻抗为(Z1e,Z1o)和(Z2e,Z2o,端口输入阻抗为Z0)。2.指定一个初始奇偶模值,ADS优化出一个合适的结果,通过奇偶模值利用linecalc工具计算出微带耦合线尺寸。假设中心频率为2GHz,则对应频点的电长度为。5.运行结果,两个软件仿真结果基本一致。 阅读详情

相关推荐

别再死磕公式了!用Python+NumPy手把手实现机器人逆运动学数值求解(附避坑指南)

本文详细介绍了如何使用Python和NumPy实现机器人逆运动学(Inverse Kinematics, IK)的数值求解方法,包括牛顿-拉弗森法、雅可比矩阵计算及奇异位形处理。通过实战代码和避坑指南,帮助开发者快速掌握现代机器人学中的核心算法,提升工程实践能力。

weixin_30687051的博客 128

Servlet学习笔记

这篇学习笔记探索了Servlet的基本概念和相关技术。文章首先介绍了HTTP协议的基本原理和Tomcat服务器的作用,作为理解Servlet的基础知识。然后,文章深入讨论了如何实现一个Servlet,包括创建Servlet类、配置Servlet映射和处理HTTP请求的过程。同时,笔记详细解释了Servlet的生命周期,包括初始化、请求处理和销毁阶段。 在处理HTTP请求和响应方面,学习笔记介绍了ServletRequest和ServletResponse对象的功能和使用方法。

m0_61940795的博客 395

SQL Server 内存占用高分析及解决办法(超详细)

如果想让 Sql Server 主动释放 占用并空闲的内存空间,可以设置Sql Server占用内存的上限,就会让Sql server在。如执行存储过程,自定函数时,SQL Server 需要先二进制编译再运行,编译后的结果也会缓存起来,再次调用时就无需再次编译。才会释放一点占用的内存,所以很多时候,我们会发现运行SQL Server的系统内存往往居高不下这些内存一般都。缓存,以便于再次请求此页的数据的时候,直接从内存返回,就无需读取磁盘了,大大提高了速度。最后文章有啥不对,欢迎大佬在评论区指点!

2301_79080944的博客 3952

Servlet知识点学习笔记CG

Servlet是Java Web应用程序中的一种基于Java语言实现的服务器端组件,可以处理来自客户端的HTTP请求并生成响应。Servlet作为Web应用的一部分,它们通过请求-响应模型与客户端Web浏览器交互,动态生成Web内容。线程安全是指在多线程环境下,程序能够正确地处理多个线程同时访问共享资源的情况,不会导致数据的不一致或出错。在 Servlet 中,由于多个线程可能同时访问同一个 Servlet 实例,因此需要考虑线程安全的问题。

m0_62110645的博客 436

别再被网站识别成机器人了!用Python的undetected_chromedriver+Selenium实现无痕自动化

本文详细介绍了如何利用Python的undetected_chromedriver和Selenium实现无痕自动化,突破现代网站的反爬系统。通过修正浏览器指纹、模拟人类操作行为,并结合实战案例,帮助开发者构建难以被识别的自动化脚本,适用于电商监控等场景。

weixin_30367169的博客 253

【网络协议】TCP的拥塞控制机制

前言 计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。 所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别,拥塞控制是一个全局性的过程,涉及到所有的额主机、路由器,以及与降低网 拥塞控制的算法有:慢开始、拥塞避免、快重传、快恢复四种。 慢开始和拥塞避免 发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度

兰亭风雨的专栏 1万+

Servlet笔记

什么是servlet? servlet是服务端小程序。从大的方面说,servlet是一个标准或规范, 从小的方面说,就是class或者类。servlet程序必须运行在web容器或 应用服务器中。servlet主要功能是运行在应用服务器中执行并生成数据。

idwangzhixin的博客 274

SMPTE ST 2110 概论(一)

SMPTE ST 2110 概论(一)前言ST 2110与ST 2022-6ST 2110-10:基本结构与时序ST 2110-20:未压缩的视频流后续 前言 这是一份我在实习期间制作的,关于SMPTE ST 2110的简单介绍。 这篇文章主要以梳理总结 SMPTE ST 2110 的概念为主,关于具体的内容,比如IP数据报的格式、RTP时间戳的具体代码内容等等,大家可以查阅 SMPTE ST 2...

Cidd0422的博客 2万+

Java学习笔记一Servlet一

建立一个包,并在包内定义class文件: 配置,这里的day13_tomcat是虚拟目录,而这里资源名为/demo,需要将这里的Java类通过配置映射到demo上。这里的servlet-class是全称cn.itcast.web.servlet.ServletDemo1,serlet-name命名为demo1。将demo1映射为URL资源路径/demo1。 ...

肥叔菌的博客 8921

Java实战:绿盾加密文件批量解密工具Ldterm的实现与优化

本文详细介绍了基于Java开发的绿盾加密文件批量解密工具Ldterm的实现与优化过程。通过分析绿盾加密机制,结合Java流处理能力,实现了高效的文件解密方案,并分享了多线程处理、内存优化等性能提升技巧,适用于企业级数据迁移与备份场景。

weixin_29314405的博客 492

华为OD机试E卷 -猜字谜(Java & Python& JS & C++ & C )

小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下:请你写一个程序帮忙在谜底库中找到正确的谜底。谜面是多个单词,都需要找到对应的谜底,如果找不到的话,返回”not found”

算法大师! 3488

Servlet学习笔记《一》

关于Servlet的学习总结,一步一步学习Servlet。

dabai_cai的博客 414

学Simulink--特殊天气场景实例:基于Simulink的智能车辆雨天行驶仿真(感知与控制)

本文详细介绍了基于Simulink的智能车辆雨天行驶仿真系统。通过构建降雨-路面-传感器-控制全链路耦合模型,实现了雨天场景下的自适应控制。系统根据降雨强度动态调整路面附着系数和传感器性能参数,上层控制算法相应调整ACC安全距离、ESC增益等参数。仿真结果表明,系统能在不同降雨强度下自动降低车速、增大跟车距离,保持车辆稳定性。文章还提供了完整的Simulink建模流程、关键模型实现方法及工程实践要点,为全天候自动驾驶功能开发提供了有效的验证平台。

xiaoheshang_123的博客 167

servlet学习笔记(一)之servlet入门教程

一、知识准备 servlet 是在服务器上运行的小程序,一个 servlet 就是一个 Java 类,并且可以通过 “请求 - 响应” 编程模式来访问这个驻留在服务器内存里面的 servlet 程序 tomcat 容器等级以及 servlet 的位置 二、编写 servlet 继承 HTTPServlet,在创建时,直接指定父类 重写 doGet() 或者 doPos...

程序员世杰 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Servlet 学习笔记一

[day10] 1.如何开发一个Servlet 步骤: 1)编写java类,继承HttpServlet类 2)重新doGet和doPost方法 3)Servlet程序交给tomcat服务器运行!! 3.1 servlet程序的class码拷贝到WEB-INF/classes目录 3.2 在web.xml文件中进行配置

czzhenmsdn的专栏 373

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Servlet学习笔记一(Servlet介绍)

目录一:Servlet概述1.什么是Servlet 一:Servlet概述 1.什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把收到的请求交给Servlet来处理,在Servlet中通常需要: 接收骑请求数据 处理请求 完成响应 例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Se...

池鱼 591

Java学习笔记一Servlet三

Servlet是个特殊的Java类,每个Servlet可以响应客户端的请求。Servlet 提供不同的方法用于响应客户端请求。 事实上,客户端的请求通常只有GET 和POST 两种, Serviet 为了响应这两种请求,必须重写doGet和doPost两个方法。如果Servlet为了响应4 种方式的请求,则需要同时重写上面的4 个方法。大部分时候, Servlet 对于所有请求的响应都是完全一样...

肥叔菌的博客 9135

Servlet学习笔记一

一.Servlet 介绍: 问题: 服务器在接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求处理。但是逻辑代码是由程序员编写并放到服务器中,那么服务器怎么知道该怎么调用哪个类和哪个方法来进行请求处理。 解决: 程序员在编写代码的时候如果能够按照服务器能够识别的规则进行编写,浏览器按照指定的规则进行发送请求,那么服务器就可以调用并执行响应的逻辑.代码进行请求处理了。举个例子:图书馆借书 ...

时间过的真的很快 197

Java Servlet学习笔记(一)初识servlet

Servlet简介 Servlet是运行在web容器上的小程序。这种程序使用Java编程语言实现。在通信量大的服务器上,Servlet的优点在于它们的执行速度快于CGI程序,各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进行,这意味着服务器端处理请求的系统开销明显降低。 Servlet生命周期 服务器收到客户端的请求后: 1.web容器判断相应的Servlet类是否已加

Chris Mao的专栏 1934

Servlet学习笔记(一)

使用Servlet所需要导入的包: java.io.*; javax.servlet.*; javax.servlet.http.*; 配置Tomcat 的web.xml文件 <...

aerfa2357的博客 256

Servlet学习笔记(一)

Servlet学习 一. Servlet概述 Servlet(Server + Applet) 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。 二. Servlet API 主...

Marco___的博客 236
上一篇: CSS入门教程(二)
下一篇: servlet学习笔记(二)
may夏至未至
博客等级 码龄11年 93粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值