Java整理10

1、注解方式

复制代码
@WebServlet("/s1")
使用注解方式就不用xml方式了
Servlet生命周期        		    		 时间段
	(1)实例化			构造器			第一次请求
	(2)初始化			init			构造完毕
	(3)接收处理请求		service()		每次
	(4)销毁			destroy()		关闭服务
load-on-startup=负数:服务启动时不会自动初始化、正数:初始化顺序
@webSevlet(value="/s1",loadOnStartup=5)
继承HttpServlet后要么重写service()要么重写deGet/doPost

2、注解形式与XML形式

复制代码
注解形式:
	@WebServlet(
		urlpatterns="servlet1"
		initparms={@webInitParam(name="keya",value="valuea")}
	)
	@WebInitParam(name="keyb",value="valueb")
XML形式:
<init-param>
	<param-name>keya</param-name>
	<param-value>valuea</param-value>
</init-param>

3、ServletConfig与ServleContext

复制代码
ServletConfigt	多例
ServletConfig sc=get.ServletConfig();
String keya=servletConfig.getInitParameter("keya")
获取所有初始参数的名字:
	Enumration<String> initparameternames=ServletConfig.getInitParaeterName();
	hasMoreElements:判断有没有下一个元素  有true 无false
	nextElement:取出下一个元素  向下移动游标
每一个Servlet都有一个ServletConfig对象
ServleContext	单例
servletContext可以为所有Servlet提供公共参数
<context-param>
	<param-name>enconding</param-name>
	<param-value>UTF-8</param-value>
</context-param>
获取ServletContext对象		
	this.servletContext()
	ServletContext sctext=servletConfig.getServletContext();
	ServletContext sctext=req.getServletContext();数据获取同servletConfig一样
ServletContext的API
eg:
	要求向upload文件夹中写文件
	ServletContext servletContext=getServletContext();
	String path=ServletContext.getRealPath("upload");
	获取一个指向项目部署位置下的某个文件/目录的磁盘真实路径
	FileOutputStream fos=new FileOutputStream(path)
	获取项目部署下的上下文路径/访问路径
	String contextpath=ServletContext.getContextPath();
域对象
	void setAttribute(String key,Object value);  存储/修改
	Object getAttribute(String key);  获取
	void removeAttribute(String key);  移除

4、HttpServletRequest

复制代码
HttpServletRequest  接口  ServletRequest  父接口
行相关:请求方式、uri、协议/版本号
	req.getMethod()  		请求方式
	req.getSheme()  		协议
	req.getProtocol()  	    协议+版本号
	req.getRequestURL()     uri  资源路径
	req.getURL()  			完整路径
	req.getLocalPort()
	req.getServePort()      客户端发送请求时
	req.getRemotePort()
头相关:key:value
	req.getHeader("key")		获取指定请求头
	req.getHeaderNames()	    获取所有请求头名字
Enumeration<String> headerNames=req.getHeaderNames();
获取参数
	Enumeration<String> parameterNames=req.get.parameterNames();返回字符串列表
	req.getParameter(参数名)		   	  根据参数名单个获取
	req.getParameterValues(参数名)	  获取单个参数值
	req.getParameterMap()=>Map<String,String[]>	
eg:
	Set<Map.Entry<string,string[]>> entries=parameterMap.entrySet();
	for(Map.entry<string,string[]> entry:entries){
		String pname=entry.getkey()
		String[] value=entry.getvalue()
		if(value.length>1)
			system.out.println(Arrays.toString(value))
		else
			system.out.println(Arrays.toString(value[0]))
	}

5、HttpServletResponse

复制代码
响应行		协议/版本号		状态码
resp.setStatus();
响应头
	resp.setHeader("key","value")	自定义键值对或修改原来的值
	resp.setContentType("text/html")或resp.setHeader("content-Type","text/html")
	resp.setContentLength(长度)或resp.setHeader("Content-Length",长度)
响应体
	PrintWriter wrier=resp.getWriter()
	向响应体中输入文本字符输出流
	writer.writer(str)
	String info="   "
	info.getBytes().length  返回串的字节长度
	向响应体中输入二进制的字节输出流
	ServletOutputStream outputstream=resp.getOutputStream()

6、请求转发和响应重定向

复制代码
注意:如果请求转发和重定向都可以,优先选用重定向
请求转发:HttpServletRequest
  获得请求转发器:RequestDispatcher rd=req.getRequestDispatcher("转发路径")
  转发动作:rd.forward(rep,resp)
	(1)请求转发时request和response对象会继续传递给下一个资源
	(2)请求中的参数可以继续向下传递
	(3)请求转发是服务器内部行为
	(4)客户端地址栏不变
	(5)目标资源可以是动态的可以是静态的
	(6)可以通过请求转发方式唯一访问WEB-INF下方资源
	(7)目标资源不能是外部资源
响应重定向:HttpServletResponse
   resp.setStatus(302)
  重定向动作:resp.sendRedirect("地址")或resp.setHeader("location","地址")
  	(1)通过HttpServletResponse对象的sendRedirect方法实现
  	(2)服务端响应状态码为302与新路径,提示客户端找新资源
  	(3)客户端发送多次请求
  	(4)重定向可以是Servlet动态或html静态资源
  	(5)重定向不可以给到WEB-INF下受保护的资源
  	(6)可以重定向到项目以外的外部资源
  	(7)地址栏改变

7、获取请求体中非键值对的数据

复制代码
BufferReader read=req.getReader()  字符流   JSON
ServletInputStream sis=req.getInputStream()  字节流  二进制文件
相关推荐
C语言小火车1 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
北冥you鱼1 小时前
abigen 最佳实践:从入门到精通,高效生成 Go 语言合约绑定
开发语言·golang·区块链
ALex_zry2 小时前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
shushangyun_3 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..3 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
忧郁的紫菜3 小时前
基础实现:单篇 Markdown 转 Word
开发语言·c#·word
甜美的小天鹅3 小时前
Swifter C#之inline还是不inline,这是个问题
开发语言·c#
学渣超3 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
小短腿的代码世界3 小时前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构
掉鱼的猫3 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc