~本特利~ |
请求和响应
一、填空题
1.请求包含指的是使用【 include()或include(ServletRequest request,ServletResponse response) 】方法将Servlet请求转发给其它Web资源进行处理,响应消息中既包含了当前Servlet又包含了其它Web资源的响应消息。
2.在HttpServletResponse接口中,定义了一个【 sendRedirect() 】方法,用于实现请求重定向。
3.我们可以通过response.setHeader(" Refresh ",“3”)语句,使当前页面定时每3秒刷新一次。
4.HttpServletResponse接口中,提供了一个【 setCharacterEncoding() 】方法,该方法用于设置字符的编码方式。
5.当Servlet向客户端回送响应消息时,需要在响应消息中设置【 状态码 】。
二、判断题
1.转发的forward()方法,必须在响应提交给客户端之前被调用,否则将抛出IllegalStateException异常。( 对 )
2.include()方法实现请求包含时,响应消息中不包含当前Servlet响应消息,只有被包含进来的其它Web资源的响应消息。( 错 )
响应消息中既包含了当前Servlet又包含了其它Web资源的响应消息。
3.通过请求转发来实现目标资源的访问是服务器内部的行为,对于客户端来说是一次请求过程。( 对 )
4.在HttpServletRequest接口中,getParameterMap()方法的返回值是Map对象,该对象包含了请求消息中所有参数的值。( 对 )
5.如果请求消息中没有包含指定名称的参数,则getParameter()方法返回null。( 对)
三、选择题
1.下面选项中关于请求包含include()方法的参数,正确的是( A )
A: 依次为ServletRequest和ServletResponse两个
B: 依次为ServletResponse和ServletRequest两个
C: 只有ServletRequest
D: 只有ServletResponse
2.通过配置Tomcat来解决GET请求参数的乱码问题,可以在server.xml文件中的Connector节点下添加的属性是( C )
A: useBodyEncodingForURI=”false”
B: useBodyEncoding=”true”
C: useBodyEncodingForURI=”true”
D: useBodyEncoding=”false”
3.如果请求消息中包含有多个该指定名称的参数,getParameter()方法的返回值是( C )
A: 这些参数的所有值形成一个数组
B: “”
C: 第一个参数的值
D: 最后一个参数的值
4.下列关于HttpServletRequest接口中getDateHeader(String name)方法返回值的说法中,正确的是( B )
A: 自1970年1月1日0点0分0秒算起的以秒为单位的时间值
B: 自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值
C: 自1970年1月1日0点0分0秒算起的以纳秒为单位的时间值
D: 自1970年1月1日0点0分0秒算起的以分钟为单位的时间值
5.一次重定向过程中,浏览器会发出多少次服务器请求( B )
A: 1次 B: 2次 C: 0次 D: 3次
测一测
1、简述请求转发与重定向的异同?(至少写3点)
- 请求转发与重定向的异同点如下:
1)请求转发和重定向都可以实现访问一个资源时转向当前应用资源
2)请求转发是一次请求一次响应,而重定向为两次请求两次响应
3)一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力
4)如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向
2、请写出禁止浏览器缓存页面的核心代码。
- 禁止浏览器缓存页面的核心代码如下:
response.setDateHeader(“Expires”,0);
response.setHeader(“Cache-Control”,“no-cache”);
response.setHeader(“Pragma”,“no-cache”);
Cache-Control头域
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
3、请编写一个类,该类能够实现访问完app应用下的Servlet后,还能在浏览器地址栏中显示出index.jsp的路径。
- 实现代码如下:
(1)MyServlet程序类如下:
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
System.out.println("这里是MyServlet!");
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
}
(2)web.xml文件配置如下:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>
cn.itcast.chapter04.servlet.MyServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
4、请编写一个类,该类使用HttpServletRequest对象的getHeader(“referer”)方法实现下载资源防盗链的功能。
- 该功能的实现步骤如下:
1)创建一个DownManagerServlet类,使其继承HttpServlet类并重写该类的doGet()方法。
2)在doGet()方法中,使用HttpServletRequest对象的getHeader(“referer”)方法得到字段referer的值,并判断是否可以进行资源下载。
3)如果不能下载,则进入下载页(需要在Eclipse的WebContent目录下创建一个download.html)。
(1)DownManagerServlet类的实现代码如下:
public class DownManagerServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 获取referer头的值
String referer = request.getHeader("referer");
// 获取访问地址
String sitePart = "http://" + request.getServerName();
if (referer != null && referer.startsWith(sitePart)) {
// 处理正在下载的请求
out.println("dealing download ...");
} else {
// 非法下载请求跳转到download.html页面
RequestDispatcher rd = request
.getRequestDispatcher("/download.html");
rd.forward(request, response);
}
}
}
(2)web.xml文件中DownManagerServlet的映射信息配置如下:
<servlet>
<servlet-name>DownManagerServlet</servlet-name>
<servlet-class>
cn.itcast.chapter04.servlet.DownManagerServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownManagerServlet</servlet-name>
<url-pattern>/DownManagerServlet</url-pattern>
</servlet-mapping>
看完点个赞呗,速评一下更有动力哦 |