JavaWeb ( 五 ) Servlet

news2024/9/21 12:44:16

2.3.Servlet

Servlet(Server Applet)是Java Servlet的简称。 是在服务器端执行的 , 用于响应客户端请求的Java类。HttpServlet 是使用java语言对http通信的实现。

在这里插入图片描述

2.3.1.Servlet声明

在 web.xml 中声明Servlet的请求url及对应的类路径 , 3.0版本后可以在类上使用 @WebServlet(“/test”) 注解来声明

servlet-class : 内部地址路径

url-pattern : 对外发布的名字

servlet-name : 两者的对应

  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.yuan.servlet.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/testServlet</url-pattern>
  </servlet-mapping>

2.3.2.Servlet生命周期

在这里插入图片描述

加载 : 在web.xml中声明Servlet相关信息

实例化 : 由WebServer( 如 : Tomcat )根据web.xml中声明信息进行实例化, 实例化后才能调用方法

​ 第一种方式 : 第一次被请求时, 先实例化, 然后调用了 init() 方法进行初始化
​ 第二种方式 : 在 web.xml 文件中在<servlet></servlet>下加入 <load-on-startup>0</load-on-startup>Web服务器启动时就会实例化

初始化 : 在init() 方法中,进行初始属性设置

服务 : 用户发请求后, 会调用 service(request, response) 方法, 请求/响应的信息由WebServer封装成HttpServletRequest / HttpServletResponse对象

销毁 : 当servlet被销毁时, 调用destroy()方法, 可以在这个方法中释放一些资源

垃圾回收 : 被JVM进行垃圾回收时, 调用 finalize() 方法

package com.yuan.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {

    @Override
    public void init(ServletConfig config) throws ServletException {
        // 初始化方法
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 服务方法
    }

    @Override
    public void destroy() {
        //销毁方法
    }
}

2.3.3.请求方式

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

2.3.3.1.GET/POST比较

GET一般用于获取/查询资源信息,而POST一般用于更新资源信息

默认方式 :

​ -GET 超链接, location.href, form表单 默认都是GET的

​ -POST 将 form表单的 method属性设置成 post, form通信转成POST方式

传值方式 :

​ -GET 数据会附在URL之后, 参数显示在地址栏。所以是明文传值

​ -POST 数据放置在HTTP包的包体中, 参数不在地址栏显示, 登录时要使用POST, 隐藏登录信息

传值大小:

​ -GET 1K~8K,受浏览器的影响, 通常为2K

​ -POST 理论上没有大小的限制, 所以做上传文件时, 由于文件的大小原因, 只能使用POST

中文传递 :

​ -GET 默认使用ISO-8859-1, 现在的浏览器都有优化

​ -POST 根据页面的中文编码设置, 服务器接值要转码

2.3.3.2.字符编码

GB2312编码:1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。

BIG5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。

GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。

​ GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

Unicode编码(UTF-8):国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。
u4e00-u9fa5 , 0x3400-0x4DB5 (中文)

2.3.4.两种转页

内部转 :

 request.getRequestDispatcher( "目标页面" ) .forward( request, response );

跳转后浏览器地址栏不会变化

目标页面路径可以使用相对路径

使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute()

重定向 :

 response.sendRedirect( request.getContextPath() + "目标页面" ); 

跳转后浏览器地址栏变化。

目标页面要使用绝对路径

这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute()来传递

2.3.5.三种容器

存储容器 : 是指用于在请求或转页过程中用来存储所在传递的参数值的对象

常用方法

// 添加属性
.setAttribute(key, value)

// 取属性值
.getAttribute(key)

// 移除属性
.removeAttribute(key)

在Web项目中有三种容器, 因为它们的作用范围(生命周期)不同, 也叫三种作用域

其中 application 包含 多个session , session 包含多个 request

所以 从 request能得到session , 而从 request, session 能得到 application

2.3.5.1.request请求

类型 : HttpServletRequest

生命周期 : 客户端发起请求创建

​ 遇到响应 Response 或者生成页面结束

常用方法 :

// 接页面传来的值
String value = request.getParameter(key);   //接一个值
String[] vals = request.getParameterValues(key);  //接一组值

// 得到其它容器
HttpSession session = request.getSession();
ServletContext app = request.getServletContext();

