Web和Servlet

2023-10-27

Web

web开发概述

  • 学习web开发,需要先安装一台web服务器,将开发好的web项目部署在web服务器中供外界访问。

在这里插入图片描述

web开发环境搭建

  • Web服务器是指驻留于英特网上某种类型计算机的程序
  • 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;它是一个容器,是一个连接用户与程序之间的中间件。
  • Web服务器有很多,流行的Web服务器有Tomcat、WebSphere、WebLogic、Jbss等。
  • 在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服:Apache 的Tomcat,该服务器支持全部JSP以及Servlet规范。

在这里插入图片描述

  • Tomcat官方站点:http://tomcat.apache.org

  • 获取Tomcat安装程序包

    • ​ tar.gz文件是Linux操作系统下的安装版本
    • ​ zip文件是Windows系统下的压缩版本
  • 安装JDK

    • 设置JAVA_HOME环境变量
    • 设置PATH环境变量
  • 安装Tomcat

    • 解压tomcat压缩文件
  • Tomcat 的目录层次结构

在这里插入图片描述

  • 双击bin目录下的startup.bat 文件输入 http://localhost:端口号 或 http:127.0.0.1:端口号 或局域网ip:端口号

  • server.xml 是Tomcat的主搭配文件

    提供Tomcat组件的初始配置,tomcat启动的时候执行这些初始化设置。

    修改此文件后,需要重新启动tomcat。如果此文件修改错误,则tomcat不能正常启动。

  • 修改服务器端口号

<connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443/>

创建发布web项目

  • 创建并发web项目

    1、创建java项目,添加web功能

    2、发布web应用到服务器

    ​ 自动将web应用发布到web服务器下,需要在开发工具中集成tomcat进来

  • Web项目结构

在这里插入图片描述

Servlet

Servlet 概述

  • Servlet 是 Servlet Applet 的简称,意思为用Java编写的服务器端的程序。

    它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法。

  • Servlet的作用:

    1、接收用户发送的请求数据

    2、调用其他的java程序来处理请求

    3、根据处理结果,将结果响应给客户端

Servlet创建和使用

1、创建一个类继承javax.servlet.http包下的HttpServlet

2、在web.xml文件中配置Servlet

3、运行Servlet程序

​ 通过浏览器访问http:localhost:8080/项目名/配置的url

  • 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素<servlet-mapping> 元素完成。

  • <servlet>元素用于注册Servlet,它包含有两个主要的子元素:

    <servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。

  • 一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册面积过程和Servlet的对外访问路径。

    url-pattern 配置模式:" /" 代表当前web应用的根目录

    精确匹配 例如/test 访问 http://127.0.0.1/项目名/test

    <servlet-mapping>
    	<servlet-name>myServlet</servlet-name>
    	<url-pattern>/test<url-pattern>
    </servlet-mapping>
    

    创建发布web项目- web.xml文件

    • Web.xml 文件为web应用的配置文件,它必须放在web应用目录WEB-INF目录下。
    • Web.xml 文件用于对web应用下的web资源进行配置,服务器在启动时会读取web.xml 文件中的的内容

Servlet生命周期

在这里插入图片描述

http协议,http请求

  • 什么是HTTP?
  • 超文本传输协议 (HyperText Transfer Protocol)服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。()
  • HTTP是一个基于TCP/IP通信协议来传递数据
  • HTTP是一个属于应用层的协议,由于其便携、快速的方式,适用于分布式超媒体信息系统

在这里插入图片描述

http响应

  • 客户端连接上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。

  • 请求包括:

    请求行,请求头,请求体。

请求行包含http请求方式,请求资源名称,http版本。
请求头包含主机地址,以及客户端的一些环境信息,以键值对的形式传递。

Host: 127.0.0.1:8088 请求的主机地址
**Accept:**text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
浏览器能够处理的内容类型
Accept-Encoding: gzip, deflate, br 浏览器能够处理的压缩编码
**Accept-Language: **zh-CN,zh;q=0.9 浏览器当前设置的语言
**User-Agent: **Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/69.0.3497.100 Safari/537.36 使用的浏览器和操作平台信息
**Connection: **keep-alive 浏览器与服务器之间连接的类型

请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收后到再解析。
username = admin & userpwd = 123

  • GET方式:

    • 超链接访问,默认是GET方式
    • form提交,不指定method,默认为GET方式
  • POST方式:

    • form提交,指定method = “POST”
  • Get方式与post方式的区别

    • Get方式主要是从服务器获取信息;post主要是想服务器提交信息
    • Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在请求体中提交。
    • GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而POST则没有此限制。
  • 请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest来表示请求。

  • HttpServletRequest : 封装了请求的信息,可以从中获取任何请求信息。

  • getParameter(name) — String 通过name获得值

  • getParameterValues — String[ ] 通过name获得多值

  • 理中文乱码

    post

    ​ setCharacterEncoding(编码格式)

getMethod()得到客户机请求方式
getScheme()请求协议
getRemoteAddr()返回发出请求的客户机的IP地址
getServerName()服务器名(ip或域名)
getServerPort()服务器端口
http响应
	一个http响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体。响应行里包含了http协议版本,以及用于描述服务器对请求的处理结果。

HTTP/1.1 (协议版本) 200(状态吗) OK(状态码描述)
状态码:服务器和浏览器用于确定状态的固定数字号码
200:请求成功
302:请求重定向
400:语义有误,当前请求无法被服务器理解或请求参数有误
404:请求资源不存在,通常是路径写错了或者服务器资源删除了
500:服务内部错误(代码异常)

响应头用于描述服务器的基本信息,以及数据描述

Ser ver Apache-Coyote/1.1
Content-Type text/html;charset=UTF-8
Content-Length 0
Date Wed, 13 Sep 2017 02:26:07 GMT
  • 响应体代表服务器向客户端浏览器回送的正文

  • Web浏览器收到客户端的http请求,会针对每一次请求,分别创建一个代表响应的HttpServletResponse对象。

  • HttpServletResponse对象代表响应。

  • 用getWriter()获得一个PrintWriter字符输出流输出数据

    response会默认以ISO8859-1将需要输出到浏览器的字符进行解码,如果输出的字符在ISO8859-1中不存在,就会导致乱码问题额。

  • response.setContetnType(“text/html;charset=utf-8”);方法可以同时设定response所使用的字符集编码和浏览器打开所用的字符集编码。

web会话跟最机制
  • 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是CookieSession。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
  • 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了
  • Session是另一种记录客户状态的机制,它在用户第一次打开浏览器连接到后端服务器时,由服务器创建产生,生成一个id号,作为会话标识
  • 服务器通过Cookie将生成的会话id响应到浏览器中,之后每次请求将浏览器端的会话id向服务器端提交,服务器就可以得知是哪个客户端发起的请求
session
  • Servlet API中, 定义了HttpSession接口,用来分装会话对象。

  • HttpSession是接口,会话对象是Web容器创建的,在Servlet中使用HttpServletRequest中的方法获得对象。

    • public HttpSession getSession() :获取跟当前请求相关的session,如果不存在session,就创建一个新的session对象返回。
  • 使用session实现会话机制的过程

    1、当容器创建一个新的HttpSession对象后,即生成一个随机数,成为会话ID,并将ID值封装一个名字为JSESSIONID的session,返回给客户端。

    2、调用request.getSession方法获得会话对象时,容器先从request中获取JSESSIONID值,根据JSESSIONID值查找到对应的会话对象,返回使用。

    3、如果没有JSESIONID值,认为当前的请求没有相关联的对象,重置步骤1

  • HttpSession 接口中定义了一系列的方法

在这里插入图片描述

  • 会话对象生命周期
  • 会话对象是容器创建的,并保存在容器中,如果客户端连接到服务器后,却置之不理,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器都会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象。
  • 除了根据有效时间使会话对象失效外,还可以调用HttpSession中的invalidate方法,使会话失效,立即销毁会话对象

