Servlet学习笔记

该博客是关于Servlet的学习笔记,聚焦Servlet相关知识,属于JavaWeb领域,为学习Servlet提供了相关记录。

Servlet学习笔记

Servlet:

Servlet是javaweb的三大组件之一,它属于动态资源
作用:处理请求(每个Servlet都是唯一的,它们处理的请求都是不同的)
	接收请求数据
	处理请求
	完成响应
Servlet中的方法大多数不由我们来调用,而是由服务器(tomcat)来调用;并且Servlet的对象也不由我们来创建,有tomcat来创建。
如何让浏览器访问servlet
	1.给Servlet指定一个Servlet路径(让Servlet与一个路径绑定在一起)
	2.浏览器访问Servlet路径
		给Servlet配置路径需要在web.xml中对Servlet进行配置
		web.xml
		<servlet>
			<servlet-name>xxx</servlet-name>
			<servlet-class>xx.xx.xx(类名的文件路径)</servlet-class>
		</servlet>

		<servlet-mapping>
			<servlet-name>xxx<servlet-name>
			<url-pattern>/AServlet</url-pttern>
		<servlet-mapping>
		在浏览器上输入localhost:8080/servlet/AServlet来访问xxx文件,而xxx文件指定的是xx.xx.xx(类名的文件路径)
Servlet生命周期方法
	void init():创建之后立即初始化参数的方法,只会执行一次,它并不是Servlet的创建方法
	void service(ServletRequest request, ServletResponse response):每次处理请求都会被调用
	void destroy():销毁之前立即释放资源的方法,只会执行一次,它并不是Servlet的销毁方法
特性:
	单例:一个类只有一个对象,当然可以存在多个Servlet类
	线程是不安全的,所以他的效率是高的
Servlet类由我们来编写,但是对象由服务器来创建,并且由服务器来调用相应的方法

ServletConfig:(此中的对象均为接口,由java提供,而实现类由tomcat提供)
	一个ServletConfig对象,对应一段web.xml中的Servlet的配置信息
	String getServletName():返回该servlet实例的名称(获得的是<servlet-name>中的内容)
	不存在获取<servlet-class>中的内容的方法,因为这是不安全的。
	ServletContext getServletContext():获取Servlet上下文对象
	String getInitParameter(String name):通过名称获取指定的初始化参数的值
	Enumeration getInitParameterNames():获取所有初始化参数的名称(返回值为迭代器)

GenericServlet:已经完美分装了Servlet的五个主要类+一些其他类,为我们只需要继承该类即可。

HttpServlet:
	void service(ServletRequest,ServletResponse)  -->servlet的生命周期函数
		将两个参数强制转化为Http协议相关的类型
		调用类的service(HttpServletRequest,HttpServletResponse)
	void service(HttpServletRequest,HttpServletResponse)  -->参数已经是Http协议相关的,使用起来就更加方便。
		它会通过request得到当前请求的请求方式,例如:GET或者POST
		根据请求方式再调用doGet()或者doPost()

	void doGet(){...}   -->需重写
	void doPost(){...}  -->需重写

不要在servlet中创建成员,创建局部变量即可
可以创建无状态成员
可以创建只读的有状态的成员

在<servlet>中加上<load-on-startup>非负整数</load-on-startup>  (非负整数表示启动顺序,小数为优) 则servlet将在服务器启动后自动创建,并不再是第一次被访问时创建了。

域对象:用来在多个Servlet中传递数据
	域对象必须要有存数据的功能(域对象内部有一个Map用来存储数据)
	域对象必须要有取数据的功能
	JavaWeb的四大域对象:
		PageContext()
		ServletRequest()
		HttpSession()
		ServletContext()


ServletContext():
	一个项目只有一个ServletContext对象!
	我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据!
	这个对象在服务器启动时创建,在服务器关闭时才会销毁。

	获取ServletContext:
		ServletConfig#getServletContext()
		GenericServlet#getServletContext()
		HttpSession#getServletContext()
		ServletContextEvent#getServletContext()
		......
	操作数据的方法:
		void setAttribute(String name,Object value):用来存储一个对象(存储一个域属性)
		Object getAttribute(String name):用来获取ServletContext中的数据
		void removeAttribute(String name):用来移出ServletContext中的域属性
		Enumeration getAttributeName():获取所有域属性的名称

	获取应用初始化参数
		Servlet也可以获取参数,但它是局部的,即一个Servlet只能获取自己的初始化参数,不能获取别人的
		ServletContext可以配置公共的初始化参数,为所有的Servlet而用!
			<context-param>
				<param-name>context-name</param-name>
				<param-value>context-value</param-value>
			</context-param>

	获取资源的相关方法
		getRealPath("/index.jsp")   它所得到的路径是带有盘符的
		getResourceAsStream("/index.jsp")   获取资源对象后,再创建输入流对象
		getResourcePaths("/WEB-INF")   获取当前路径下所有资源的路径

	Servlet访问量的统计
		创建一个int类型的变量,然后保存到ServletContext的域中,这样可以保存所有的Servlet都可以访问到
		1、最初时,ServletContext中没有保存访问量相关的值
		2、当本站被第一次访问时,创建一个变量,设置其值为1,保存到ServletContext中
		3、当以后访问时,就可以从ServletContext中获取这个变量,然后在其基础上+1

		获取ServletContext对象,查看是否存在名为count的属性,如果没有,说明是第一次访问;如果有,说明不是第一次访问
			第一次访问:调用ServletContext的setAttribute传递一个属性,名为count,值为1
			第N次访问:调用ServletContext的getAttribute方法获取原来的访问量count,给访问量加1,在调用ServletContext的setAttribute方法完后设置

	获取类路径下资源
		获取类路径资源,类路径对一个JavaWeb项目而言,就是/WEB-INF/classes和/WEB-INF/lib每个jar包



