Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
beginnersbook-zh
提交
8541d6ba
B
beginnersbook-zh
项目概览
OpenDocCN
/
beginnersbook-zh
9 个月 前同步成功
通知
0
Star
107
Fork
30
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
beginnersbook-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8541d6ba
编写于
10月 14, 2019
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2019-10-14 21:16:03
上级
50325a14
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
78 addition
and
77 deletion
+78
-77
docs/servlet/16.md
docs/servlet/16.md
+12
-11
docs/servlet/19.md
docs/servlet/19.md
+66
-66
未找到文件。
docs/servlet/16.md
浏览文件 @
8541d6ba
#
ServletResponse
接口
#
`ServletResponse`
接口
> 原文: [https://beginnersbook.com/2013/05/servlet-response/](https://beginnersbook.com/2013/05/servlet-response/)
servlet 容器连接到 Web 服务器,该服务器从某个端口上的客户端接收 Http 请求。当客户端向 Web 服务器发送请求时,servlet 容器会创建
`HttpServletRequest`
和
`HttpServletResponse`
对象,并将它们作为参数传递给 servlet
service()
方法。
servlet 容器连接到 Web 服务器,该服务器从某个端口上的客户端接收 Http 请求。当客户端向 Web 服务器发送请求时,servlet 容器会创建
`HttpServletRequest`
和
`HttpServletResponse`
对象,并将它们作为参数传递给 servlet
`service()`
方法。
响应对象允许您格式化并将响应发送回客户端。首先,我们将看到
ServletReponse
接口中常用的方法,然后我们将看到一个示例。
响应对象允许您格式化并将响应发送回客户端。首先,我们将看到
`ServletReponse`
接口中常用的方法,然后我们将看到一个示例。
##
ServletResponse
接口的方法
##
`ServletResponse`
接口的方法
1)
`String getCharacterEncoding()`
:返回发送给客户端的响应正文中使用的 MIME 字符集的名称。
2)
`String getContentType()`
:返回响应内容类型。例如
text,html
等
2)
`String getContentType()`
:返回响应内容类型。例如
`text`
,
`html`
等
3)
`ServletOutputStream getOutputStream()`
:返回一个适合在响应中写入二进制数据的
ServletOutputStream
。
3)
`ServletOutputStream getOutputStream()`
:返回一个适合在响应中写入二进制数据的
`ServletOutputStream`
。
4)
`java.io.PrintWriter getWriter()`
:返回
PrintWriter
对象。
4)
`java.io.PrintWriter getWriter()`
:返回
`PrintWriter`
对象。
5)
`void setCharacterEncoding(java.lang.String charset)`
:设置响应的 MIME 字符集(字符编码)。
...
...
@@ -31,13 +31,14 @@ servlet 容器连接到 Web 服务器,该服务器从某个端口上的客户
11)
`boolean isCommitted()`
:返回一个布尔值,指示响应是否已提交。
12)
`void reset()`
:清除缓冲区的数据以及标题和状态代码。
获取完整的方法列表。请参阅
[
官方文档
](
https://docs.oracle.com/javaee/7/api/javax/servlet/ServletResponse.html
)
。
## 例:
在下面的示例中,我们使用了
ServletResponse 接口的 setContentType()和 getWriter()
方法。
在下面的示例中,我们使用了
`ServletResponse`
接口的
`setContentType()`
和
`getWriter()`
方法。
index.html
`index.html`
```
java
<
form
action
=
"mydetails"
method
=
"get"
>
...
...
@@ -46,7 +47,7 @@ User name: <input type="text" name="uname">
</
form
>
```
MyServletDemo.java
`MyServletDemo.java`
```
java
import
javax.servlet.http.*
;
...
...
@@ -66,7 +67,7 @@ public class MyServletDemo extends HttpServlet{
}
```
web.xml
`web.xml`
```
java
<
web
-
app
>
...
...
docs/servlet/19.md
浏览文件 @
8541d6ba
...
...
@@ -4,19 +4,19 @@
以下是有关 Servlet 的常见问题。我已经提供了每个问题的简要和答案,这将有助于您在技术面试轮次中被选中。
**
问 1.
什么是 servlet?**
**
Q1.
什么是 servlet?**
Servlet 是一种服务器端编程语言,用于生成动态网页。它生成网页作为从客户端(浏览器)收到的请求的响应。
**Q
2.
静态网页与动态网页?**
**Q
2.
静态网页与动态网页?**
对所有用户都相同的网页是静态网页,根据用户的请求动态生成的网页(根据请求可能因用户而异)被称为动态网页。 Servlet 主要用于动态网页。
**Q
3\
. servlet 的生命周期?**
**Q
3
. servlet 的生命周期?**
遵循 servlet 生命周期的各个阶段:
1)加载 Servlet 类:servlet 容器找到
web.xml
文件中提到的 servlet 类并加载它。
1)加载 Servlet 类:servlet 容器找到
`web.xml`
文件中提到的 servlet 类并加载它。
2)Servlet 实例化:在此阶段创建 servlet 类的对象。
...
...
@@ -24,9 +24,9 @@ Servlet 是一种服务器端编程语言,用于生成动态网页。它生成
4)处理请求:在此阶段,servlet 通过调用
`service()`
方法为客户端请求提供服务。
5)
Destroy:servlet 生命周期的最后阶段。 destroy()
方法释放 servlet 实例,以便可以对其进行垃圾回收。
5)
销毁:servlet 生命周期的最后阶段。
`destroy()`
方法释放 servlet 实例,以便可以对其进行垃圾回收。
**
问
4.为什么我们使用 Servlets?**
**
Q
4.为什么我们使用 Servlets?**
1)处理用户从屏幕提交的输入数据。
...
...
@@ -36,7 +36,7 @@ Servlet 是一种服务器端编程语言,用于生成动态网页。它生成
4)servlet 可以同时处理多个请求,这使它们成为高性能应用的完美选择。
**
问 5.
为什么 Servlet 优于 CGI?**
**
Q5.
为什么 Servlet 优于 CGI?**
1)Servlet 响应比 CGI 更快,因为它使用多线程概念来为每个请求提供服务。 CGI 性能不是很好,因为它为每个请求创建一个新对象,而 servlet 为每个请求分配一个新线程。
...
...
@@ -44,7 +44,7 @@ Servlet 是一种服务器端编程语言,用于生成动态网页。它生成
3)与 CGI 相比,servlet 中的内存消耗较低。
**
问 6.
加载 Servlet 的时候?**
**
Q6.
加载 Servlet 的时候?**
1)当 servlet 容器收到来自客户端(浏览器)的第一个请求时。
...
...
@@ -52,65 +52,65 @@ Servlet 是一种服务器端编程语言,用于生成动态网页。它生成
3)当 webserver(部署了 servlet)开始时。
**
问 7.什么是 Servlet
接口以及它的用途是什么?**
**
Q7. 什么是`Servlet`
接口以及它的用途是什么?**
Servlet 接口是 servlet 的 API。每个 Servlet 都应该实现 servlet 接口或扩展已经实现接口的类。
`javax.servlet.GenericServlet`
和
`javax.servlet.http.HttpServlet`
是实现 Servlet 接口的 Servlet 类,因此每个 servlet 应该直接实现 Servlet
接口,或者通过扩展任何这些类。
`Servlet`
接口是 servlet 的 API。每个 Servlet 都应该实现
`Servlet`
接口或扩展已经实现接口的类。
`javax.servlet.GenericServlet`
和
`javax.servlet.http.HttpServlet`
是实现
`Servlet`
接口的
`Servlet`
类,因此每个 servlet 应该直接实现
`Servlet`
接口,或者通过扩展任何这些类。
**
问 8.什么是 ServletConfig
?**
**
Q8. 什么是`ServletConfig`
?**
`ServletConfig`
接口属于包
`javax.servlet.ServletConfig`
。它用于将配置参数传递给 servlet。
Servlet 容器隐式实例化它。
`ServletConfig`
接口属于包
`javax.servlet.ServletConfig`
。它用于将配置参数传递给 servlet。Servlet 容器隐式实例化它。
**Q
9.什么是 ServletContext
?**
**Q
9. 什么是`ServletContext`
?**
每个 Web 应用都有一个共同的
`ServletContext`
。 Web 应用中的所有 servlet 都可以访问
ServletContext
。它有网络应用信息和 Web 应用中存在的所有 servlet 都可以访问的资源。
每个 Web 应用都有一个共同的
`ServletContext`
。 Web 应用中的所有 servlet 都可以访问
`ServletContext`
。它有网络应用信息和 Web 应用中存在的所有 servlet 都可以访问的资源。
**
问 10\. ServletConfig 与 ServletContext
?**
**
Q10. `ServletConfig`与`ServletContext`
?**
以下是
`ServletConfig`
和
`ServletContext`
之间的两个主要区别:
1)
ServletConfig 用于将配置信息传递给 Servlet,而 ServletContext
提供 Servlet 类可以使用的一组方法与 Servlet 容器通信。
1)
`ServletConfig`
用于将配置信息传递给 Servlet,而
`ServletContext`
提供 Servlet 类可以使用的一组方法与 Servlet 容器通信。
2)每个 Servlet 都有一个单独的
ServletConfig 对象,而 ServletContext
对于 Web 应用中的所有 servlet 都是通用的。
2)每个 Servlet 都有一个单独的
`ServletConfig`
对象,而
`ServletContext`
对于 Web 应用中的所有 servlet 都是通用的。
3)
ServletConfig 的参数在
<
init-param
>
下定义。 web.xml 文件中的标签。 ServletContext 的参数在
<
context-param
>
下定义。 web.xml 中的标签
。
3)
`ServletConfig`
的参数在
`web.xml`
文件中的标签
`<init-param>`
下定义。
`ServletContext`
的参数在
`web.xml`
中的标签
`<context-param>`
下定义
。
**Q
11\. GenericServlet 和 HTTPServlet
之间的区别?**
**Q
11. `GenericServlet`和`HTTPServlet`
之间的区别?**
1)
GenericServlet 是一个实现 Servlet 接口的抽象类,而 HTTPServlet 抽象类扩展了 GenericServlet 类。简而言之:GenericServlet 类是 HTTPServlet
的父类。
1)
`GenericServlet`
是一个实现 Servlet 接口的抽象类,而
`HTTPServlet`
抽象类扩展了
`GenericServlet`
类。简而言之:
`GenericServlet`
类是
`HTTPServlet`
的父类。
2)
GenericServlet 不支持任何协议。 HTTPSeervlet
支持 HTTP 和 HTTPS 协议。
2)
`GenericServlet`
不支持任何协议。
`HTTPSeervlet`
支持 HTTP 和 HTTPS 协议。
3)
GenericServlet 无法处理 cookie 和会话,而 HTTPServlet
可以处理它们。
3)
`GenericServlet`
无法处理
`cookie`
和会话,而
`HTTPServlet`
可以处理它们。
**
问 12\. forward()和 sendRedirect()
之间的区别?**
**
Q12. `forward()`和`sendRedirect()`
之间的区别?**
1)在
`forward()`
中,相同的请求被转发到另一个资源。在
`sendRedirect()`
中,新请求被发送到重定向资源。
2)
forward()由 Servlet 容器处理,而 sendRedirect()
由浏览器处理。
2)
`forward()`
由 Servlet 容器处理,而
`sendRedirect()`
由浏览器处理。
3)在
forward()中,URL(统一资源定位符)在 Web 浏览器上保持不变。在 sendRedirect()
中,URL 在 Web 浏览器地址栏中更改。
3)在
`forward()`
中,URL(统一资源定位符)在 Web 浏览器上保持不变。在
`sendRedirect()`
中,URL 在 Web 浏览器地址栏中更改。
4)与
sendRedirect()相比,forward()
更快。
4)与
`sendRedirect()`
相比,
`forward()`
更快。
**Q
13.
什么是部署描述符? Web 应用的**
**Q
13.
什么是部署描述符? Web 应用的**
web.xml 文件称为部署描述符。它通常放在应用的 WEB-INF
文件夹中。它具有 Servlet 名称,Servlet 映射等信息。该文件告诉 Servlet 容器需要为给定的 URL 模式调用哪个 Servlet 类。
`web.xml`
文件称为部署描述符。它通常放在应用的
`WEB-INF`
文件夹中。它具有 Servlet 名称,Servlet 映射等信息。该文件告诉 Servlet 容器需要为给定的 URL 模式调用哪个 Servlet 类。
**Q
14\. doGet()对于 doPost()
方法?**
**Q
14. `doGet()`对于`doPost()`
方法?**
1)在
doGet()中,参数在地址栏中可见,它们会附加到 URL。在 doPost()
中,参数在地址栏中不可见。
1)在
`doGet()`
中,参数在地址栏中可见,它们会附加到 URL。在
`doPost()`
中,参数在地址栏中不可见。
2)您可以通过
GET 请求最多传输 1024 个字符。 doPost()
没有任何限制。
2)您可以通过
`GET`
请求最多传输 1024 个字符。
`doPost()`
没有任何限制。
3)
doGet()不适合敏感数据,因为参数不会被加密。在 doPost()中,参数是加密的,因此与 doGet()
相比更安全。
3)
`doGet()`
不适合敏感数据,因为参数不会被加密。在
`doPost()`
中,参数是加密的,因此与
`doGet()`
相比更安全。
4)方法
doGet()允许您为资源添加书签。 doPost()
不允许书签。
4)方法
`doGet()`
允许您为资源添加书签。
`doPost()`
不允许书签。
5)与
doPost()方法相比,doGet()
更快。
5)与
`doPost()`
方法相比,
`doGet()`
更快。
**
问 15.< load-on-startup>
有什么用?**
**
Q15. `<load-on-startup>`
有什么用?**
`
<load-on-startup>`
用于指定在服务器启动期间需要加载的 Servlet 文件。一旦服务器启动,就会加载此元素中指定的 servlet 文件,它不会等待第一个加载它们的请求。这是在 web.xml
文件中指定的方式。
`
<load-on-startup>`
用于指定在服务器启动期间需要加载的 Servlet 文件。一旦服务器启动,就会加载此元素中指定的 servlet 文件,它不会等待第一个加载它们的请求。这是在
`web.xml`
文件中指定的方式。
```
java
<
servlet
>
...
...
@@ -122,7 +122,7 @@ web.xml 文件称为部署描述符。它通常放在应用的 WEB-INF 文件夹
如果指定了多个文件,则文件将按照在其中指定的顺序加载。
**
问 20\
. Servlets 支持哪些不同类型的会话跟踪机制?**
**
Q20
. Servlets 支持哪些不同类型的会话跟踪机制?**
1)URL 重写
...
...
@@ -132,19 +132,19 @@ web.xml 文件称为部署描述符。它通常放在应用的 WEB-INF 文件夹
4)安全套接字层(SSL)会话
**
问 21\
. URL 重写如何维持会话?**
**
Q21
. URL 重写如何维持会话?**
在 URL 重写方法中,会话跟踪数据已附加在 URL 的末尾以跟踪会话。
**
问 22.
解释 Servlet 链接?**
**
Q22.
解释 Servlet 链接?**
Servlet 链接是一个在一系列 servlet 中处理请求的概念。
First
Servlet 部分处理请求并传递给第二个请求,然后第二个 servlet 处理它并传递给第三个请求,依此类推。最后一个 servlet 将响应返回给客户端(浏览器)。
Servlet 链接是一个在一系列 servlet 中处理请求的概念。
第一个
Servlet 部分处理请求并传递给第二个请求,然后第二个 servlet 处理它并传递给第三个请求,依此类推。最后一个 servlet 将响应返回给客户端(浏览器)。
**Q
23.
如何使 servlet 中的会话无效?**
**Q
23.
如何使 servlet 中的会话无效?**
通过调用
`session.invalidate()`
方法。
**
问 24\
. Servlet 容器的主要功能是什么?**
**
Q24
. Servlet 容器的主要功能是什么?**
1)Servlet 生命周期管理
...
...
@@ -152,11 +152,11 @@ Servlet 链接是一个在一系列 servlet 中处理请求的概念。 First Se
3)提供多线程支持,同时处理多个请求。
4)管理部署描述符
web.xml
文件。
4)管理部署描述符
`web.xml`
文件。
**Q
25.什么是< session-timeout>
?**
**Q
25. 什么是`<session-timeout>`
?**
元素
<
session-timeout
>
用于指定会话的超时。这是在 web.xml
文件中定义的方式。
元素
`<session-timeout>`
用于指定会话的超时。这是在
`web.xml`
文件中定义的方式。
```
java
<
session
-
config
>
...
...
@@ -166,36 +166,36 @@ Servlet 链接是一个在一系列 servlet 中处理请求的概念。 First Se
它会将会话超时设置为 25 分钟。
**
问 26.
什么是 Servlet 延迟加载以及如何避免它?**
**
Q26.
什么是 Servlet 延迟加载以及如何避免它?**
默认情况下,Servlet 容器在服务器启动时不初始化 Servlet。它仅在收到来自客户端的请求时初始化 servlet。这称为 Servlet 的延迟加载。
通过指定
**< load-on-startup>**
元素为 Servlet 我们可以避免延迟加载。
<
load-on-startup
>
中指定的 servlet 文件 Web 服务器启动后立即加载。
通过指定
`<load-on-startup>`
元素为 Servlet 我们可以避免延迟加载。
`<load-on-startup>`
中指定的 servlet 文件 Web 服务器启动后立即加载。
**
问 27.为什么我们在 servlet 中需要构造函数,即使我们有一个 init()
方法?**
**
Q27. 为什么我们在 servlet 中需要构造函数,即使我们有一个`init()`
方法?**
**init()**
方法用于初始化 servlet,但是为了实例化 Servlet 类,需要构造函数。 Servlet 容器实例化 Servlet
类。
`init()`
方法用于初始化 servlet,但是为了实例化 Servlet 类,需要构造函数。 Servlet 容器实例化
`Servlet`
类。
**
问 28.
什么时候卸载 Servlet?**
**
Q28.
什么时候卸载 Servlet?**
1)管理员手动卸载 servlet。
2)Web 服务器关闭。
**
问 29\. Servlet 如何使用 cookie
维护会话?**
**
Q29. Servlet 如何使用`cookie`
维护会话?**
Cookie 是一小段信息,由 servlet 发送到 Web 浏览器。 Cookie 会存储在浏览器中,并在需要时返回给服务器。 Cookie
具有名称,单个值和少数其他属性。
`Cookie`
是一小段信息,由 servlet 发送到 Web 浏览器。
`Cookie`
会存储在浏览器中,并在需要时返回给服务器。
`Cookie`
具有名称,单个值和少数其他属性。
**
问 30.为什么使用 cookie
进行会话跟踪是一种不好的做法?**
**
Q30. 为什么使用`cookie`
进行会话跟踪是一种不好的做法?**
使用
cookie
进行会话跟踪有几个缺点。其中很少是:
使用
`cookie`
进行会话跟踪有几个缺点。其中很少是:
1)由于
cookie 存储在客户端(在客户端的浏览器中),如果客户端浏览器清除或禁用 cookie
,它将不可用。
1)由于
`cookie`
存储在客户端(在客户端的浏览器中),如果客户端浏览器清除或禁用
`cookie`
,它将不可用。
2)与其他会话管理机制相比,实现会话跟踪的
cookie
要困难得多。
2)与其他会话管理机制相比,实现会话跟踪的
`cookie`
要困难得多。
3)
Cookie
仅适用于 HTTP 协议。
3)
`Cookie`
仅适用于 HTTP 协议。
**
问 31.
如何在 Servlets 中获取服务器信息?**
**
Q31.
如何在 Servlets 中获取服务器信息?**
使用此:
...
...
@@ -203,7 +203,7 @@ Cookie 是一小段信息,由 servlet 发送到 Web 浏览器。 Cookie 会存
getServletContext
().
getServerInfo
()
```
**
问 32.
如何在 Servlet 中获取客户端的 IP 地址?**
**
Q32.
如何在 Servlet 中获取客户端的 IP 地址?**
使用此:
...
...
@@ -211,7 +211,7 @@ getServletContext().getServerInfo()
request
.
getRemoteAddr
()
```
**
问 33.
为什么我们在 Servlet 中使用过滤器?**
**
Q33.
为什么我们在 Servlet 中使用过滤器?**
我们使用过滤器:
...
...
@@ -225,15 +225,15 @@ request.getRemoteAddr()
5)响应压缩
**
问 34\. HTTPServlet
支持哪些协议?**
**
Q34. `HTTPServlet`
支持哪些协议?**
HTTP 和 HTTPS 协议。
**
问 35\. GenericServlet
支持哪些协议?**
**
Q35. `GenericServlet`
支持哪些协议?**
GenericServlet
抽象类并不特定于任何协议。
`GenericServlet`
抽象类并不特定于任何协议。
**
问 36\
. Servlet 3 增加了哪些新功能?**
**
Q36
. Servlet 3 增加了哪些新功能?**
1)Servlet 注释
...
...
@@ -243,6 +243,6 @@ GenericServlet 抽象类并不特定于任何协议。
4)异步处理
**
问 37.我们是否覆盖 service()
方法?**
**
Q37. 我们是否覆盖`service()`
方法?**
不,我们不会覆盖
**service()**
方法。我们通常根据需求覆盖 doPost(),doGet()方法。
\ No newline at end of file
不,我们不会覆盖
`service()`
方法。我们通常根据需求覆盖
`doPost()`
,
`doGet()`
方法。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录