过滤器

  • Servlet API中,与过滤器有关的API共有三个接口,分别是
    • Filter
    • FilterChain
    • FilterConfig
  • Filter接口是过滤器类必须实现的接口,该接口中有三个方法。
  • nit(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。参数FilterConfig可以获得filter的初始化参数。
  • doFilter(ServletRequest request, ServletResponse response,FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
  • destroy():该方法在容器销毁过滤器对象前被调用。
  • 该接口类型作为Filter接口中doFilter方法的参数使用。FilterChain接口中有一个方法
    • doFilter(ServletRequest request,ServletResponse response),该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能是下一个过滤器,也可能是目标资源。
  • 该接口类型作为Filter接口中的init方法的参数使用,FilterConfig接口中有一个常用方法
    • getInitParameter(String name),该方法用来获得过滤器的初始化参数值。在web.xml中,可以为每一个filter配置需要的初始化参数,与Servlet的类似。过滤器的初始化参数即可通过FilterConfig中的getInitParameter方法获取。
  • 过滤器用来实现通用的功能,减少代码冗余,提高可维护性
  • 一个过滤器可以配置给多个资源使用
  • 一个资源也可以配置多个过滤器,按照配置顺序调用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web和Servlet 的相关文章

  • 将 JSTL 添加到 jsp (Tomcat 8) [重复]

    这个问题在这里已经有答案了 我想在我的 jsp 中使用 JSTL 库 现在我按照教程进行操作 它告诉我将此行添加到 jsp 页面 它给我错误无法解析 taglib 与 uri 然后是 URL 我正在运行 tomcat 8 我的 web xm
  • 如何在 Intellij IDEA 中为 Apache Tomcat 指定自定义 JRE 路径?

    问题是如何指定自定义JRE路径为Apache tomcat in Intellij IDEA 当从以下位置启动应用程序时IDEA 看来 只需配置它的路径 路径jvm dll in Apache Tomcat监视器没有帮助 还有其他想法或方法
  • Tomcat 是否提供对 Java 9 BETA 的支持

    我正在使用 Eclipse Mars 开发 Java 9 BETA 版本 想知道 Tomcat 是否提供对 Java 9 BETA 的支持 2017 年 8 月 26 日更新 在我寻求答案的过程中在 IntelliJ 2017 2 2 中的
  • Postman - 所需的 MultipartFile 参数不存在 - Spring,Java [重复]

    这个问题在这里已经有答案了 Edit 这个问题不同于 jQuery Ajax 文件上传 所需的 MultipartFile 参数 文件 不存在 https stackoverflow com q 29488852 2279082不同之处在于
  • Tomcat 8 中的多部分文件最大大小配置[重复]

    这个问题在这里已经有答案了 我的应用程序服务器是 Tomcat 我需要将文件 大尺寸 上传到我的应用程序 车身尺寸为POSTrequests 确实很长 大约 15 MB 或更多 我可以设置任何类型的配置或代码来解决这个问题吗 请记住 这是m
  • Tomcat 8 上的 PHP

    我找到了很多如何让 PHP 在 Tomcat 上运行的指南 但都是以前的版本 我尝试了所有这些 但我所能显示的只是一个空白页面 并且代码仍然没有被触发 我知道 Tomcat 是为 Java 应用程序而不是 PHP 构建的 但我需要找到一种使
  • 在 Java 构建过程中更改常量的最佳方法

    我继承了一个在 Tomcat 下运行的 Java 应用程序 servlet 由于历史原因 根据应用程序的部署位置 本质上是品牌问题 代码具有不同的 外观和感觉 选项 有几个常量控制这个品牌过程 它们具有不同的功能 不应压缩为单个常量 即 B
  • Tomcat 托管具有多个 SSL 证书的多个虚拟主机

    例如 我有一台使用 Tomcat 7 托管多个网站的服务器 a abc com b abc com c def com d def com 使用tomcat的虚拟主机功能 因此它们各自可能属于不同的webapps文件夹 我们现在正在尝试为每
  • 您能让 Tomcat 6 stdout.log 文件表现得像 log4j DailyRollingFileAppender 吗?

    我们使用的是 Tomcat 6 的 Windows 安装 默认情况下 我们应用程序的 log4j 输出将转到 catalina base logs stdout log 文件 该日志文件仅在我们重新启动 Tomcat 时滚动 并且文件名始终
  • 在tomcat中显示Spring-security的SQL错误

    我使用 spring security 框架创建了一个 Web 应用程序 我设置了一个数据库来存储用户及其角色 但 tomcat 给出以下错误 17 sep 2010 11 56 14 org springframework beans f
  • Tomcat - 将旧上下文根重定向到新上下文根

    我们想要更改 Tomcat Web 应用程序的上下文根 并让旧的 URL 引导用户访问新命名的应用程序 http hostname oldappname http hostname newappname 实现此目的的一种方法是部署具有 ne
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • 无法启动组件 [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]

    我正在尝试构建一个 SpringBoot 应用程序 import org springframework boot SpringApplication import org springframework boot autoconfigur
  • Java HttpSession 属性存储在哪里?

    对象是否被序列化并发送给用户并在每个连接上返回 存储在 cookie 中 或者它们存储在服务器堆中并且cookie只是一个非常小的标识符 有关此主题的任何信息都会有所帮助 谢谢 你第二次猜到了 该 cookie 包含一个 JSESSIONI
  • Tomcat 基本 URL 重定向

    使用tomcat 如何获取请求http www mydomain example重定向到http www mydomain example somethingelse index jsp 我什至没有设法获得要显示的index htmlhtt
  • web.xml 中的多个安全约束不起作用

    我正在升级一个 Web 应用程序 Servlet 3 0 Tomcat 7 它的大部分页面都需要基本身份验证 该应用程序具有一小组监视 servlet 其中任何一个都不应该受到保护 在我的web xml 我目前有以下内容security c
  • MySQL JDBC 连接上的故障转移?

    我正在尝试确定如何使用 MySQL JDBC 驱动程序实现高可用性解决方案 似乎有一个我可以设置的故障转移属性 但我想知道当使用 MySQL 和 JDBC 实现简单的故障转移机制时 人们倾向于使用什么 我们计划将 2 个前端 Tomcat
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • 在Tomcat中设置环境变量TESSDATA_PREFIX

    我们正在使用名为 Tess4J 的 Tesseract OCR Java 库 如果作为独立应用程序运行 它可以正常工作 它需要一个名为 TESSDATA PREFIX 的变量 其中包含 tessdata 配置和其他字符集相关文件 它也可以与
  • 泽西宁静例外

    我面对的是泽西岛 2 7 这是我的服务 package edu srv rest import javax ws rs GET import javax ws rs POST import javax ws rs Path import j

随机推荐

  • pycharm自定义多行注释的颜色

  • JWT续期问题,ChatGPT解决方案

    JWT JSON Web Token 通常是在用户登录后签发的 用于验证用户身份和授权 JWT 的有效期限 或称 过期时间 通常是一段时间 例如1小时 过期后用户需要重新登录以获取新的JWT 然而 在某些情况下 用户可能会在JWT到期之前使
  • DirectShow应用——支持Windows Media格式

    大家知道 微软定义了自己的一种媒体文件类型 叫做ASF Advanced Systems Format ASF其实是一个文件 容器 它本身并没有规定音视频的压缩格式 在ASF文件中 我们可以包含任何格式的压缩的 包括MPEG 4 或非压缩的
  • 抽象工厂设计模式的扩展

    american com itheima pattern factory config factory AmericanCoffee latte com itheima pattern factory config factory Latt
  • 【Apache Spark 】第 11 章使用 Apache Spark 管理、部署和扩展机器学习管道

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • git分支合并错误回滚

    1 合并 比如testB分支合并testA分支 2 还原 如果合并时 代码有错误 已经提交的远程分支 可以参考tortoisegit 还原到某个版本 强制还原 3 重新合并 可重新执行合并流程 改过错误代码后 重新提交的远程分支
  • Java异常类详解

    目录 异常简介 异常体系 异常的处理 自定义异常类 一 异常简介 1 1 异常定义 异常是运行程序的过程中产生的异常情况 异常的情况是指程序在运行过程中 可能由于外界条件的变更 不设想的不一致 导致出现错误的情况 如数据库连接 异常不同于常
  • C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)

    http my oschina net alphajay blog 5029 from rss 初看到这个题目 你可能会有些疑惑 C 类对象的创建还有什么好说的 不就是调用构造函数么 实际上情况并不是想象中的那么简单 大量的细节被隐藏或者被
  • Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件

    场景 Node RED简介与Windows上安装 启动和运行示例 Node RED简介与Windows上安装 启动和运行示例 霸道流氓气质的博客 CSDN博客 在inject节点可以设置重复触发的周期性事件 比如每两秒输出一次时间 注 博客
  • Windows系统服务器如何磁盘挂载

    桌面远程登录服务器后 服务器桌面上只有一个回收站的 我们在桌面空白处右键属性 gt 桌面 gt 自定义桌面 gt 然后把我的电脑前面的框框勾上 再然后点应用 确定 ok 回到桌面我们就能看到我的电脑了 步骤 点击我们电脑 gt 右键管理 g
  • VSCODE设置位置

    目录 设置位置 用户区 工作区 设置方法 设置编辑器 设置文件 结束 设置位置 VSCODE设置位置分为用户区和工作区 用户区 用户设置是全局的 对所有工作区和项目都有效 用户设置会存储在用户的配置文件夹中 并以settings json文
  • oceanbase 与hbase主要区别

    oceanbase支持跨表的事务 而hbase中支持跨行的事务 这是由他们的设计特别决定的 updateserver实际上是将Hbase所有ReginonServer的memtable聚合在一起 regionserver只服务一部分tabl
  • 编程tips

    一 是XOR 是不等于 if a b 和if a b 对对于聪明的编译器来说效率应该是一样的 二 与 的优先级比 高一级 表达式的结合次序取决于表达式中各种运算符的优先级 优先级从上到下依次递减 最上面具有最高的优先级 逗号操作符具有最低的
  • Spring中AOP

    1 概述 AOP 面向切面编程 将程序中的非业务代码抽取 在不修改业务代码的前提下 为其添加功能 功能增强 面向切面的编程思想底层是为目标创建一个代理对象 让代理对象调用目标类中方法 在代理对象调用时 可以额外的调用其他的方法 增强的方法
  • hduoj 2011

    多项式求和 Problem Description 多项式的描述如下 1 1 2 1 3 1 4 1 5 1 6 现在请你求出该多项式的前n项的和 Input 输入数据由2行组成 首先是一个正整数m m lt 100 表示测试实例的个数 第
  • Linq to Sql : 并发冲突及处理策略

    0 并发冲突的示例 单用户的系统现在应该比较罕见了 一般系统都会有很多用户在同时进行操作 在多用户系统中 涉及到的一个普遍问题 当多个用户 同时 更新 修改或者删除 同一条记录时 该如何更新呢 下图展示了开放式并发冲突的一个示例 假设数据库
  • OpenGL片段列表渲染:实现流畅的大规模场景渲染

    OpenGL片段列表渲染 实现流畅的大规模场景渲染 在实时渲染领域 处理大规模场景是一项重要的任务 然而 传统的渲染方式存在着效率低下 内存消耗大等问题 为了解决这些问题 最近的研究中提出了使用片段列表进行场景渲染的方法 本文将介绍如何使用
  • python批量写入数据

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 python批量写入文件内容 前言 一 使用步骤 1 引入库 前言 提示 这里可以添加本文要记录的大概内容 python批量写入文件内容 提示 以下是本篇文章正文内容 下面案
  • 数字后端——信号完整性分析

    随着光刻和集成电路制造工艺的不断进步 以及芯片的特征尺寸从深亚微米到纳米的迅速采用 人们一方面因为芯片的功能极大提高而受益 另一方面 当逻辑门的沟道长度减小时 门的开关时间会减小 这意味着输出驱动器上升时间变短 或者说时钟频率可以更高 同时
  • Web和Servlet

    Web web开发概述 学习web开发 需要先安装一台web服务器 将开发好的web项目部署在web服务器中供外界访问 web开发环境搭建 Web服务器是指驻留于英特网上某种类型计算机的程序 可以向浏览器等Web客户端提供文档 也可以放置网