JAVA WEB 总结 Servlet篇--源自技术

55、Java编程:Servlet与事务处理 本文详细介绍了Java编程中Servlet的核心概念与应用,涵盖事务处理中的Savepoint机制、Servlet生命周期、运行步骤、客户端数据读取、HTTP重定向实现方式以及Cookie的使用。通过丰富的代码示例和详细解析,帮助开发者深入理解Servlet技术,并构建更高效的Java Web应用程序。 阅读详情

servlet简介

1.版本

Servlet 2.2  
Servlet 2.3
Servlet 2.4
Servlet 2.5
Servlet 3.0 
Servlet 4.0(草案阶段)

2.单实例,多线程。

将Tomcat的minThreads, maxThreads, acceptCount都设置为1然后测试。

[java]  view plain  copy
  1. @WebServlet(urlPatterns="/login")  
  2. public class Login extends HttpServlet{  
  3.   
  4.  private static final long serialVersionUID = 2394188843772629040L;  
  5.   
  6.  @Override  
  7.  protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  8.    throws ServletException, IOException {  
  9.     Calendar cleaner = Calendar.getInstance();  
  10.     SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  11.     System.out.println("Thread Name:"+Thread.currentThread().getName()  
  12.         +" Time:"+formatter.format(cleaner.getTime()));  
  13.     
  14.     resp.getWriter().write("Thread Name:"+Thread.currentThread().getName());  
  15.     resp.getWriter().write("\n");  
  16.       
  17.     resp.getWriter().write("Class Name:"+this);  
  18.     resp.getWriter().write("\n");  
  19.       
  20.     resp.getWriter().write("Start time:"+formatter.format(cleaner.getTime()));  
  21.     resp.getWriter().write("\n");  
  22.       
  23.     try {  
  24.      /*模拟业务阻塞*/  
  25.      Thread.sleep(1000*5);  
  26.     } catch (InterruptedException e) {  
  27.      e.printStackTrace();  
  28.     }  
  29.   
  30.     cleaner = Calendar.getInstance();  
  31.     resp.getWriter().write("End time:"+formatter.format(cleaner.getTime()));  
  32.     resp.getWriter().write("\n");  
  33.     resp.setHeader("Content-Type", "text/text");  
  34.  }  
  35. }  

测试程序

[java]  view plain  copy
  1. public class Test implements Runnable{  
  2.  public void run(){  
  3.   CloseableHttpClient httpclient = null;  
  4.   CloseableHttpResponse response = null;  
  5.   Calendar calendar = null;  
  6.     
  7.   calendar = Calendar.getInstance();  
  8.   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  9.     
  10.   System.out.println(Thread.currentThread().getName()+"开始 :"+formatter.format(calendar.getTime()));  
  11.      try {    
  12.       httpclient = HttpClients.createDefault();  
  13.          HttpGet httpget = new HttpGet("http://127.0.0.1:8080/login");    
  14.          response = httpclient.execute(httpget);    
  15.          StatusLine statusLine = response.getStatusLine();    
  16.          System.out.println(statusLine);    
  17.          HttpEntity resEntity = response.getEntity();    
  18.          InputStream content = resEntity.getContent();    
  19.          InputStreamReader reader = new InputStreamReader(content);    
  20.          BufferedReader bufferedReader = new BufferedReader(reader);    
  21.          String lineTxt = null;    
  22.          while((lineTxt = bufferedReader.readLine()) != null){  
  23.           System.out.println(lineTxt);    
  24.          }  
  25.          httpget.abort();    
  26.      } catch (ClientProtocolException e) {  
  27.    System.out.println(Thread.currentThread().getName()+" ERROR:"+e.getMessage());  
  28.   } catch (IOException e) {  
  29.    System.out.println(Thread.currentThread().getName()+" ERROR:"+e.getMessage());  
  30.   } finally {    
  31.          try {  
  32.           response.close();  
  33.     httpclient.close();  
  34.    } catch (Exception e) {  
  35.     System.out.println(Thread.currentThread().getName()+" ERROR:"+e.getMessage());  
  36.    }    
  37.      }  
  38.   calendar = Calendar.getInstance();  
  39.   System.out.println(Thread.currentThread().getName()+"结束 :"+formatter.format(calendar.getTime()));  
  40.  }   
  41.    
  42.  public static void main(String[] args) {  
  43.   for (int i = 0; i < 5; i++) {  
  44.    Thread thread = new Thread(new Test());  
  45.    thread.setName("TestThread-"+(i+1));  
  46.    thread.start();  
  47.   }  
  48.  }  
  49. }  

