Java Web请求和响应-练习题

~本特利~

请求和响应

一、填空题

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>
看完点个赞呗,速评一下更有动力哦
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~本特利~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值