response:
	状态码:
		200:成功
		302:重定向(需设置Location头(新地址))
		404:客户端错误(访问资源不存在)
		500:服务端错误
	响应头:
		头就是一个键值对,可以存在一个头一个值,也可以存在一个头多个值
		setHeader(String name,String value):适用于设置单值的响应头
		addHeader(String name,String value):适用于设置多值的响应头
		setIntHeader(String name,int value):适用于设置单值的int类型的响应头
		addIntHeader(String name,int value):适用于设置多值的int类型的响应头
		setDateHeader(String name,long value):适用于设置单值的毫秒类型的响应头
		addDateHeader(String name,long value):适用于设置多值的毫秒类型的响应头

		重定向,设置Location头完成重定向
		快捷重定向,sendRedirect(String Location);方法
		定时刷新,设置Refresh头(定时重定向)
		禁用浏览器缓存:Cache-Control、pargma、expires

	响应体:
		通常是html,也可以是图片
		response的两个流:
			ServletOutputStream:用来向客户端发送字节数据(图片)  ServletOutputStream out = response.getOutputStream();
			PrintWrite:用来向客户端发送字符数据!需要设置编码  PrintWriter writer = response.getWriter();
			两个流不能同时使用,否则会报错。

request:
	请求行
	请求头
	空行
	请求体(GET没体)

	请求协议中的数据都可以通过request对象来获取!
	获取常用信息:
		获取客户端IP  案例:封IP  request.getRemoteAddr()
		请求方式  request.getMethod()  可能是POST,也可能是GET
	获取请求头
		String getHeader(String name);适用于单值头
		int getHeader(String name);适用于单值int类型的请求头
		long getDateHeader(String name);适用于单值毫秒类型的请求头
		Enumeration<String> getHeader(String name);适用于多值请求头
		案列:
			通过User-Agent识别用户浏览器类型
			防盗链:如果请求不是通过本站的超链接发出的,发送错误状态码404 Referer请求头,表示请求的来源
	获取请求URL
		http://localhost:8080/servlet/HServletRequest?username=&password=

		String getScheme():获取请求协议    http
		String getServerName():获取服务器名    localhost
		String getServerPort():获取服务器端口    8080
		String getContextPath():获取项目名    /servlet
		String getServletPath():获取Servlet路径    /HServletRequest
		String getQueryString():获取参数部分,即问号后面的部分    username=&password=
		String getRequestURI():获取请求URI,等于不包含项目名+Servlet路径    /servlet/HServletRequest
		String getRequestURL():获取请求URL,等于不包含参数的整个请求路径    http://localhost:8080/servlet/HServletRequest

		获取完整的URL可以使用 String URL = request.getRequestURL()+"?"+request.getQueryString();

	获取请求参数:请求参数由客户端发送给服务器的! 有可能是在请求体中(POST请求),也可能是在URL之后(GET请求)
		String getParameter(String name);:获取指定名称的请求参数值,适用于单值请求参数
		String[] getParameterValues(String name);:获取指定名称的请求参数值,适用于多值请求参数
		Enumeration<String> getParameterNames();:获取所有请求参数名称
		Map<String,String[]> getParameterMap();:获取所有请求参数,期中可以为参数名,value为参数值
		案例:
			超链接参数
			表单数据

	请求转发和请求包含
		RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");  使用request获取RequestDispatcher对象,方法的参数是被转发或包含的Servlet的路径
		请求转发:rd.forward(request,response);
		请求包含:rd.include(request,response);

		有时一个请求需要多个Servlet协作才能完成,所以需要在一个Servlet跳转到另一个Servlet!
			一个请求跨多个Servlet,需要使用转发和包含
			请求转发:由下一个Servlet完成响应体!当前Servlet可以设置响应头!(留头不留体)
			请求包含:由多个Servlet共同完成响应体(留头也留体)
			无论是请求转发还是请求包含,都在一个请求范围内使用同一个request和response!

	request域:
		Servlet中三大域对象:request,session,application他们均有如下三个方法
			void setAttribute(String name,Object value);
			Object getAttribute(String name);
			void removeAtttribute(String name);

			同一请求范围内使用request.setAttribute(),request.getAttribute()来传值!
			前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()得到值

	请求转发和重定向的区别:
		请求转发是一个请求一个响应,而重定向是两次请求两次响应
		请求转发地址栏不变化,而重定向会显示后一个请求的地址
		请求转发只能转发到本项目的其他Servlet,而重定向不仅能重定向到本项目的其他Servlet,还能重定向到其他项目
		请求转发是服务器端行为,秩序给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名
		请求转发的效率高于重定向,因为是一个请求
			需要地址栏发生变化,必须使用重定向
			需要在下一个Servlet中获取request域中的数据,必须使用转发
代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值