测试结果

     并发请求下Thread Name不同,Class Name相同证实servlet是单实例多线程的特性,WEB容器处理
能力由开启的线程数决定我们在编写代码时通过将阻塞的业务操作放到自己创建的线程里的方式,来减
轻WEB容器的线程压力。提高WEB线程的利用率(在Servlet 3.0中已经提供了异步处理支持)。

Servlet生命周期

1.创建Servlet实例,由WEB容器进行。
2.初始化 Servlet,调用 Servlet 的 init 的方法。
3.响应客户请求阶段,调用service()方法。
4.终止阶段调用destroy()方法。

Servlet内置对象

out转译后对应JspWriter对象,其内部关联一个PringWriter对象
request转译后对应HttpServletRequest/ServletRequest对象
response 转译后对应HttpServletRespons/ServletResponse对象
config转译后对应ServletConfig对象
application转译后对应ServletContext对象
session转译后对应HttpSession对象
pageContext 转译后对应PageContext对象,它提供了JSP页面资源的封装,并可设置页面范围属性
exception转译后对应Throwable对象,代表由其他JSP页面抛出的异常对象,只会出现于JSP错误页面(isErrorPage设置为true的JSP页面)
page 转译后对应this


Servlet 3.0新特性

1.新增注解支持:从这个版本开始 web.xml 不再是必有的了。
2.异步处理支持:减少服务器资源占用,提高并发处理速度。
3.可插性支持:通过插件的方式扩充已有 Web 应用的功能,而不需要修改原有的应用。
4.运行时动态部署Servlet、过滤器、监听器。
5.对文件上传的支持。

新增注解:

@WebServlet:声明类是servlet,主要属性urlPattems定义访问url。
@WebFilter:声明类是过滤器,主要属性urlPattems定义访问url,dispatcherTypes指定转发模式。
@WebListener:声明类是监听器。
@MultipartConfig:表示该 Servlet 希望处理的请求的 MIME 类型是 multipart/form-data。
@WebInitParam:为 Servlet 或者过滤器指定初始化参数。

异步处理支持

[html]  view plain  copy
  1. public class AsyncDemoServlet extends HttpServlet {  
  2.     @Override  
  3.     public void doGet(HttpServletRequest req, HttpServletResponse resp)  
  4.     throws IOException, ServletException {  
  5.         resp.setContentType("text/html;charset=UTF-8");  
  6.         PrintWriter out = resp.getWriter();  
  7.         out.println("进入Servlet的时间:" + new Date() + ".");  
  8.         out.flush();  
  9.   
  10.         //在子线程中执行业务调用,并由其负责输出响应,主线程退出  
  11.         AsyncContext ctx = req.startAsync();  
  12.         //使用AsyncListener 接口监听异步线程  
  13.         TaskListener taskListener = new TaskListener();  
  14.         ctx.addListener(TaskListener);  
  15.           
  16.         new Thread(new Executor(ctx)).start();  
  17.   
  18.         out.println("结束Servlet的时间:" + new Date() + ".");  
  19.         out.flush();  
  20.     }  
  21. }  

