Servlet

servlet体系结构 一、servlet体系结构图 二、servlet/jsp的网络拓扑图 三、Servlet的开发流程(以Tomcat为例,纯手工建立) 1、在%TOMCAT_HOME%\webapps下WEB-INF的文件夹建立classes、lib目录,classes目录存放编译后的文件,lib目录存放要用到的外部库文件,另外创建一个很重要的文件:web.xml。we 阅读详情

1、Servlet简介

Servlet全称Java Servlet。servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
功能:用于交互式地浏览和修改数据,生成动态Web内容。

2、Servlet的使用

1、编写java类实现servlet接口(可以编写一个继承 javax.servlet.GenericServlet 或者 javax.servlet.http.HttpServlet 的servlet)
2、部署到web服务器中

3、在MyEclipse中创建servet

1、创建web project
2、继承servlet

public class MyServlet implements Servlet {
    //只创建一次
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("Servlet------init()");
    }
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("Servlet------service()");
    }
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }
    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("Servlet------destory()");
    }

}

3、在web.xml中配置
web.xml其实就是servlet的一个配置文件,通过这个配置文件来寻找对应的servlet处理业务。

sun公司就是这样设计,容器通过配置文件web.xml找相应的servlet这样有助于灵活和可维护性
这里写图片描述

4、Servlet生命周期

这里写图片描述
1、init()方法:服务器调用该方法初始化Servlet
2、service()方法:初始化完毕,服务器调用该方法响应客户的请求
3、destroy()方法:服务器调用该方法消灭servlet对象
其中,init()方法只在Servlet第一次被请求加载的时候被调用一次,当有客户再请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service方法响应客户的请求
Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。

针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。

在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

5、GenericServlet

GenericServlet 是对servlet的封装,它实现 了Servlet 和 ServletConfig 接口。如果我们实现原有的Servlet,要写每一个servlet都要写init(),等生命周期的方法。如果再加上一些都是相同的代码,会有很多不必要的工作。因此GenericServlet 是在Servlet的基础上实现servlet接口,对它进行封装,主要做以下工作:

  1. init()方法,并保存了config对象
  2. 空参init()方法,防止调用原生init()方法
  3. service(),声明抽象(具体业务而定)
  4. 实现getServletInfo,getServletConfig
  5. 实现了servletConfig接口. 接口中的方法直接调用config实现类实现
  6. destory()方法空实现

6、HttpServlet

HttpServlet是在GenericServlet 基础上进行的再一次封装,它是GenericServlet 的子类
在这里它比GenericServlet 又做了一些全局的通用的处理

1、把ServletRequest,ServletResponse强转成HttpServletRequest,HttpServletResponse以为在具体的开发中用到的是ServletRequest封装的HTTP请求

 @Override
    public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException {

        HttpServletRequest  request;
        HttpServletResponse response;

        try {
            request = (HttpServletRequest) req;
            response = (HttpServletResponse) res;
        } catch (ClassCastException e) {
            throw new ServletException("non-HTTP request or response");
        }
        service(request, response);
    }

2、处理用户的不同请求

1、METHOD_GET
2、METHOD_HEAD
3、METHOD_POST
4、METHOD_DELETE
5、METHOD_OPTIONS
6、METHOD_TRACE

 protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

        String method = req.getMethod();

        if (method.equals(METHOD_GET)) {
            long lastModified = getLastModified(req);
            if (lastModified == -1) {
                // servlet doesn't support if-modified-since, no reason
                // to go through further expensive logic
                doGet(req, resp);
            } else {
                long ifModifiedSince;
                try {
                    ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
                } catch (IllegalArgumentException iae) {
                    // Invalid date header - proceed as if none was set
                    ifModifiedSince = -1;
                }
                if (ifModifiedSince < (lastModified / 1000 * 1000)) {
                    // If the servlet mod time is later, call doGet()
                    // Round down to the nearest second for a proper compare
                    // A ifModifiedSince of -1 will always be less
                    maybeSetLastModified(resp, lastModified);
                    doGet(req, resp);
                } else {
                    resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                }
            }

        } else if (method.equals(METHOD_HEAD)) {
            long lastModified = getLastModified(req);
            maybeSetLastModified(resp, lastModified);
            doHead(req, resp);

        } else if(){
        ......
        }......

}

7、Servlet线程安全问题

从Servlet的生命周期中可以看出,我们调用init()方法只执行一次,当我们再次运行的时候已经不调用init方法
因此,共享引起线程安全。如果使用成员变量来接受线程中的参数,那么就就会出现线程安全问题。

解决办法:把成员变量放到局部变量中

8、Servlet路径配置问题

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>com.example.MyServlet</servlet-class>
  </servlet>

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

在的url-pattern中配置servlet的路径,在这是一个相对路径/表示在我们当前的目录下,在这里相当于http:localhost:8080/ServletDemo

8、ServletConfig

在Servlet的配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下)
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

9、ServletContext

ServletContext,是一个全局的储存信息的空间。
ServletContext定义一组方法,servlet 使用这些方法与其 servlet 容器进行通信,例如,获取文件的 MIME 类型、分发请求或写入日志文件。
比如 Servlet之间传递数据;
通过获取ServletContext对象设置

public void setAttribute(String name, Object object);

通过getAttribute获取

   public Object getAttribute(String name);
Servlet的起源以及Servlet到底是什么 详细介绍了Java Web中的Servlet的概念以及Servlet的发展历程。 1 Java Web概述 Java EE全名为Java Platform Enterprise Edition,即Java平台企业版。JavaEE以JavaSE作为语法基础,可以看作一个大的框架,提供了的一系列使用Java语言进行企业级应用开发的组件和API标准,没有提供具体的实现(也就是接口)。比如常见的Servlet、JDBC、EJB、JNDI、Servlet、JSP等等都是它制定的企业级应用程序开发的规范或者标准. 阅读详情

相关推荐

安卓与Servlet的交互实现

本文还有配套的精品资源,点击获取 简介:安卓客户端与Servlet服务器端的交互是移动应用和服务端通信的关键。本文深入探讨了安卓客户端功能的实现,以及如何通过Servlet进行数据处理。内容包括客户端的请求发送、请求头设置、Servlet响应处理、业务逻辑实现以及安全性考虑等。了解这一实现过程对于构建高效、稳定、安全的客户端-服务器应用至关重要。 1. 安卓客户端功能...

weixin_32287387的博客 1917

Android之实现Servlet

被搞了四天心态,终于把Servlet成功实现了,主要是jdbc没连接成功,问题在于jdbc版本最好和MySQL版本一致,整体流程是先写一个properties,里面写入连接jdbc的参数,如driver,url,username,password,然后写一个BaseDao的类,获取连接资源 private static String url=null; private static String user=null; private static String password =null; /

maoyusan的博客 877

Android中发送Http请求(包括文件上传、servlet接收)的实例代码