// 得到URL 信息
StringBuffer url = request.getRequestURL();
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String uri = request.getRequestURI();

String cpath = request.getContextPath();       // 得到绝对路径
String servletUrl = request.getServletPath();  // 被请求servlet

String remoteAddr = request.getRemoteAddr();  // 得到客户端IP

2.3.5.2.session请求

类型 : HttpSession

生命周期 : 浏览器与服务器建立通信开始

​ 主动关闭或长时间不与服务器通信结束

常用方法 :

// 取session 的 标识 id
String sid = session.getId();

// 获取最长等待时间
int max = session.getMaxInactiveInterval();

// 设置最长等待时间, 以秒为单位
session.setMaxInactiveInterval(len);

// 取所属的上下文
ServletContext app = session.getServletContext();

在 web.xml中也可以设置最长等待时间, 单位是分钟

  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>

2.3.5.3.application上下文(全局)

类型 : ServletContext

生命周期 : 项目启动创建

​ 项目关闭结束

常用方法 :

// 取项目的真实路径(发布路径)
String path = app.getRealPath(path);


// 取 web.xml 中设置的参数
String pv = app.getInitParameter(paramName);

在web.xml 里信息可以被application获取

  <context-param>
    <param-name>paramName</param-name>
    <param-value>paramValue</param-value>
  </context-param>

2.3.6.ServletConfig 设置对象

在 Servlet的init() 初始化方法传入参数 ServletConfig

public void init(ServletConfig config) throws ServletException {
	
    // 取web.xml 文件中在<servlet></servlet>下的信息
	String icon = config.getInitParameter(configName);
	
	// 取所属的上下文
	ServletContext app = config.getServletContext();
}

在web.xml 文件中在下的信息

  <servlet>
      
    <init-param>
      <param-name>configName</param-name>
      <param-value>configValue</param-value>
    </init-param>
      
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.yuan.servlet.TestServlet</servlet-class>
  </servlet>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/494723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APSIM模型

随着数字农业和智慧农业的发展&#xff0c;基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

趣谈西工大电子实习物联网智慧交通系统

学习简介&#xff1a; 物联网智慧交通系统是电子实习中相当有趣的一个环节&#xff0c;可以在一定程度上弥补没有被分配到智能小车的遗憾。在这个模块当中&#xff0c;你将在老师的带领下以完成两个小任务为驱动&#xff0c;让自身能力在八个学时当中充分锻炼。 下面这两张图…

微信小程序商城搭建--后端+前端+小程序端

介绍&#xff1a; 前端技术&#xff1a;React、AntdesignPro、umi、JavaScript、ES6、TypeScript、 小程序 后端技术&#xff1a;Springboot、Mybatis、Spring、Mysql 软件架构&#xff1a; 后端采用Springboot搭配前端React进行开发&#xff0c;完成用户管理、轮播图管理、…

[MySQL / Mariadb] 数据库学习-Linux中安装MySQL,YUM方式

[Mariadb] 数据库学习笔记 在Linux中安装MySQL&#xff0c;YUM方式mariadb 介绍安装启服务初始配置修改密码 密码策略,默认策略是1show variables; 查所有变量show variables like "%变量%"; 查特定的变量参数临时&#xff1a;永久&#xff1a; MySQL基本操作连接SQL…

使用@PropertySource加载配置文件

1.PropertySource和PropertySources注解 1.1.PropertySource注解概述 PropertySource注解是Spring 3.1开始引入的配置类注解。通过**PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中&#xff0c;Environment接口提供了方法去读取配置文…

ModStartCMS v6.3.0 电脑端在线充值,前端库升级

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

AMA 回顾|关于访问水晶铸造的一些调整建议

这是社区系列 AMA 的第一期。下周&#xff0c;我们将举行一场新的 AMA&#xff0c;讨论重新启动游戏的相关内容。 感谢大家在百忙之中参与这次活动。相信社区的每一位成员都在蓝精灵协会这个项目中投资了一些东西&#xff0c;比如时间、精力或者是金钱。蓝精灵协会团队在过去的…

docker打包流程

docker打包流程 1、使用docker前置准备&#xff1a; 电脑下载docker桌面版&#xff0c;以及开启虚拟机步骤&#xff1a;https://blog.csdn.net/qq_34905631/article/details/126573826下载docker桌面版 &#xff1a;https://docs.docker.com/desktop/install/windows-install…

