Servlet
01. 新建一个WEB工程
02. 在Java目录下,新建一个Class 实现 Servlet 的相关函数 (核心服务:service)
03. 在 web.xml中配置映射关系
04. 运行效果 : http://localhost:8080/FirstWP_war_exploded/demo1
此时的效果,是在界面上没有展示任何内容,但在服务端是有消息输出的;
05. 执行原理
06. 鉴于Servlet在内存中仅存在一份,多人请求时,将存在线程安全,所以在service函数中,尽量不要定义成员变量,一般只配置局部变量使用;
即使非得使用成员变量,最好是只读,不要去写;
-----------------------------------------------
上述内容中,关于servlet配置,有些麻烦,每个servlet都需要配置,
从 servlet3.0开始 (javaEE6开始),可以支持注解了,可以不需要web.xml了
在Servlet类上,添加上注解 @WebServlet(urlPatterns="/demo1")
对于最重要的内容,同样可以使用value属性进行配置, @WebServlet(value="/demo1")
若只配置一个value值,则value可以省略; @WebServlet("/demo1")
---------------------------------------
IDEA与TomCat的相关配置
1. IDEA会为每个tomcat部署的项目单独建立一份配置文件;
Using CATALINA_BASE: "C:\Users\WTL\AppData\Local\JetBrains\IntelliJIdea2021.2\tomcat\b1e271b4-26c4-49e8-8230-06489215f0ee"
Using CATALINA_HOME: "D:\apache-tomcat-8.5.65"
Using CATALINA_TMPDIR: "D:\apache-tomcat-8.5.65\temp"
Using JRE_HOME: "D:\Java_Work\JDK\jdk1.8.0_281"
Using CLASSPATH: "D:\apache-tomcat-8.5.65\bin\bootstrap.jar;D:\apache-tomcat-8.5.65\bin\tomcat-juli.jar"
2. 工作空间项目 和 tomcat部署的web项目
tomcat真正访问的是 "tomcat部署的web项目" ,"tomcat部署的web项目"对应着 "工作空间项目"的web目录下的所有资源;
WEB-INF目录下的资源,不能被浏览器直接访问;
3. 项目配置
在配置跳转,Servlet请求时,需要注意
* 内部跳转请求,不需要配置虚拟目录;
* 若给前端应用调用,需要配置虚拟目录;
* 虚拟目录获取: request.getContextPath()
* 返回消息中的配置
* 状态码配置: response.setStatus(200);
* 字符集设置: response.setContentType("text/html;charset=utf-8");
---------------------------
关于 ServletContext 对象
1. 概念:代表整个WEB应用,可以和程序的容器(服务器)来通信;
2. 获取
a. 通过 request 获取: request.getServletContext();
b. 通过 HttpServlet 获取: this.getServletContext();
3. 功能
a. 获取MIME类型
MIME类型:在互联网通信过程中定义的一种文件数据类型;
* 格式: 大类型/小类型 text/html; image/jpeg
* 获取: String getMimeType(String fileName);
b. 域对象:共享数据;
1. setAttribute(String var1, Object var2);
2. Object getAttribute(String var1);
3. void removeAttribute(String var1);
** ServletContext 对象范围:所有用户所有请求的数据都可以共享;
(A浏览器setAttribute后,关掉浏览器,B用户其它浏览器可以通过 getAttribute 取到这个共享数据)
c. 获取文件的真实(服务器)路径
1. 方法: String getRealPath(String path);
2. 开发阶段资源存放位置及发布后位置的对应关系
d. 文件下载涉及到内容点的描述
1. 浏览器端,在请求资源时,超链接的配置:
--> <a href="/demo02/img/shops.jpg">图片</a>
上述方式,将直接加载图片,并在浏览器中展示图片,只有在无法直接解析的内容上,才会下载;
2. 若想要图片也下载,则需要自行配置内容打开方式,涉及到响应头的配置
--> <a href="/demo02/download?filename=shops.jpg">图片</a>
请求自己的服务,在自己的服务中配置文件打开方式;
--> 提供自己的servlet服务,并在服务中对下载操作 做出相应的处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2021-04-01 Java11.File类与属性集 Properties 缓冲流、转换流、序列化流、打印流