Java Servlet技术

JavaWeb——Servlet(全网最详细教程) JavaWeb技术之Servlet 阅读详情

Java Servlet技术

Stephanie Bodoff

当Web刚开始被用来传送服务时,服务提供者就已经意识到了动态内容的需要。Applet是为了实现这个目标的一种最早的尝试,它主要关注使用客户端平台来交付动态用户体验。与此同时,开发人员也在研究如何使用服务器平台实现这个目标。开始的时候,公共网关接口(Common Gateway Interface ,CGI)脚本是生成动态内容的主要技术。虽然使用得非常广泛,但CGI脚本技术有很多的缺陷,这包括平台相关性和缺乏可扩展性。为了避免这些局限性,Java Servlet技术因应而生,它能够以一种可移植的方法来提供动态的、面向用户的内容。

什么是Servlet?

一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。Java Servlet技术为这些应用程序定义了一个特定于HTTP的 servlet类。

javax.servlet和javax.servlet.http包为编写servlet提供了接口和类。所有的servlet都必须实现Servlet接口,该接口定义了生命周期方法。

当实现一个通用的服务时,您可以使用或扩展由Java Servlet API提供的GenericServlet类。HttpServlet类提供了一些方法,诸如doGet和doPost,以用于处理特定于HTTP的服务。

本章主要讲述如何编写对HTTP请求产生响应的servlet。这里假设您已经了解了一些HTTP协议的基础知识。如果对这些协议不熟悉的话,您可以从HTTP概述中对HTTP协议有一个初步的了解。

Servlet示例

本章使用Duke's Bookstore应用程序来说明与servlet编程相关的任务。表14-1列出了解决每个书店功能的servlet。每个编程任务用一个或多个servlet来说明。例如,BookDetailsServlet说明如何处理HTTP GET请求,BookDetailsServlet和CatalogServlet显示如何构建响应,而CatalogServlet 则说明如何跟踪会话信息。

表14-1 Duke's Bookstore Servlet例子 

功能

Servlet

进入书店

BookStoreServlet

创建书店标识

BannerServlet

浏览书店的目录

CatalogServlet

将书放入购物车

CatalogServlet,

BookDetailsServlet

获取关于特定的某本书的一些详细信息

BookDetailsServlet

显示购物车

ShowCartServlet

从购物车中移除一本或多本书

ShowCartServlet

购买购物车中的书

CashierServlet

获得对购买的确认

ReceiptServlet

这些书店应用程序的数据保存在数据库中,并通过帮助类database.BookDB进行存储。database包也包括BookDetails类,一个BookDetails类用来代表一种书。购物车和购物车项用cart.ShoppingCart 和cart.ShoppingCartItem来分别表示。

书店应用程序的源代码放在<JWSDP_HOME>/docs/tutorial/examples/web/bookstore1目录中,这个目录是在对指南包进行解压缩时创建的。

要构建、安装和运行这个实例,需完成以下步骤:

1.     在终端窗口中,转到<JWSDP_HOME>/docs/tutorial/examples/web/bookstore1。

2.     运行build。 build目标将产生任何必要的编码并且将文件直接拷贝到<JWSDP_HOME>/docs/tutorial/examples/web/bookstore1/build 。

3.     确认Tomcat已经开始执行。

4.     运行ant install 。install 目标通知Tomcat 已经有了新的上下文 。

5.     启动PointBase公司的数据库服务器,并且在没完全准备好的情况下仍然指向数据库(见从Web应用中访问数据库)。.

6.     打开书店的URL http://localhost:8080/bookstore1/enter以运行该应用程序。

要部署该应用程序,要完成以下步骤:

1.     运行ant package。这个包任务是创建一个WAR 文件,该文件包含WEB-INF/classes中的应用程序类 和META-INF中的context.xml 文件。

2.     确认Tomcat已经开始执行。

3.     运行ant deploy。Deploy目标将WAR拷贝到Tomcat,并且通知已经有了新的上下文。

故障排除   

一般的问题和其解决方案列举了Web客户端为什么会失败的一些原因。另外,Duke书店返回了以下异常:

·       BookNotFoundException——如果一本书不能在书店的数据库中找到,则返回该异常。如果用户没有运行ant create-book-db来加载书店数据库中的数据、或没有运行数据库服务器、或数据库已经崩溃,这些都将产生该异常。

·       BooksNotFoundException——如果书店的数据不能被获取,则返回该异常。如果用户没有运行ant create-book-db来加载书店数据库中的数据、或没有运行数据库服务器、或数据库已经崩溃,这些都将产生该异常。

·       UnavailableException——如果servlet不能获取到用来表示书店的Web上下文属性,则返回该异常。如果您没有拷贝指向(PointBase)的客户端库<PB_HOME>/lib/pbclient45.jar to <JWSDP_HOME>/common/lib、或者如果指向的(PiontBase)服务器没有运行、或用户没有定义Tomcat中用来引用指向数据库(PointBase)的数据源,这都将产生该异常。

因为指定了一个错误页,用户将看到这样的一个消息The application is unavailable. Please try later. 如果指定了一个正确页,Web容器将产生一个包含A Servlet Exception Has Occurred消息的默认页和一个用来帮助诊断异常产生原因的栈。如果使用errorpage.html,用户可以了解Web容器决定异常产生原因的日志。Web日志位于<JWSDP_HOME>/logs目录中,由jwsdp_log.<date>.txt来命名。

Servlet的生命周期

一个servlet的生命周期由部署servlet的容器来控制。当一个请求映射到一个servlet时,该容器执行下列步骤。

1.     如果一个servlet的实例并不存在,Web容器

a.   加载servlet类。

b.   创建一个servlet类的实例。

c.   调用init初始化servlet实例。该初始化过程将在初始化servlet中讲述。

2.     调用service方法,传递一个请求和响应对象。服务方法将在编写服务方法中讲述。

如果该容器要移除这个servlet,可调用servlet的destroy方法来结束该servlet。结束过程将在结束Serlvet中讨论。

处理Servlet生命周期事件  

在servlet的生命周期中,用户可以通过定义监听器对象对事件进行检测和产生反应。当生命周期事件发生时,调用该对象的方法。要使用这些监听器对象,用户必须定义监听器类,并且指定相应的监听器类。

定义监听器类   

您可以将监听器类定义为一个listener接口的实现。Servlet生命周期事件列出了可以检测的事件和相应的必须实现的接口。当调用一个监听器方法时,需向该方法传递一个包含事件适当信息的事件。例如,向HttpSessionListener接口中的方法传递的是一个HttpSessionEvent事件,这个事件包含了一个HttpSession。

表14-2Servle生命周期事件

对象

事件

监听器接口和事件类

Web上下文
(见访问Web上下文)

初始化和销毁

javax.servlet.
ServletContextListener
和

ServletContextEvent

属性的添加、删除或替代

javax.servlet.
ServletContextAttributeListener
和

ServletContextAttributeEvent

会话
(见维护客户给状态)

创建、失效和超时

javax.servlet.http.
HttpSessionListener
和

HttpSessionEvent

属性的添加、删除或替代

javax.servlet.http.
HttpSessionAttributeListener
 和

HttpSessionBindingEvent

listeners.ContextListener类负责创建和移除在Duke书店应用程序中使用的数据库助手和计数器对象。方法从ServletContextEvent中获取Web上下文对象,进而存储(和移除)作为servlet上下文属性的对象。

import database.BookDB;
import javax.servlet.*;
import util.Counter;

  public final class ContextListener
  implements ServletContextListener {
  private ServletContext context = null;
 public void contextInitialized(ServletContextEvent event) {
    context = event.getServletContext();
    try {
      BookDB bookDB = new BookDB();
      context.setAttribute("bookDB", bookDB);
    } catch (Exception ex) {
      System.out.println(
        "Couldn't create database: "
        + ex.getMessage());
    }
    Counter counter = new Counter();
    context.setAttribute("hitCounter", counter);
    context.log("Created hitCounter"
      + counter.getCounter());
    counter = new Counter();
    context.setAttribute("orderCounter", counter);
    context.log("Created orderCounter"
      + counter.getCounter());
  }

    public void contextDestroyed(ServletContextEvent event) {
    context = event.getServletContext();
    BookDB bookDB = context.getAttribute(
      "bookDB");
    bookDB.remove();
    context.removeAttribute("bookDB");
    context.removeAttribute("hitCounter");
    context.removeAttribute("orderCounter");
  }
}

