提交 8541d6ba 编写于 作者: W wizardforcel

2019-10-14 21:16:03

上级 50325a14
# 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>
......
......@@ -4,19 +4,19 @@
以下是有关 Servlet 的常见问题。我已经提供了每个问题的简要和答案,这将有助于您在技术面试轮次中被选中。
**问 1.什么是 servlet?**
**Q1. 什么是 servlet?**
Servlet 是一种服务器端编程语言,用于生成动态网页。它生成网页作为从客户端(浏览器)收到的请求的响应。
**Q 2.静态网页与动态网页?**
**Q2. 静态网页与动态网页?**
对所有用户都相同的网页是静态网页,根据用户的请求动态生成的网页(根据请求可能因用户而异)被称为动态网页。 Servlet 主要用于动态网页。
**Q 3\. servlet 的生命周期?**
**Q3. 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?**
**Q4.为什么我们使用 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?**
**Q9. 什么是`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 的参数在&lt; init-param&gt;下定义。 web.xml 文件中的标签。 ServletContext 的参数在&lt; context-param&gt;下定义。 web.xml 中的标签
3)`ServletConfig`的参数在`web.xml`文件中的标签`<init-param>`下定义。`ServletContext`的参数在`web.xml`中的标签`<context-param>`下定义
**Q 11\. GenericServlet 和 HTTPServlet 之间的区别?**
**Q11. `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 应用的**
**Q13. 什么是部署描述符? Web 应用的**
web.xml 文件称为部署描述符。它通常放在应用的 WEB-INF 文件夹中。它具有 Servlet 名称,Servlet 映射等信息。该文件告诉 Servlet 容器需要为给定的 URL 模式调用哪个 Servlet 类。
`web.xml`文件称为部署描述符。它通常放在应用的`WEB-INF`文件夹中。它具有 Servlet 名称,Servlet 映射等信息。该文件告诉 Servlet 容器需要为给定的 URL 模式调用哪个 Servlet 类。
**Q 14\. doGet()对于 doPost()方法?**
**Q14. `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.&lt; load-on-startup&gt;有什么用?**
**Q15. `<load-on-startup>`有什么用?**
`&lt;load-on-startup&gt;`用于指定在服务器启动期间需要加载的 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 中的会话无效?**
**Q23. 如何使 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.什么是&lt; session-timeout&gt; ?**
**Q25. 什么是`<session-timeout>`?**
元素&lt; session-timeout&gt;用于指定会话的超时。这是在 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 的延迟加载。
通过指定**&lt; load-on-startup&gt;** 元素为 Servlet 我们可以避免延迟加载。 &lt; load-on-startup&gt;中指定的 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.
先完成此消息的编辑!
想要评论请 注册