swagger-codegen智能生成Python-unittest测试用例

简介&#xff1a;Swagger Codegen是一个开源项目&#xff0c;用于从OpenAPI规范&#xff08;以前称为Swagger规范&#xff09;文件生成服务器存根、客户端库和API文档。它支持多种编程语言和框架&#xff0c;包括Python、Java、Ruby、Go等。 历史攻略&#xff1a; sanic&…

快速打造高效代驾服务:代驾系统源码分享

要想快速打造高效代驾服务&#xff0c;选择一款优秀的代驾系统是非常重要的。本文介绍的代驾系统源码是基于PHP语言和MySQL数据库开发的&#xff0c;可以轻松地在Linux或Windows系统中部署。 首先&#xff0c;需要确保服务器环境符合系统的要求&#xff0c;包括PHP版本、MySQL版…

三范式(详解+例子)

第一范式&#xff08;1NF&#xff09;&#xff1a;每一列都是不可分割的原子数据项&#xff08;什么意思&#xff0c;每一项都不可分割&#xff0c;像下面的表格就能分割&#xff0c;所以它连第一范式都算不上&#xff09; 分割后的样子 &#xff08;它就是第一范式了&#xff…

crm项目bug小结

项目主要内容分析&#xff1a; 第一天完成了系统用户登录、退出、密码修改、全局异常、非法请求与记住我等系统基本功能。 项目的目录结构如图&#xff1a; 1 登录思路&#xff1a; ** * 1.参数校验 * 用户名 非空 * 密码 非空 * 2.根据用户名 查询用户记录 * 3.校验用户存…

搞懂 API ,API 中 URI 设计规范分享

API&#xff08;Application Programming Interface&#xff09;是现代软件开发中的一项关键技术&#xff0c;它为不同应用程序间提供了数据和功能交互的标准化方式。而 URI&#xff08;Uniform Resource Identifier&#xff09;作为 API 中的重要部分&#xff0c;其规范和良好…

BigCode开放性能超越Copilot的代码生成模型Starcoder

BigCode释出高效能程式码生成模型StarCoderBase&#xff0c;与为Python调校的StarCoder&#xff0c;效能超越GitHub Copilot初期版本所用的OpenAI code-cushman-001模型&#xff1a; BigCode昨晚发布了基于源代码和自然语言文本训练的编程语言生成模型StarCoder。其训练数据包…

JavaSE基础(五)—— 方法(定义、调用、重载)、return关键字

目录 一、方法定义、调用 1. 方法完整的定义形式、调用 2. 方法的其他定义形式、调用 二、方法使用的常见问题 三、方法案例 1. 定义方法的技巧、计算 1- n的和返回 2. 数组求最值案例改方法形式 四、方法调用的内存图 五、方法的参数传递机制 基本类型和引用类型的参…

携带信息的Ajax GET请求

前端页面代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>ajax get请求</title><script type"text/javascript">window.onload function () {document.getEle…

Spring管理数据库事务

Spring编程式事务和声明式事务的验证 1、工程目录pom.xml 2、在resources目录创建配置文件applicationContext_1.xmlapplicationContext_2.xmlapplicationContext_3.xmljdbc.properties 3、创建数据表accountaccount 4、创建dao类5、创建service类6、创建测试类7、实验结果图1 …

基于python的点云处理库总结

想对于PCL&#xff0c;python处理点云的库还是比较多的&#xff0c;下面对此进行简单的总结&#xff1a; 一、Open3D A Modern Library for 3D Data Processing&#xff0c;Intel出品&#xff0c;MIT协议。 Open3D是一个支持3D数据处理软件快速开发的开源库。Open3D使用C和P…

CSS - 垂直菜单(鼠标移入时显示右侧容器)

效果图 示例源码 <body><section class="content"><ul class=

OpenVINO 2022.3之四:OpenVINO模型转换

OpenVINO 2022.3之四&#xff1a;OpenVINO模型转换 OpenVINO 2022.3 支持的模型格式: OpenVINO IR&#xff08;中间表示&#xff09; - OpenVINO™的专有格式&#xff0c;可以完全利用其全部功能。 ONNX和PaddlePaddle - 直接支持的格式&#xff0c;这意味着它们可以在OpenVI…