指定事件监听器类    

为了指定一个事件监听器类,用户要为Web应用部署描述符添加一个listener元素。以下就是Duke书店应用程序的一个listener元素。

<listener>
  <listener-class>listeners.ContextListener</listener-class>
</listener>

处理错误  

当servlet执行时,可能产生许多异常。而当异常产生时,Web容器将产生一个包含A Servlet Exception Has Occurred消息的缺省页。但是,用户也可返回一个容器,该容器应包含为给定异常指定的错误页。为了指定这样一个页,用户要为Web应用添加部署描述符添加一个error-page元素。这些元素将Duke书店应用程序返回的异常映射到errorpage.html:

<error-page>
  <exception-type>
    exception.BookNotFoundException
  </exception-type>
  <location>/errorpage.html</location>
</error-page>
<error-page>
  <exception-type>
    exception.BooksNotFoundException
  </exception-type>
  <location>/errorpage.html</location>
</error-page>
<error-page>
  <exception-type>exception.OrderException</exception-type>
  <location>/errorpage.html</location> </error-page>

共享信息 

像大多数对象一样,Web组件通常与其他一些对象协同工作,以完成任务。要做到这一点,可以有多种方法。Web组件可以使用私有的helper(助手)对象(例如,JavaBeans组件),也可以共享那些有公共作用域属性的对象,它们可以使用数据库,还可以调用其他的Web资源。Java Servlet技术机制允许一个Web组件调用其他的Web资源,这在调用其他Web资源中有描述。

使用作用域对象

几个协作的Web组件通过一些对象来共享信息,这些对象是作为四个作用域对象的属性来维护的。这些属性可以通过表示域的类的[get|set]Attribute方法访问。表14-3列出了这个作用域对象。

表14-3 作用域对象

作用域对象

类

哪些组件可以对其进行访问

Web 上下文

javax.servlet.
ServletContext

Web上下文中的Web组件。见访问Web上下文

会话

javax.servlet.
http.HttpSession

处理属于会话的请求的Web组件。见维护客户端状态。

请求

javax.servlet.
ServletRequest

的子类型

处理请求的Web组件。

页

javax.servlet.
jsp.PageContext

创建对象的JSP页。见隐式对象。

图14-1显示了Duke书店应用程序维护的作用域属性。

Duke's Bookstore Scoped Attributes

图14-1 Duke书店作用域属性

控制对共享资源的并发访问

在多线程的服务器中,可能出现对共享资源的并发访问。除了作用域对象属性外,共享资源还包括存储器中的数据(如实例和类变量)、外部对象(如文件)、数据库连接和网络连接。并发访问可出现在多个情况下。

·  多个Web组件访问存储在Web上下文中的对象。t

·  多个Web组件访问存储在会话中的对象。

·  一个Web组件中的多个线程访问实例变量。一个Web容器一般为每个请求创建一个线程来处理。如果用户确认一个servlet实例每次只处理一个请求,servlet就能实现SingleThreadModel 接口。如果servlet实现了这个接口,用户就能确保servlet的服务方法中不可能有两个线程并发执行。Web容器可通过同步访问一个servlet的单独实例、或者通过维护一个Web组件池为每个实例调用一个新的请求来实现。这个接口并不能防止Web组件访问共享资源(如静态类变量、外部对象)导致的同步问题

当资源可以并发访问时,使用资源也就可以用不一致的方式。为了防止这样的情况发生,用户必须使用在Java指导中的线程单元中描述的同步机制来控制访问。

在以前的部分中,我们说明了被多个servlet共享的5个作用域属性: bookDB, cart, currency, hitCounter和orderCounter。bookDB属性将在下一节中讨论。cart, currency和counter可以被多线程的servlet设置和读。使用同步方法来控制访问以防止这些对象的使用不一致。例如,下面是一个util.Counter类:

public class Counter {
  private int counter;
  public Counter() {
    counter = 0;
  }
  public synchronized int getCounter() {
    return counter;   }
  public synchronized int setCounter(int c) {
    counter = c;     return counter;
  }
  public synchronized int incCounter() {
    return(++counter);
  }
}

访问数据库

在Web组件之间共享,并且在对一个Web应用被调用的间隙内维持的数据通常是由一个数据库来维护的。Web组件使用JDBC 2.0 API来访问关系数据库。书店应用程序的数据由数据库来维护,并通过助手类database.BookDB访问。例如,当用户购买书后,ReceiptServlet调用BookDB.buyBooks方法来更新书的清单。buyBooks方法为每本包含在购物车中的书调用buyBook。为了确保命令被完全执行,buyBook的调用程序将被包装在一个单独的JDBC事务处理中。通过[get|release]Connection方法可以使共享数据库连接同步使用。

public void buyBooks(ShoppingCart cart) throws OrderException {
  Collection items = cart.getItems();  
 Iterator i = items.iterator();
  try {
    getConnection();
    con.setAutoCommit(false);
    while (i.hasNext()) {
      ShoppingCartItem sci = (ShoppingCartItem)i.next();
      BookDetails bd = (BookDetails)sci.getItem();
      String id = bd.getBookId();
      int quantity = sci.getQuantity();
      buyBook(id, quantity);
    }
    con.commit();
    con.setAutoCommit(true);
    releaseConnection();
  } catch (Exception ex) {
    try {
    con.rollback();
    releaseConnection();
    throw new OrderException("Transaction failed: " +
      ex.getMessage());
    } catch (SQLException sqx) {
      releaseConnection();
      throw new OrderException("Rollback failed: " +
        sqx.getMessage());
    }
  }
}

初始化Servlet

在Web容器加载和实例化servlet类之后、servlet实例传递来自客户端的请求之前,Web容器对servlet进行初始化。用户可以自定义这个初始化过程,以允许servlet读持久的配置数据、初始化资源,并且忽略Servlet接口的init方法以执行任何其它的一次性的活动。servlet必须使用UnavailableException来完成初始化过程。

所有的访问书店数据库的servlet(BookStoreServlet, CatalogServlet, BookDetailsServlet, 和 ShowCartServlet)在它们的init方法中初始化一个变量,指向用Web上下文监听器创建的数据库助手对象。

public class CatalogServlet extends HttpServlet {
 private BookDB bookDB;
 public void init() throws ServletException {
   bookDB = (BookDB)getServletContext().
     getAttribute("bookDB");
   if (bookDB == null) throw new
     UnavailableException("Couldn't get database.");
 }
}

编写服务方法

servlet提供的服务实现在GenericServlet的service方法、HttpServlet的doMethod方法(在该方法中,Method可以带Get、Delete、Options、Post、Put、Trace的值),或者是任何其他的由实现了Servlet接口的类定义的协议指定(protocol-specific)的方法中。在这一章剩下的部分中,服务方法这个术语将用于在一个向客户端提供服务的servlet类中定义的任何方法。

服务方法的一般模式是从请求中提取信息、访问外部资源并且基于这些信息填充响应。

对于HTTPservlet来说,填充响应的正确过程是:首先填充响应头,然后从响应中获取一个输出流,最后编写输出流的所有主体内容。响应头必须在PrintWriter或ServletOutputStream被获取到之前设置好,因为HTTP协议希望获得主体内容前的所有头的信息。下两节将描述如何从请求中获得信息和产生响应。

从请求中获得信息

一个请求包含客户端和servlet之间传递的数据。所有请求都实现了ServletRequest接口,该接口为访问一下的信息定义了方法:

·  参数,通常用来在客户端和servlet之间传送信息

·  对象属性(Object-valued attribute),通常用来在servlet容器与servlet之间或在协作的servlet之间传递信息

·  有关协议的信息,用来在请求、客户端和涉及到该请求中的服务器之间的通信。

·  有关地区化的信息。

例如,在CatalogServlet中,顾客希望购买的书的标识符作为参数包含在请求中。下面的这段代码说明了如何使用getParameter方法提取标识符。