代码如下:/*** 通过http协议提交数据到服务端,实现表单提交功能,包括上传文件* @param actionUrl 上传路径 * @param params 请求参数 key为参数名,value为参数值 * @param file 上传文件 */public static void postMultiParams(String actionUrl, Map params, FormBean[] files) {try {PostMethod post = new PostMethod(actionUrl);List formParams = ne

Java-Servlet技术实现服务端,Android(安卓)平台作为客户端,实现一个个人店铺【个人蛋糕店】

使用Servlet技术实现服务端,使用Android平台作为客户端,实现一个个人店铺,店铺商品不限。功能要求如下:1. 提供登录、注册功能;(10分) 2. 首页面包括“商品列表”子页面、“订单”子页面和“我的”子页面;(20分) 3. 在商品列表页点击某个商品列表项可跳转到该商品的详情页面,在商品详情页面可以实现加入购物车和购买操作;商品数据来自于服务端;(20分) 4. 订单页显示个人的订单历史记录

程序员象漂亮的博客 981

电商客服效率翻倍!手把手教你用影刀RPA+AI搭建智能回复系统(附实战配置)

本文详细介绍了如何利用影刀RPA+AI技术搭建电商智能客服系统,实现24小时在线回复,大幅提升客服效率。通过零代码配置、Excel词库管理和AI语义理解,系统能处理80%常规咨询,响应速度稳定在3秒内,特别适合中小电商降低成本并提升服务质量。

weixin_42520661的博客 548

Vivado XDMA仿真实战:从配置到链路训练全解析

本文深入解析了Vivado中XDMA IP核的仿真实战流程,重点剖析了PCIe链路训练状态机(LTSSM)的工作原理与调试方法。通过搭建仿真环境、解读日志与波形,手把手指导如何从配置、链路训练(LTSSM)到BAR映射与DMA启动进行全流程分析与问题定位,帮助工程师掌握核心调试技能,确保PCIe链路稳定与数据传输正确。

weixin_29197051的博客 154

Android客户端HTTP请求服务端Servlet

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节祝大家都能得到自己心仪工作。一个人可以走的很快,但一群人才能走的更远。

2301_76348189的博客 1119

AURIX TC397开发板到手第一步:用iLLD库驱动LED流水灯(附完整代码)

本文详细介绍了如何使用英飞凌AURIX TC397开发板和iLLD库实现LED流水灯效果。从开发环境配置到硬件连接,再到完整的代码实现,逐步引导开发者完成项目。文章还提供了优化建议和常见问题解决方案,帮助嵌入式开发新手快速上手。

weixin_30911451的博客 390

什么是servlet ,servlet的作用

什么是servlet ,servlet的作用 1、简单来说servlet是运行在服务器上的java程序 servlet由servlet容器管理,servlet容器也叫 servlet引擎,是servlet的运行环境,给发送的请求和响应之上提供网络服务 2、servlet的作用 通俗来讲servlet专门用来接收客户端的请求,专门接收客户端的请求数据,然后调用底层service处理数据并生成结果 浏...

吴大盖的博客 3万+

vue2 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue2,nuxt2,高德地图,热力图,绘制热力图层,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅代表,人流量,vue2使用高德地图实现某个区域热力图,vue高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue2中使用高德地图渲染热力图组件,高德地图使用热力图详细教

✅ 精选推荐文章 4201

Vue3 - Element Plus 下拉选择器 el-select 覆盖修改 placeholder样式,解决覆盖不生效问题(支持修改文字颜色、文字大小、选择器边框、hover效果、宽高等任意样式

vue3,element-plus,el-select,下拉选择器,下拉选择框,Select选择器,deep覆盖无效怎么办,怎么修改placeholder文字颜色,选择器select修改边框样式,修改文字大小,elementPlus选择器如何覆盖hover效果,使用deep改不了样式,修改边框颜色,select去掉边框,vue3+elementPlus中select选择器如何修改placeholder文字样式,修改el-select样式,select选择器样式覆盖不了咋办,el-select如何覆盖原样式,

🏆 前端领域优质创作者 1万+

Servlet及Tomcat的配置

servlet 动态网页 1、访问web服务器上的某个页面,访问的内容会发生变化 2、动态网页和动态HTML页面的区别 3、动态网页的源文件会随网页的变化而变化,而动态HTML页面的源文件不会发生变化 动态网页程序与引擎 1、首先使用某种编程语言编写出相应的动态网页程序 2、然后由一个专门的web服务程序模块(引擎)来解释执行 3、引擎是动态网页程序和浏览器之间的桥梁 4、浏览器、引擎、API、动...

渣渣瑞 2400

jsqlparser 版本不兼容:net.sf.jsqlparser.statement.select.SelectItem 以及 select.SelectBody 解决方法

看Bug直接定位到最后面的错误提示,一开始以为是UnabletostartembeddedTomcat的基本错误,后续发现排查方向错误!问题比较复杂,不过这类问题可看:出现WebServerException:UnabletostartembeddedTomcat解决方法(全)

码农研究僧的博客 2673

《Java Servlet编程》笔记(Servlet简介)

         在校图书馆偶看到《JAVA SERVLET编程》(OREILLY)如获至宝,遂借之,转而续借,决心把它好好的看一下。于是便有以下的学习笔记。        这本书共有二十章,分别从现在SERVLET的应用的不同方面对SERVLET的编程进行了讲解,是不一本不错的好书。在下边的笔记里,分别对这二十章进行总结。Java Servlet? VS CGI ===========

null 2098

在 SAP BTP ABAP 环境里直连 ABAP On-Premise OData

摘要 SAP BTP ABAP Environment 2311版本后,OData集成链路迎来重大改进:Service Consumption Model升级为v2版本,通过压缩模型到单一类减少对象数量;通信管理推荐采用Communication Arrangement替代传统Destination,提供更清晰的治理边界。新版支持同时生成OData v2/v4消费模型,并通过标准工厂类创建代理。配置需关注四层对象:Outbound Service声明协议入口,Scenario定义认证方式,System描述通

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1918

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java 调用servlet_[Java Servlet]调用 Servlet

要调用 Servlet 或 Web 应用程序,请使用下列任一种方法:由 URL 调用、在 标记中调用、在 标记中调用、在 JSP 文件中调用、在 ASP 文件中调用。1. 由 URL 调用 Servlet这里有两种用 Servlet 的 URL 从浏览器中调用该 Servlet 的方法:(1) 指定 Servlet 名称:当用 WebSphere应用服务器 管理器来将一个 Servlet 实例添...

weixin_30253289的博客 1670

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Servlet 规范笔记—servlet概念及结构

Servlet, 这个词对java程序员并不陌生,我想几乎每个java程序员在学习J2EE知识时,首先学习的就是servlet,这是一种正确的学习方式,在我看来Servlet是J2EE的基础,要熟练的掌握J2EE,必须深刻的了解Servlet的原理,因为你想想,现在只要是web相关的技术或框架,无论是开源的、非开源的,哪个和Servlet没有关系? Spring MVC、Struts、WebW

XTU_xiaoxin的专栏 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Servlet系列之Servlet3异步

入门案例;

lonelymanontheway的博客 1358

Servlet与Servlet、JSP与Servlet的跳转

Servlet与Servlet之间的跳转 Servlet和Servlet之间的跳转,可以通过请求转发来实现,即RequestDispatcher对象的forward方法;也可以使用重定向方法,即HttpServletResponse对象的sendRedirect方法。 ...

lanadelrey13的博客 3375

SERVLET 高效总结

SERVLET 高效总结 一、Servlet简介 Servlet是JavaWeb或者JavaEE基础、学会了servlet, 你就入了Javaweb开发的门。Servlet是sun公司提供的一门用于开发动态web资源的技术。Sun公司提供了一套标准的ServletAPI, Servlet开发有二个步骤(1)书写servlet代码 (2) 部署到应用服务器上(Tomcat等)。同样servlet使用Java语言、具有Java语言的优点,如跨平台。 在文章之前推荐一本工具书--《head first

weixin_42177713的博客 747

[Java Servlet]调用 Servlet

要调用 Servlet 或 Web 应用程序,请使用下列任一种方法:由 URL 调用、在 <FORM> 标记中调用、在 <SERVLET>标记中调用、在 JSP 文件中调用、在 ASP 文件中调用。1. 由 URL 调用 Servlet这里有两种用 Servlet 的 URL 从浏览器中调用该 Servlet 的方法:(1) 指定 Servlet 名称:当用 WebSphe...

weixin_30834019的博客 778

Servlet与SpringBoot的前世今生

Servlet与SpringBoot的前世今生个人分为了4个阶段原始的servlet,servlet中维护service(手动new),service中维护dao(QueryRunner等DbUtils),此时在web.xml中配置好url映射与servlet的关系,在tomcat接收到请求时,根据匹配的servlet,通过反射创建servlet对象,执行doGet或doPost方法。一般需要手动设置一些响应头信息。此时有了spring框架,通过spring的ioc容器,可方便的创建出service层以及d

qq_43750656的博客 2785

Servlet开发之实现Servlet接口

安装好Tomcat后 在tomcat>lib下面的 这个servlet-apt.jar jar包需要导入到项目中. 第一步、创建java文件并实现Servlet接口: public class Hello implements Servlet{ // 该函数用于初始化该servlet(类似类的构造函数) // 这个函数只会被调用一次 (当用户第一次访问该serv...

weixin_43770982的博客 3479

Servlet技术简介之 Servlet的配置

总的说来Servlet的配置包括Servlet的名字,Servlet的类(如果是JSP,就指定JSP文件),初始化参数,启动装入的优先级,servlet的映射,运行的安全设置。 下面举例介绍其配置:一个完整的servlet配置如下: Study Servlet Config HelloWorld Config HelloWorld jp.co.

1万+

什么是Servlet?

大家好,我是IT修真院武汉分院第14期的学员,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,修真院官网JAVA任务2的知识点——Servlet1.什么是SERVLET?Servlet是用Java编写的服务器端程序, 其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一...

u010420197的博客 3337
上一篇: Java Web
下一篇: Request和Response
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值