[java]  view plain  copy
  1. public class Executor implements Runnable {  
  2.     private AsyncContext ctx = null;  
  3.     public Executor(AsyncContext ctx){  
  4.         this.ctx = ctx;  
  5.     }  
  6.   
  7.     public void run(){  
  8.         try {  
  9.             //等待十秒钟,以模拟业务方法的执行  
  10.             Thread.sleep(10000);  
  11.             PrintWriter out = ctx.getResponse().getWriter();  
  12.             out.println("业务处理完毕的时间:" + new Date() + ".");  
  13.             out.flush();  
  14.             ctx.complete();  
  15.         } catch (Exception e) {  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19. }  

[java]  view plain  copy
  1. public class TaskListener implements AsyncListener{  
  2.   
  3.  public void onComplete(AsyncEvent event) throws IOException {  
  4.   //执行完毕时  
  5.  }  
  6.   
  7.  public void onError(AsyncEvent event) throws IOException {  
  8.   //出错  
  9.  }  
  10.   
  11.  public void onStartAsync(AsyncEvent event) throws IOException {  
  12.   //开始  
  13.  }  
  14.   
  15.  public void onTimeout(AsyncEvent event) throws IOException {  
  16.   //执行超时  
  17.  }  
  18.    
  19. }  

Tomcat 从7.0的版本开始支持Servlet 3.0。

Java技术全方位学习路线:项目开发、Web与大数据 本文还有配套的精品资源,点击获取 简介:Java作为一种广泛使用的编程语言,在企业级应用、Web开发和大数据处理等领域占据重要地位。本学习路线详细介绍了从基础到高级的Java学习路径,包括面向对象编程、异常处理、集合框架、IO流、多线程、设计模式、Web开发技术、项目管理工具和大数据处理技术等多方面的知识点。它旨在帮助学员构建坚实全面的Java知识体系,并通过实践案例和团队... 阅读详情

相关推荐

javaweb Servlet开发总结(一)

Servlet是sun公司提供的一门用于开发动态web资源的技术。这篇文章主要介绍了javaweb Servlet开发的第一篇,感兴趣的小伙伴们可以参考一下

【JavaWeb】关于Servlet的两种配置Web.xml文件配置或使用@WebServlet注解及urlPattern配置规则

首先,我们需要了解到的是在Servlet2.x版本中,配置依然是通过web.xml的形式进行配置的,升级到Servlet3.x后,才可以依赖注解式方式进行配置。

aDiaoYa_的博客 1万+

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文详细解析了OpenCV图像去畸变的原理与实战方法,对比了三种核心函数(标准、鱼眼、全景模型)的适用场景与效果。重点提供了完整的代码示例,并深入探讨了alpha、焦距、中心点等关键参数的调优技巧,以帮助开发者有效矫正镜头畸变,提升计算机视觉任务精度。

life6的博客 554

JAVA WEB 总结 Servlet篇

一、servlet简介 1.版本 Servlet 2.2 Servlet 2.3 Servlet 2.4 Servlet 2.5 Servlet 3.0 Servlet 4.0(草案阶段) 2.单实例,多线程。 @WebServlet(urlPatterns="/login") public class Login extends HttpServlet{

王文强 817

Android13 SurfaceFlinger启动流程分析

在Android13版本中,SurfaceFlinger是由Android.bp去启动init.rc文件,然后再解析文件去加载SurfaceFlinger。上面方法主要处理如下:1、调用surfaceflinger的createSurfaceFlinger方法,实例化surfaceflinger。2、调用flinger(surfaceflinger)的init()方法,在客户端连接之前进行初始化。

liuning1985622的博客 1919

手把手教你搭建Howland电流源:从原理图到实测避坑指南(附Python数据分析)

本文详细介绍了Howland电流源的设计与实现,从原理图到实测避坑指南,涵盖电阻匹配、运放选择和PCB布局等关键环节。通过Python数据分析,展示了如何优化电路性能并解决常见问题,适合电子工程师和爱好者参考。

weixin_29291069的博客 636

关于Servlet的两种配置Web.xml文件配置或者使用(@WebServlet(name = "",urlPatterns = ""))配置问题——WebServlet注解

在Servlet2.5规范之前,Java Web应用的绝大部分组件都通过web.xml文件来配置管理。 Servlet3.0规范可通过Annotation来配置管理Web组件,因此web.xml文件可以变得更加简洁,这也是Servlet3.0的重要简化。 所以说,在servlet3.0以后,我们可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该s...

itjiangpo的博客 1万+

2025实战|C#上位机+STM32实现LED串灯控制:串口通信+PWM调光+自定义帧协议(附上下位机源码)

粘包:一次收到“BRIGHT:50LED_OFF”,解析完全错乱;乱码:串口波特率/编码不匹配,指令变成“??H??50”;丢帧:数据传输中少字符,比如“BRIGHT:5”,解析出亮度5而非50。因此我们设计字节级自定义帧协议协议先行:无论简单还是复杂场景,先定义清晰的帧协议,避免数据错乱;串口稳字当头:下位机用环形缓冲区接收,上位机加锁发送,避免丢包/粘包;跨线程必处理:C#上位机所有UI更新必须用Invoke,否则必崩溃;硬件是基础:接线、供电、共地这些细节,比代码更易出问题;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 757

Java Web学习笔记一

文章目录一、软件两种形式:二、Web概述:1.Web资源:2.常见的Web服务器:3.简单模拟Web服务器:三、Tomcat:1.目录结构:2.启动常见问题:3.Web项目的部署方式:四、Servlet:1.概述:2.作用:3.Servlet开发步骤:4.servlet生命周期5.servlet体系结构:6.HttpServlet 一、软件两种形式: 1.B/S架构: B/S也就是我们常用的浏览器/服务器端; 2.C/S架构: 客户端/服务器端;这种方式虽然也常用,但是需要下载相应的软件来搭配使用; 二、W

记录一只菜鸡的成长之路 218

Allegro基本规则设置指导书之Spacing Region

当网络需要在Region中需要按照自身的规则匹配时,可以创建Region Class来匹配。Region也支持Class to Class规则,点击ok即可。Allegro基本规则设置指导书之Spacing Region。下面介绍基本规则设置指导书之Spacing Region。给创建好的Region 匹配一个规则。空白的地方创建一个Region。

weixin_54787054的博客 564

【软件系统架构】系列十一:面向对象技术—sysML

摘要: SysML(系统建模语言)是UML的扩展,专为复杂系统工程设计,支持硬件、软件、人员等跨领域建模。其核心包括9种图:4种结构图(如块定义图BDD、内部块图IBD)、4种行为图(如活动图AD、序列图SD)和需求图(REQ),覆盖需求、结构、行为及参数约束。相比UML(面向软件),SysML精简图表(9 vs 13),强化需求追踪与性能分析(如参数图PD),并支持MBSE(基于模型的系统工程)。需求关系(如满足、验证、派生)在需求图中明确关联设计实现,形成闭环管理。SysML是UML的子集与系统工程扩展

moton2017的博客 1910

Servlet简单的登录验证

使用Servlet进行简单的登录验证 表单提交数据到服务器,再此使用doget()方法。 @WebServlet(urlPatterns = "/login") public class Login extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

m0_60265664的博客 806

SAP_SD模块更改销售订单定价简介

方式优点缺点适用场景MASS简单,无需开发不能触发重新定价逻辑修改特定字段BDC (VA02)可模拟人工操作维护复杂,速度慢少量订单批改稳定、安全需ABAP支持推荐用于批量重新定价VBOF标准重算返利仅适返利类条件返利更新通过本文,我们了解了 SAP 的[SAP_SD模块更改销售订单定价]的基本概念和应用方法。希望这些信息能帮助您在实际工作中更好地使用 SAP 系统,提高工作效率和管理水平。更多SAP文章请点击更多SAP文章更新,大家一起学习进步!!!

我小时候很黑的博客 716

Java WEB 总结 JSP篇--源自技术

一、jsp是另类的servlet 编写index.jsp,然后放入到Tomcat中,然后启动Tomcat,使用浏览器访问jsp。 [java] view plain copy "java" import="java.util.*" pageEncoding="UTF-8"%>   "-//W3C//DTD HTML 4.01 Transition

MyJava_Dx的博客 511

探秘RK3588:OverlayFS挂载与固件升级全攻略

本文围绕RK3588芯片的OverlayFS文件系统挂载与固件升级技术展开详细阐述。首先介绍了RK3588芯片的卓越性能及其在嵌入式领域的广泛应用,重点分析了OverlayFS文件系统的分层架构原理及其在RK3588设备上的挂载方法,包括详细的挂载步骤、常见问题解决方案。随后详细阐述了RK3588设备在Windows和Linux环境下的固件升级方案,涵盖升级准备、具体操作流程及故障处理等内容。最后通过智能安防监控设备的实际案例,展示了OverlayFS挂载与固件升级技术的应用效果。文章为嵌入式开发者提供了全

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 287

Statistics and Machine Learning Toolbox

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

Java Web表示层技术(Java Web工作原理)

8Servlet概貌: (此为引用) 8Servlet主要任务:       1 读取客户端发送的显式和隐式数据          2生成结果          3向客户端发送显式数据(即文档)和隐式数据(HTTP响应数据) 9Servlet规范 :       规范只定义了一个容器必须实现的标准功能       Servlet容器有很多不同的实现  

零壹 980

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

严重: Servlet.service() for servlet [servlet.WxServlet] in context with path [/weixin] threw exception

7月 16, 2020 3:06:20 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [servlet.WxServlet] in context with path [/weixin] threw exception [Servlet execution threw an exception] with root cause java.lang.ClassNotFoundE

pyan77的博客 3626

jre9下载 jdk9

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java Servlet JSP使用Gson 输出JSON格式数据

在现代 Web 应用程序中,我们以 JSON 格式从服务器获取数据,并使用前端库或 Angular、React 等框架在 jsp 或 html 页面中显示数据。这与移动应用程序开发类似。在这里,我们将看到如何从 servlet 获取 JSON 响应并在 jsp 中显示。Java S cript Object Notation ( JSON ) 是一种用于交换数据的轻量级格式。这些是 JSON 的特性。JSON 可用于在不同平台之间交换数据。由于轻量级,在不同应用程序(即基于 Web 的应用程序)之间交换信息

allway2的博客 1642

【java】使用maven完成一个servlet项目

直接将war包复制,粘贴到tomcat的webapp目录下,然后启动tomcat服务器,看到服务器自动将war包解析出一个文件夹,就部署成功了。它的参数有rqs和resp两个,rqs的内容是根据http请求包赋值的,resq是这个doGet方法需要赋值的对象。maven是一个管理java项目的工具,根据maven的pom.xml可以引入各种依赖,插件。打包成功之后,左边会出现一个target文件夹,里面就有打包好的war文件。pom是项目的配置文件,后面会在这里修改配置。点击创建项目,项目创建就完成了。

qq_61925446的博客 1473

简单Java Web学生信息管理系统

简单Java Web学生信息管理系统 去发现同类优质开源项目:https://gitcode.com/ 本项目是一个简单的Java Web学生信息管理系统,适用于初学者了解和实践Java Web开发。该系统基于JSP和Servlet技术,并使用了MySQL数据库进行数据存储。 项目描述 本项目来源于网络上的一篇教程,作者在学习Java Web的过程中,以此项目作为练手。项目原使用Oracle数据库...

gitblog_06740的博客 438

servlet监听器 java_java中Servlet监听器的工作原理及示例详解

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。监听器原理监听原理1、存在事件源2、提供监听器3、为事件源注册监听器4、操作事件源,产生事件对象,将事件对象传递给监听器,并且执行监听器相应监听方法监听器典型案例:监听window窗口的事件监听器例如:swing开发首先制造Frame**...

weixin_36260304的博客 604

java网页电路图_2016.5.5(Java Web工作原理)

建动态服务器端内容的过程CGI技术微软的ASP和ASP.NET技术基于Java的Servlet/JSP技术HTTP是一种超文本协议,一种无状态的协议HTTP请求分为:1、请求行 2、请求头 3、消息体 4、分隔请求头 5、消息体空行HTTP 1.1 版本中,定义了有八种可能的HTTP请求方法:1、get:用于向服务器检索资源。(查找)2、post:用于向服务器发送数据,并要求指定的url处理。(新...

weixin_39643336的博客 365

Servlet和JSP的区别于联系

区别: 1.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。.Servlet的实现方法是在Java语言中嵌入HTML代码,编写和修改不方便,所以适合做流程控制和业务逻辑。JSP的实现方式是在HTML中嵌入Java代码比较适合页面显示。 2.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。 联系: JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。

qq_44239380的博客 561

J2EE基础(Tomcat/Servlet/HTTP/JSP)

J2EE基础

Apiao9的博客 599

servlet的url是在创建servlet文件时配置的,也可以在web.xml中查看,src下的是java文件,这里访问的是映射后的url地址。...

在index.jsp跳转到helloservlet时,相对路径为什么不是src/servlet/helloservlet?这个地方我要看那些资料呢? 在index.jsp跳转到helloservlet时,相对路径为什么不是src/servlet/helloservlet?这个地方我要看那些资料呢? 2015-09-05源自:JAVA遇见HTML——...

weixin_30768175的博客 184

Java杂谈(八)--Servlet/Jsp

念是组件和容器。曾经有的人问笔者Servlet的Class文件是哪里来的?他认为是J2ee官方提供的,我举了一个简单的反例:稍微检查了一下Tomcat5.0里面的Servlet.jar文件和JBoss里面的Servlet.jar文件大小,很明显是不一样的,至少已经说明了它们不是源自同根的吧。其实Servlet是由容器根据J2ee的接口定义自己来实现的,实现的方式当然可以不同,只要都遵守J2ee规范和指南。 上述只是一个常见的误区罢了,告诉我们要编译运行Servlet,是要依赖于

liangjw1018的专栏 229
上一篇: JAVA AOP--源自技术
下一篇: MySQL 学习笔记--源自技术
MyJava_Dx
博客等级 码龄11年 1粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值