String bookId = request.getParameter("Add");
if (bookId != null) {
  BookDetails book = bookDB.getBookDetails(bookId);

用户也可以从请求中获取一个输入流,并对数据进行手工解析。要读字符数据,可以使用由请求的getReader方法返回的 BufferedReader对象来完成。而要读二进制数据,可以使用getInputStream 返回的ServletInputStream。

HTTP serlvet通过HTTP请求对象传递,HttpServletRequest包含了请URL、HTTP头、查询字符串等等。

一个HTTP请求URL包含以下几部分:

http://[host]:[port][request path]?[query string]

请求路径由以下元素组成:

·  上下文路径:向前的斜线/和servlet的Web应用的上下文根的拼接。

·  servlet路径:与激活该请求的组件别名相应的路径部分,由向前的斜线/开始。

·  路径信息:请求路径的部分,不是上下文路径或者servlet路径的部分。

如果上下文路径是/catalog和表14-4列举出的别名,表14-5给出了一些实例,说明如何分解URL。

表14-4别名 

模式

Servlet

/lawn/*

LawnServlet

/*.jsp

JSPServlet

表 14-5 请求路径元素

请求路径

Servlet 路径

路径信息

/catalog/lawn/index.html

/lawn

/index.html

/catalog/help/feedback.jsp

/help/feedback.jsp

null

查询字符串由参数和值的集合组成。每个参数都是从请求中用getParameter方法获取得到的。这里有两种方法产生查询字符串:

·  一个查询字符串能在Web页中明确地显示出来。例如,一个HTML页由CatalogServlet产生,该HTML页包含了<a href="/bookstore1/catalog?Add=101">Add _fcksavedurl=""/bookstore1/catalog?Add=101">Add" To Cart</a>。 CatalogServlet 将命名为Add的参数提出,如下:

         String bookId = request.getParameter("Add");

·  当一个表单与一个GET HTTP方法一起被提交时, 在URL上附加一个查询字符串。在Duke书店应用程序中,首先CashierServlet产生了一个表单,然后在表单中输入一个用户名,该表单附加在映射到ReceiptServlet的URL上,最后ReceiptServlet使用getParameter方法提取用户名。

 转自: http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jst.14/14.1.htm
Java Web开发:Servlet与JSP技术 Servlet是Java编写的服务器端程序,用于处理客户端请求并生成响应。Servlet运行在Servlet容器中,如Apache Tomcat。JSP是一种基于Java的服务器端技术,允许在HTML中嵌入Java代码,用于生成动态Web页面。JSP页面在第一次请求时被编译成Servlet。Servlet和JSP是Java Web开发中的两种核心技术,它们各自具有优缺点,适用于不同的场景。通过合理的组合和使用,可以构建出高效、可维护的Web应用。 阅读详情

相关推荐

深入理解Java Servlet技术

本文还有配套的精品资源,点击获取 简介:该项目主要探讨面向对象编程(OOP)在Java中的应用,专注于Servlet技术,这可能是GitHub Classroom创建的教育项目。项目内容包含基础Servlet示例、URL导航、动态HTML生成、GET参数处理,并涉及Docker容器部署。掌握此项目有助于理解Java Web开发中的Servlet应用,从配置到部署的完整流程。...

weixin_32005771的博客 1469

Java Servlet

​ 一、什么是Servelt servlet 是运行在 Web 服务器中的小型Java程序(简单理解为:服务器端的小应用程序)。 作用:接收用户的请求,并对请求做出处理,处理结果响应给客户端 ​

ww981580010的博客 1万+

大话西游2单机版V8一键架设教程:从下载到GM权限全流程(附仙玉修改技巧)

本文详细讲解了大话西游2单机版V8的一键架设全流程,包括环境准备、服务端配置、客户端安装及GM权限获取等关键步骤。特别提供了仙玉修改技巧和高级资源管理方法,帮助玩家快速搭建个性化游戏环境并掌握核心控制功能。教程涵盖Windows系统兼容性设置、常见问题解决方案以及数据备份策略,适合各类怀旧玩家和技术爱好者。

weixin_29254673的博客 1033

JavaWeb之 Servlet(2万6千字详解)

博主将用 优快云 记录 Java 后端开发学习之路上的经验,并将自己整理的编程经验和知识分享出来,希望能帮助到有需要的小伙伴。博主也希望和一直在坚持努力学习的小伙伴们共勉!唯有努力钻研,多思考勤动手,方能在编程道路上行至所向。由于博主技术知识有限,博文中难免会有出错的地方,还望各位大佬包涵并批评指正,博主会及时改正;如果本文对小伙伴你有帮助的话,求求给博主一个赞支持一下,可以一起交流,一起加油!!本文编写过程中,参考了以下几位 csdn博主的博客,写的非常好,有兴趣的小伙伴也可以去看看。

林二月的博客 2262

自考计算机系统原理(第六章计算机系统概论)-13015

名词解释 I/O 硬件 I/O软件 用户空间I/O软件 内核空间I/O 软件 系统调用处理程序 系统调用服务例程 设备驱动程序 中断服务程序 系统级1/O函数 虚拟文件系统 文件描述符 文件元数据 流缓冲区 索引节点 目录文件 目录项 系统打开文件表 磁盘高速缓存 高速缓存 RAM I / O 控制方式 程序直接控制I/O 就绪状态 中断控制I/O 中断屏蔽字 多重中断 中断嵌套 DMA 方式 DMA 控制器 设备控制器 I/O端口 控制端口 数据端口 状态端口 I/O 地址空间 独立编址方式 统一编址方

qq_23872947的博客 1150

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1566

java简单案例:servlet

注册删除查找前言环境说明代码结构图User类DButile类UserDao类UserService类AddServlet类index.jspadd.jspdelect.jspselect.jsp数据库运行结果 前言 暑期实践课第4课 环境说明 1、mysql 5.7版本 2、mysql中创建testtt的数据库,在testtt数据库中有一张user的表 3、user的表中有id,username,password 三个字段 4、Tomcat 8.5.32版本 代码结构图 User类 package com

三岁ღ的博客 991

基于Python的船舶AIS数据爬取与分析:从数据采集到可视化实战

本文详细介绍了如何使用Python构建一个完整的船舶AIS数据爬取与分析系统。文章从AIS系统的基本原理讲起,逐步深入到数据采集、存储、清洗、分析和可视化的全流程。我们将使用最新的Python技术栈,包括aiohttp异步爬虫、MongoDB存储、Pandas数据处理以及Pydeck三维可视化等。本文提供了完整的代码实现,并探讨了在实际应用中可能遇到的问题及其解决方案。关键词:AIS数据、Python爬虫、异步IO、数据可视化、海事分析。

2201_76125261的博客 811

java之Servlet

HTTP是一个无状态的协议,当一个客户端向服务端发送请求,在服务器返回响应后,连接就关闭了,在服务端不会保留连接信息。

m0_60027772的博客 5766

RK平台PCIE-Ethernet扩展:Intel I210移植与性能飞升之路

本文详细介绍了Intel I210千兆以太网控制器在瑞芯微RK平台的移植与优化过程。通过硬件适配、内核配置、驱动开发及性能调优四个关键环节,实现了RK平台的网络性能提升。硬件方面,重点说明了PCIE接口的规范连接与供电检查;软件方面,系统阐述了内核配置、设备树修改和驱动编译流程。在性能优化环节,详细介绍了中断优化、缓冲区设置和TCP/IP协议栈调优策略,并采用Iperf和Netperf工具进行量化测试验证。测试结果显示,优化后的网络吞吐量提升20%以上,延迟降低40%,为工业控制、智能安防等场景提供了可靠的

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

SAP Retail 补货里的 Requirement Groups,站点和商品太多时,主数据维护如何做减法

SAP Retail补货主数据设计中,Requirement Groups(需求组)是常被低估但至关重要的分类机制。它通过将具有相同补货需求的接收方(如门店)按商品分类(Merchandise Category)分组,大幅降低主数据维护量。在大型零售场景中(如800家门店、6万商品),直接维护每个门店和商品的组合参数会导致维护量失控。Requirement Groups允许企业按品类特性(如乳制品、饮料等)为不同门店组设置统一补货参数,并随业务变化灵活调整。该机制与商品分类紧密绑定,不同于MRP Group

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

java Servlet技术·笔记

Servlet基础 Servlet技术简介 Servlet是一种独立于平台和协议的服务器端的java技术,可以用来动态的生成Web界面。Servlet具有非常好的可移植性、强大的功能、更少的投资、更高的效率、更好的安全性等特点 Servlet一般用来处理HTTP的请求用来返回一个响应,它能够处理的请求有doGet()、doPost()、service()等方法,在开发Servlet时可以直接继承javax.servlet.http.HttpServlet类 值得注意的是Servlet需要在web.xml中

qq_49326435的博客 2859

R语言Rstudio突然无法启动且报错:ERROR system error 42 [str: 一, len: 3, from: UTF-8, to: ISO8859-1]...如何解决

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2846

java —— Servlet 技术

1、Servlet 事实上也是一个类,其添加方式与类的添加方式一样;2、Servlet 类下有两个方法,分别是 doGet() 和 doPost(),具体的业务代码写在 doGet() 方法中即可,两个方法的调用在前端 html 中进行确定;3、调用 Servlet 技术需要 servlet-api.jar 包,对于 web 项目,将该包直接放在 WebContent → WEB-INF → lib 文件夹即可,无需右键 Build Path → Add to Build Path。

firstgrass的博客 428

[QMT量化交易小白入门]-四十九、中小盘策略是否还有未来,市值再平衡策略,年化收益率124%

该策略旨在通过定期再平衡持仓,保持投资组合中股票数量恒定(),并优先持有市值较小的股票。具体来说,策略每两天(period = 2)进行一次再平衡,根据当前市值对持仓进行调整,以实现微盘股的投资目标。中小市值策略对资金量要求有限制,资金量太大由于流动性不足,滑点可能较大,资金量太小,可能不能达到10-20只持仓,来分散风险,10-100w可能是比较理想的,后续可以根据波动率动态调仓,或波动率大于一定值时触发再平衡加入ROE或其他财务指标,或者研发投入强度大的专精特新企业,进行组合优化。

木头大左的博客 1183

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Servlet入门教程,Java Servlet技术精讲

​ Servlet 是 Server Applet 的简称,译为“服务器端小程序”。Servlet 是 Java 的一套技术标准,规定了如何使用 Java 来开发动态网站。换句话说,Java 可以用来开发网站后台,但是要提前定义好一套规范,并编写基础类库,这就是 Servlet 所做的事情。 Java Servlet 可以使用所有的 Java API,Java 能做的事情,Servlet 都能...

dream it possible 513

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Servlet——了解Java Servlet技术

Servlet——了解Java Servlet技术什么是ServletServlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。 Servlet必须部署在Java servlet容器才能使用Ser

Agly_Charlie的博客 763

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

lwip-2.0.3

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

JAVA WEB开发技术随堂笔记 Servlet技术

🌴 2022.5.12 早八 文章目录6.1 Servlet技术6.1.1 Servlet与Servlet容器6.1.2 Servlet技术特点6.1.3 Servlet技术功能6.1.4 Servlet与JSP的区别6.1.5 Servlet代码结构6.1.6 简单的Servlet程序6.2 Servlet开发6.2.1 Servlet的创建6.2.2 Servlet配置6.3 Servlet API编程常用的接口和类6.3.1 Servlet接口6.3.2 ServletConfig接口6.3.3 Ht

张时贰的博客 677

java servlet分页技术实现

java的Servlet分页技术是一种非常重要的分页技术,而且在网页的应用中非常有用。可以实现普通的网页的分页技术,以我这个简易版的登录系统为例,因为我要实现在登录之后显示的页面中出现的界面是能够有分页的,所以我在welcome界面中实现分页的过程。 这里分页主要有四个变量需要注意:分别是pageNow,pageSize,rowCount和pageCount。分别表示希望请求的页面、每一个页面显

渣渣 1087

java Servlet与JSP技术

Java Servlet 和 JSP 是 Java Web 开发中非常重要的技术。Servlet 用于处理客户端请求并生成响应,具有强大的控制能力和良好的可扩展性。JSP 用于生成动态网页,具有易于开发和丰富的标签库的优势。通过结合使用 Servlet 和 JSP,可以实现更复杂的 Web 应用程序。掌握这两种技术后,可以更好地利用它们来编写高效、可靠的 Java Web 应用程序。

yuehua00的专栏 896

Java EE之Servlet技术

java Servlet介绍 Java Servlet是java EE标准规范之一。Servlet是Java Web 技术的核心基础, 因此掌握好Servlet是很有必要的。掌握Servlet的工作原理是成为一名合格的 Java Web技术开发人员的基本要求。 Servlets are very important topic of Java EE and all of the we

mrdu_somefun的博客 623
上一篇: 有两个关于内部类(Inner Class)的示例
下一篇: JAVA面试题
冯立彬
冯立彬 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄21年 5458粉丝 593原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值