RequestResponse和SessionCookie习题集

考点:requestresponse生命周期。以及两个对象的常用API(转发与重定向)

1.关于requestresponse下列说法中不正确的是() (难度C

Ajavaweb开发是基于HTTP协议进行的,javaweb中使用request代表请求对象,response代表响应对象

Brequest对象代表请求,response对象代表响应,这两个对象都是由浏览器创建后发送给服务器的

CHTTP协议只规定了浏览器和服务器之间如何通信,而requestresponse对象是由javaee规范规定的、由javaweb容器负责创建的。

DHTTP协议是javaweb开发的基石,如response中提供的请求重定向的方法和request中提供的转发和包含方法就是基于HTTP协议进行的

 

答案:BD

考点:这个没有看懂考点,都没有乱码。不知道如何修改

2.服务器使用如下哪条语句发送数据有可能有乱码?()(难度B

 

Aresponse.getOutputStream().write(“中国”.getBytes(utf-8));

Bresponse.getWriter().write(“中国”);

Cresponse.setCharacterEncoding(utf-8);

   response.setHeader(“Content-Type”,”text/html;charset=utf-8”);

   response.getWriter().write(“中国”);

Dresponse.setContentType(text/html;charset=utf-8);

   response.getWriter().write(“中国”);

答案:AB

 

3.关于response对象,下列说法错误的是:()(难度A

A.response对象是代表响应的对象,对应着HTTP协议中的响应消息,所以它API方法是HTTP协议规定的

B.response对象是服务器内部的对象,浏览器只能识别HTTP响应消息,并不知道response对象的存在

C.web容器从response的中获取信息组织成HTTP响应消息发送给浏览器

D.在HTML中可以书写<meta http-equiv= "" content="">用来模拟HTTP响应头的功能

 

答案:A

考点:对responsehttp协议的细节理解

考点:response 流的关闭时间,以及response的数据缓存区域

 

4.下列说法中正确的是:()(难度B

Aresponse是代表响应的对象,当需要向浏览器输出数据时只要调用response身上的getOutputStream方法或getWriter方法获取连接到浏览器的流,就可以直接将数据写出给浏览器了。

B、利用Response输出数据的时候,并不是直接将数据写给浏览器,而是写到了Response的缓冲区中,等到整个service方法返回后,由服务器拿出response中的信息组成响应消息返回给浏览器。

C、使用完流后要养成关闭流的习惯,所以在使用完Response获取的OutputStream或者Writer后应该尽早将其关闭放置浪费资源。

Dservice方法返回后,服务器会自己检查Response获取的OutputStream或者Writer是否关闭,如果没有关闭,服务器自动帮你关闭,一般情况下不要自己关闭这两个流。

答案:BD

 

考点:response的两个流在转发中不能同时使用

5.如下代码如果使用浏览器访问Servlet1时会什么结果?()(难度C

Servlet1

response.getOutputStream().write(“传智”.getBytes(“gbk”));

request.getRequestDispatcher(“/Servlet2”).forward(request,response);
Servlet2
response.getWriter().write(“播客”);
A、浏览器输出 传智播客

B、浏览器输出乱码

C、浏览器输出播客,因为在forward的过程中会先清空response的缓存区,所以传智两个字丢失掉了

D、服务器端报错

 

答案:D

考点:response的两个流在转发中不能同时使用,以及response中文乱码问题

6.如下代码如果使用浏览器访问Servlet1时会什么结果?() (难度B

Servlet1

response.setHeader(“Content-Type”,“text/html;charset=utf-8”);

response.getOutputStream().write(“传智”.getBytes(“utf-8”));

request.getRequestDispatcher(“/Servlet2”).forward(request,response);
Servlet2
response.getOutputStream().write(“播客”.getBytes(“utf-8”));
A、浏览器输出 传智播客均正常无乱码。

B、浏览器输出传智为乱码,输出播客正常。

C、浏览器输出传智正常,输出播客乱码。

D、浏览器输出播客正常

 

答案:D

考点:http协议、转发和重定向综合

7.如果希望用户在访问完Servlet1后可以显示web应用目录下的index.jsp页面,且浏览器地址栏改变为index.jsp,在Servlet1中如下那种代码可以实现(web应用名为app)?()(难度B

Aresponse.setHeader("Refresh","0;url=/app/index.jsp");

Bresponse.setStatus(302);

    response.setHeader("Location","/index.jsp");

Cresponse.sendRedirect(request.getContextPath()+“/index.jsp”);

Drequest.getRequestDispatcher(“/index.jsp”).forward(request,response);

 

答案:AC

考点:ServletRequestHttpServletRequest的关系,以及request的创建时间与创建者

8.下哪种说法是正确的() (难度C

AServletRequest类是代表客户端的请求,因此可以利用它提供的方法获取浏览器的信息:如getRemoteAddr获取浏览器的ip地址、 getMethod获取浏览器发送请求的请求方式

BHttpServletRequest类提供的getHeadergetIntHeadergetDateHeader方法都可以获取请求头信息,不同的是getHeader返回String类型,后两个是便捷方法可以用来快速获取类型为int和日期类型的请求头的值

Crequest对象是由web容器负责创建的,一个浏览器对应一个request对象

D、request对象是由浏览器发送给服务器的,所以一次请求对应一个request对象

 

答案:B

考点:request作用域,以及AttributeParameter的区分

9.关于request域的说法不正确的是:()(难度A

Arequest域作用范围为整个请求链

Brequest域的生命周期为:在服务器针对一次请求创建出request对象后生命周期开始,在响应结束后,request对象销毁时生命周期结束。

Crequest作用范围为整个请求链,因此常常在请求转发时由一个servlet(或jsp)向另一个servlet(或jsp通过属性传递数据。

Drequest域中可以获取到浏览器发送过来的请求参数。

 

答案:D

考点:请求参数,已经重定向中请求参数的传递

10.关于request获取请求参数下列说法错误的是:()(难度C

A、请求参数是浏览器访问服务器时同时传递过来的一些参数信息,是浏览器和服务器进行消息传递的一种方式。

Brequest对象具有增加、获取、修改、删除请求参数的方法,使我们可以方便的在程序中增删改查浏览器发送过来的请求参数。

Crequest对象中保存的请求参数在整个请求链中都可以进行操作,所以request对象是一个域对象,所有的请求参数组成了request域中最初的属性。

D、请求重定向过后,将不能再访问请求重定向前的请求参数。

 

答案:BC

考点:PostGet请求方式中,请求参数中文乱码

11.关于请求参数中可能具有的乱码,如下描述正确是:()(难度B

A、浏览器在使用表单提交请求参数时使用的是什么编码集,是由浏览器打开当前表单页面时使用的编码决定的。我们可以通过Content-Type响应头通知浏览器以什么编码打开当前表单页面,那么这个表单提交的请求参数就使用该编码集。

Btomcat服务器默认使用ISO8859-1编码解码请求参数,如果浏览器发送请求参数时,使用的编码集不同,就会有乱码。

Crequest.setCharacterEconding方法只对请求体内容起作用,而get方式提交的参数是附加在URL后的,所以此方法只能解决POST乱码

D、对于get方式提交的请求参数,我们需要自己手动的经过将乱码先编码再解码的过程解决乱码。

 

答案:ABCD

考点:中文乱码与转发执行流程结合

12.应用中有三个servlet,其中的代码如下:

Servlet1

response.setCharacterEncoding("utf-8");

response.setHeader("Content-Type", "text/html;charset=utf-8");

response.getWriter().write("传播");

request.getRequestDispatcher("/servlet/Servlet2").forward(request,response);

Servlet2

response.getWriter().write("智慧");

request.getRequestDispatcher("/servlet/Servlet3").forward(request,response);

response.setHeader("Content-Type", "text/html;charset=iso8859-1");

Servlet3

response.getWriter().write("挥洒汗水");

请问当浏览器访问1时会有什么样的输出:()(难度C

A、浏览器地址栏仍然保持为Servlet1,输出为传播智慧挥洒汗水

B、浏览器地址栏仍然保持为Servlet1,输出为问号组成的乱码

C、浏览器地址栏仍然保持为Servlet1,输出为挥洒汗水

D、服务器报错,不能多次请求转发

 

答案:C

考点:转发与重定向 同时使用冲突问题

13.名称为appweb应用中有三个servlet,其中的代码如下(web应用名为app)

()(难度C

Servlet1

response.setContentType("text/html;charset=gbk");

response.getWriter().write("传播智慧");

request.getRequestDispatcher("/servlet/Servlet2").forward(request,response);

response.sendRedirect("/app/servlet/Servlet3");

Servlet2

response.getWriter().write("收获成长");

Servlet3

response.setContentType("text/html;charset=gbk");

response.getWriter().write("挥洒汗水");

请问当浏览器访问Servlet1时会有什么样的输出:

A、浏览器地址栏仍然保持为Servlet1,输出为传播智慧收获成长

B、浏览器地址栏仍然保持为Servlet1,输出为收获成长

C、浏览器地址栏仍然保持为Servlet1,输出为挥洒汗水

D、服务器端报错

 

答案:D

考点:转发与包含

14.下列说法正确的是:()(难度B

A、请求转发和请求包含都是服务器端技术,与浏览器没有任何关系,浏览器并不知道获得的响应消息是否是经过转发或包含得到的。

B、请求转发的过程中转发前写入response中的响应体内容数据会丢失掉,最终输出的将是请求转发过程中的最后一个节点资源的数据输出。而请求包含可以实现将多个资源的数据合并后输出

C、利用好请求包含,可以将多个输出内容中相同的部分提取出来,方便开发

D、请求包含只能包含动态web资源,不能包含HTML文件

 

答案:ABC

考点:servlet之间跳转

15.在应用名称为appweb应用中有Servlet1Serlvet2两个Servlet,下面的哪些代码写在Servlet1中可以使浏览器在访问Servlet1结束后自动访问Servlet2web应用名为app

()(难度B

Aresponse.sendRedirect(“/app/Servlet2”);

Bresponse.sendRedirect(“Servlet2”);

Cresponse.setStatues(302);

response.setHeader(“location”,”/app/Servlet2”);

Dresponse.setHeader(“Refresh”,”0;url=/app/Servlet2”);

 

答案:ABCD

考点:servlet中资源文件

16.在应用名称为appweb应用中的目录下有一个1.jpg文件,现在需要在Servlet中获取指向这个文件的字节输入流。如下哪些选项可以实现()(难度B

AFileInputStream fin = new  FileInputStream(“1.jpg”);

BFileInputStream fin = new  FileInputStream(“/1.jpg”);

CFileInputStream fin 

= new  FileInputStream(this.getServletContext().getRealPath(“/1.jpg”));

DFileInputStream fin = this.getClass().getClassLoader().getResourceAsStream("1.jpg");

 

答案:C

考点:servlet基础API的使用

17.HttpServlet的子类要从HTTP请求中获得请求参数,应该调用哪个方法?()(难度A

A、调用HttpServletRequest对象的getAttribute()方法

B、调用ServletContext对象的getAttribute()方法

C、调用HttpServletRequest对象的getParameter()方法

D、调用HttpServletRequest对象的getHeader()方法

 

答案:C

考点:servlet基础API的使用

18.sendRedirect(java.lang.String url)方法是在哪个接口中定义的?()(难度A

A、HttpSession

BHttpServletRequest

CHttpServletResponse

DServletResponse

 

答案:C

考点:servlet中资源文件

19.在应用名称为appweb应用中WEB-INF目录下有一个1.jpg文件,现在需要在Servlet中获取指向这个文件的字节输入流。如下哪些选项可以实现:()(难度B

AFileInputStream fin = new  FileInputStream(“/WEB-INF/1.jpg”);

BFileInputStream fin 

=new  FileInputStream(this.getServletContext().getRealPath(“/WEB-INF/1.jpg”));

CFileInputStream fin = this.getClass().getResourceAsStream("1.jpg");

DFileInputStream fin = this.getClass().getResourceAsStream("../1.jpg");

 

答案:BD

考点:请求与重定向

20.关于请求转发和重定向说法正确的是:()(难度B

A.请求转发和重定向都可以实现访问一个资源时转向另一个资源

B.请求转发是一次请求一次响应,而重定向为两次请求两次响应

C.一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力

D.如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向

 

答案:ABCD














 

考点:cookiesession基本知识,cookie的个数有限

1.下列说法中错误的是:() (难度A)

A、CookieHttpSession是保存会话相关数据的技术,其中Cookie将信息存储在浏览器端是客户端技术,Session将数据保存在服务器端是服务器端技术

B、HttpSession会话对象的默认保持时间可以修改

C、HttpSession默认是基于Cookie运作的

D、浏览器可以接受任意多个Cookie信息保存任意长的时间。

 

答案:D

考点:cookie的持久化

2.下列那条语句可以更改Cookie的存活时间:()(难度A)

A.cookie.setMaxAge(3600*24);

B.cookie.setPath(“/app”);

C.cookie.setDomain(“localhost”);

D.cookie.setValue(“share”);

 

答案:A

考点:cookie运行原理、cookie个数,session工作原理

3.下列说法中正确的是:()(难度C)

A.Cookie是基于HTTP协议中的Set-Cookie响应头和Cookie请求头进行工作的

B.浏览器对Cookie具有严格的限制,一个网站能在浏览器中保存多少Cookie是有限制的

C.默认情况下HttpSession是基于一个名称为JSESSIONID 的特殊Cookie工作的

D.一个浏览器可能保存着多个名称为JSESSIONIDCookie

 

答案:ABCD

考点:cookie路径的设置,以及cookie的删除

4.以下哪个选项代码可以放在“1”的位置用来删除浏览器中名称为myCookiepath,由localhost发送的Cookie信息?()(难度A)

Cookie cookie = new Cookie(“myCookie”,”xxxx”);

----------------1

response.addCookie(cookie);

 

A.cookie.delete();

B.cookie.setMaxAge(0);

C.cookie.setPath(“/”);cookie.setMaxAge(0);

D.cookie.setDomain(“localhost”);cookie.setPath(“/”);cookie.setMaxAge(0);

 

 

答案:C

考点:cookie访问路径

5.Servlet1的访问路径为http://localhost/news/servlet/Servlet1,在Servlet1中使用如下代码设置Cookie

Cookie c = new Cookie(“myCookie”,”xxxx”);

response.addCookie(c);

请问当访问哪个Servlet时可以获取到这个Cookie信息?()(难度B)

A.http://localhost/news/servlet/Servlet1

B.http://localhost/news/servlet/Servlet2

C.http://localhost/news/Servlet3

D.http://localhost/news/servlet/n/Servlet4

 

答案:ABD

 

考点:session的生命周期

6.关于会话下列说法哪些是正确的:() (难度B)

A.浏览器开始访问一个网站时,会话就开始了,服务器立即就会创建代表当前会话的Session

B.如果服务器端执行了HttpSession对象的invalidate()方法,那么这个会话被销毁

C.当客户端关闭浏览器进程,服务器端会探测到客户端关闭浏览器进程的行为,从而立即销毁相应的HttpSession对象

D.当一个会话过期,服务器端会自动销毁这个会话

 

答案:BD

考查知识点:HttpSession基本知识

7.关于SessionID,以下哪些说法正确?()(难度B)

A、每个HttpSession对象都有唯一的Session ID

B、SessionID 由Servlet容器创建

C、SessionID必须保存在客户端的cookie文件中

D、Servlet容器会把Session ID作为Cookie或者URL的一部分发送到客户端

 

答案:ABD

考点:session的创建

8.以下哪个方法一定可以获取到代表当前会话的Session对象?() (难度A)

A.request.getSession();

B.request.getSession(false);

C.new HttpSession();

D.HttpSession.newInstance(request);

 

答案:A

案例:综合session的创建

9.在HttpServlet中如何获得HttpSession对象的引用?()(难度C)

A、直接使用固定变量session

B、调用ServletRequest对象的getSession()方法

C、调用ServletConfig对象的getSession()方法

D、用new语句创建一个HttpSession对象

E、以上说法都不对

 

答案:E

考点

10.关于Session域的说法正确的是:()(难度B)

A.Session域的作用范围为整个会话

B.Session中的数据只能存在30分钟,这个时间不能修改

C.可以调用HttpSessioninvalidate方法,立即销毁Session

D.web应用被移除出web容器时,该web应用对应的Session跟着销毁

 

答案:ACD

 

考点:URL重写

11.关于URL重写以下说法中正确的是:()(难度B)

A.URL重写可以解决浏览器禁用cookie导致的Session无法使用的问题

B.URL重写会将sessionID附加在重写的URL后,当用户点击该超链接访问服务器时,request.getSession()方法可以从请求URL中分析出sessionID从而找到对应的Session

C.如果服务器发现浏览器并没有禁用cookie,那么URL重写操作将不再进行

D.调用URLEncoder.encode()方法可以进行URL重写操作

 

答案:ABC

 

考点:servlet作用域的应用场景

12.以下哪些信息放在session域中最合适?()(难度B)

A.统计服务器中所有Servlet一共被访问过多少次的计数器

B.当前用户的登录状态

C.发送给浏览器的验证码信息,且需要再服务器端进行验证

D.在Servlet中查询的结果,需要在JSP页面中进行数据展示

 

答案:BC

 

13.下列说法中错误的是:()(难度B)

A.Cookie技术只能在JavaEE中使用

B.Cookie是客户端存储数据技术,数据保存在客户端,有被恶意利用的危险。

C.HttpSession是服务器端的技术,相对于Cookie,保存的数据安全性可靠性都更高,所以可以无限制的生成Session,并尽可能的使session在更长时间内存活。

D.Session是服务器端技术,是需要占用服务器内存的,应该做到真正需要时才创建,session的失效时间要设置的合理

 

答案:AC

考点:URL重写API使用

14.下列关于URL重写下列说法中正确的是:()(难度B)

A.URL重写可以在URL地址后跟上JSESSIONID,浏览器即使禁用cookie也能在访问服务器时带回JSESSIONID的值,从而可以使用session

B.response.encodeRedirectURL(java.lang.String url)和response. encodeURL(java.lang.String url)都可以实现URL重写

C.URL重写不需要对所有地址都重写。

D.response. encodeURL(java.lang.String url)一旦发现浏览器带来了任何cookie信息就认为浏览器没有禁用cookie,就不会再对传入的URL进行URL重写了。

 

答案:ABD

考点:session钝化与活化

15.关于Session的活化钝化下列说法中错误的是:()(难度A)

A.服务器在正常关闭时会将内存中的session信息以文件的形式保存起来,这个过程是session的钝化

B.服务器在正常启动时,会试图将关闭时钝化的session信息写回内存中,这个过程是sesison的活化

C.如果一个对象被保存到session域中,这个对象必须实现Serializable接口才可以随着session钝化。

D.如果一个对象被保存到session域中,而这个对象没有实现Serializable接口,也可以随着HttpSession对象一起钝化。

 

答案:D

考点:HttpSession

16.

Person 类:

public class Person {

private String name;

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

}

Servlet1:

request.getSession().setAttribute("name","zhangsan");

Person p = new Person();

p.setName("lisi");

request.getSession().setAttribute("person",p);

Servlet2:

String name1 =  (String)request.getSession().getAttribute("name");

Person p = (Person)request.getSession().getAttribute("person");

response.getWriter().write(name1);

if(p!=null)response.getWriter().write(p.getName());

浏览器先访问Servlet1,则浏览器再去访问Servlet2,应该看到的输出是:()(难度A)

A.zhangsanlisi

B.zhangsan

C.lisi

D.服务器重启时报错

 

答案:A

 


你可能感兴趣的:(RequestResponse和SessionCookie习题集)