考点:request和response生命周期。以及两个对象的常用API(转发与重定向)
1.关于request和response下列说法中不正确的是() (难度C)
A、javaweb开发是基于HTTP协议进行的,javaweb中使用request代表请求对象,response代表响应对象
B、request对象代表请求,response对象代表响应,这两个对象都是由浏览器创建后发送给服务器的
C、HTTP协议只规定了浏览器和服务器之间如何通信,而request和response对象是由javaee规范规定的、由javaweb容器负责创建的。
D、HTTP协议是javaweb开发的基石,如response中提供的请求重定向的方法和request中提供的转发和包含方法就是基于HTTP协议进行的
答案:BD
考点:这个没有看懂考点,都没有乱码。不知道如何修改
2.服务器使用如下哪条语句发送数据有可能有乱码?()(难度B)
A、response.getOutputStream().write(“中国”.getBytes(“utf-8”));
B、response.getWriter().write(“中国”);
C、response.setCharacterEncoding(“utf-8”);
response.setHeader(“Content-Type”,”text/html;charset=utf-8”);
response.getWriter().write(“中国”);
D、response.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中可以书写用来模拟HTTP响应头的功能
答案:A
考点:对response和http协议的细节理解
考点:response 流的关闭时间,以及response的数据缓存区域
4.下列说法中正确的是:()(难度B)
A、response是代表响应的对象,当需要向浏览器输出数据时只要调用response身上的getOutputStream方法或getWriter方法获取连接到浏览器的流,就可以直接将数据写出给浏览器了。
B、利用Response输出数据的时候,并不是直接将数据写给浏览器,而是写到了Response的缓冲区中,等到整个service方法返回后,由服务器拿出response中的信息组成响应消息返回给浏览器。
C、使用完流后要养成关闭流的习惯,所以在使用完Response获取的OutputStream或者Writer后应该尽早将其关闭放置浪费资源。
D、service方法返回后,服务器会自己检查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)
A、response.setHeader("Refresh","0;url=/app/index.jsp");
B、response.setStatus(302);
response.setHeader("Location","/index.jsp");
C、response.sendRedirect(request.getContextPath()+“/index.jsp”);
D、request.getRequestDispatcher(“/index.jsp”).forward(request,response);
答案:AC
考点:ServletRequest与HttpServletRequest的关系,以及request的创建时间与创建者
8.以下哪种说法是正确的() (难度C)
A、ServletRequest类是代表客户端的请求,因此可以利用它提供的方法获取浏览器的信息:如getRemoteAddr获取浏览器的ip地址、 getMethod获取浏览器发送请求的请求方式
B、HttpServletRequest类提供的getHeader、getIntHeader、getDateHeader方法都可以获取请求头信息,不同的是getHeader返回String类型,后两个是便捷方法可以用来快速获取类型为int和日期类型的请求头的值
C、request对象是由web容器负责创建的,一个浏览器对应一个request对象
D、request对象是由浏览器发送给服务器的,所以一次请求对应一个request对象
答案:B
考点:request作用域,以及Attribute和Parameter的区分
9.关于request域的说法不正确的是:()(难度A)
A、request域作用范围为整个请求链
B、request域的生命周期为:在服务器针对一次请求创建出request对象后生命周期开始,在响应结束后,request对象销毁时生命周期结束。
C、request作用范围为整个请求链,因此常常在请求转发时由一个servlet(或jsp)向另一个servlet(或jsp)通过属性传递数据。
D、request域中可以获取到浏览器发送过来的请求参数。
答案:D
考点:请求参数,已经重定向中请求参数的传递
10.关于request获取请求参数下列说法错误的是:()(难度C)
A、请求参数是浏览器访问服务器时同时传递过来的一些参数信息,是浏览器和服务器进行消息传递的一种方式。
B、request对象具有增加、获取、修改、删除请求参数的方法,使我们可以方便的在程序中增删改查浏览器发送过来的请求参数。
C、request对象中保存的请求参数在整个请求链中都可以进行操作,所以request对象是一个域对象,所有的请求参数组成了request域中最初的属性。
D、请求重定向过后,将不能再访问请求重定向前的请求参数。
答案:BC
考点:Post与Get请求方式中,请求参数中文乱码
11.关于请求参数中可能具有的乱码,如下描述正确是:()(难度B)
A、浏览器在使用表单提交请求参数时使用的是什么编码集,是由浏览器打开当前表单页面时使用的编码决定的。我们可以通过Content-Type响应头通知浏览器以什么编码打开当前表单页面,那么这个表单提交的请求参数就使用该编码集。
B、tomcat服务器默认使用ISO8859-1编码解码请求参数,如果浏览器发送请求参数时,使用的编码集不同,就会有乱码。
C、request.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.名称为app的web应用中有三个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.在应用名称为app的web应用中有Servlet1和Serlvet2两个Servlet,下面的哪些代码写在Servlet1中可以使浏览器在访问Servlet1结束后自动访问Servlet2(web应用名为app)
()(难度B)
A、response.sendRedirect(“/app/Servlet2”);
B、response.sendRedirect(“Servlet2”);
C、response.setStatues(302);
response.setHeader(“location”,”/app/Servlet2”);
D、response.setHeader(“Refresh”,”0;url=/app/Servlet2”);
答案:ABCD
考点:servlet中资源文件
16.在应用名称为app的web应用中的目录下有一个1.jpg文件,现在需要在Servlet中获取指向这个文件的字节输入流。如下哪些选项可以实现()(难度B)
A、FileInputStream fin = new FileInputStream(“1.jpg”);
B、FileInputStream fin = new FileInputStream(“/1.jpg”);
C、FileInputStream fin
= new FileInputStream(this.getServletContext().getRealPath(“/1.jpg”));
D、FileInputStream 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
B、HttpServletRequest
C、HttpServletResponse
D、ServletResponse
答案:C
考点:servlet中资源文件
19.在应用名称为app的web应用中WEB-INF目录下有一个1.jpg文件,现在需要在Servlet中获取指向这个文件的字节输入流。如下哪些选项可以实现:()(难度B)
A、FileInputStream fin = new FileInputStream(“/WEB-INF/1.jpg”);
B、FileInputStream fin
=new FileInputStream(this.getServletContext().getRealPath(“/WEB-INF/1.jpg”));
C、FileInputStream fin = this.getClass().getResourceAsStream("1.jpg");
D、FileInputStream fin = this.getClass().getResourceAsStream("../1.jpg");
答案:BD
考点:请求与重定向
20.关于请求转发和重定向说法正确的是:()(难度B)
A.请求转发和重定向都可以实现访问一个资源时转向另一个资源
B.请求转发是一次请求一次响应,而重定向为两次请求两次响应
C.一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力
D.如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向
答案:ABCD
考点:cookie与session基本知识,cookie的个数有限
1.下列说法中错误的是:() (难度A)
A、Cookie和HttpSession是保存会话相关数据的技术,其中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.一个浏览器可能保存着多个名称为JSESSIONID的Cookie
答案:ABCD
考点:cookie路径的设置,以及cookie的删除
4.以下哪个选项代码可以放在“1”的位置用来删除浏览器中名称为myCookie,path为/ ,由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.可以调用HttpSession的invalidate方法,立即销毁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