Java Web程序设计第3章

更新时间:2023-11-14 15:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《Java Web程序设计》课程第3章章节检测

一、选择题:(每题4分,共40分)

1、下面哪个方法用于从ServletContext中检索属性?( C ) A. String getAttribute(int index) B. String getObject(int index)

C. Object getAttribute(String name) D. String getObject(String name)

2、下面哪个方法用来检索ServletContext初始化参数?( C ) A. Object getInitParameter(int index) B. Object getParameter(int index) C. String getInitParameter(String name) D. String getParameter(String name)

3、为Servlet上下文指定初始化参数,下面的web.xml片段哪个是正确的?( D ) A.

country China B.

C.

D.

country China

4、下面哪个接口或类检索与用户相关的会话对象?( D ) A. HttpServletResponse B. ServletConfig C. ServletContext D. HttpServletRequest

5、给定request是一个HttpServletRequest对象,下面哪两行代码会在不存在会话的情况下创建一个会话?( B )

A. request.getContext() B. request.getSession(true) C. request.getSession(false) C. request.createSession() 6、关于会话属性,下面哪两个说法是正确的?( AD ) A. HttpSession的getAttribute(String name)返回类型为Object B. HttpSession的getAttribute(String name)返回类型为String

C. 在一个HttpSession上调用setAttribute(“keyA”,”valueB”)时,如果这个会话中对应键keyA已经有一个值,就会导致抛出一个异常

D. 在一个HttpSession上调用setAttribute(“keyA”,”valueB”)时,如果这个会话中对应键keyA已经有一个值,则这个属性的原先值会被valueB替换 7、调用下面哪个方法将使会话失效?( A )

A. session.invalidate(); B. session.close(); C. session.destroy(); D. session.end();

8、关于HttpSession对象,下面哪两种说法是正确的?( CD ) A. 会话的超时时间设置为-1,则会话永远不会到期 B. 一旦用户关闭所有浏览器窗口,会话就会立即失效

C. 在部署描述文件中定义的超时时间之后,会话会失效 D. 可以调用HttpSession的invalidateSession()使会话失效

9、给定一个会话对象s,有两个属性,属性名分别为myAttr1和myAttr2,下面哪行(段)代码会把这两个属性从会话中删除?( C ) A. s.removeAllValues(); B. s.removeAllAttributes();

C. s.removeAttribute(“myAttr1”); s.removeAttribute(“myAttr2”);

D s.getAttribute(“myAttr1”,UNBIND); s.getAttribute(“myAttr2”,UNBIND);

10、将下面哪个代码片段插入到doGet()中可以正确记录用户的GET请求的数量?( C ) A. HttpSession session=request.getSession();

int count=session.getAttribute(“count”); session.setAttribute(“count”,count++); B. HttpSession session=request.getSession();

int count=(int)session.getAttribute(“count”); session.setAttribute(“count”,count++); C. HttpSession session=request.getSession();

int count=((Integer)session.getAttribute(“count”)).intValue(); session.setAttribute(“count”,count++); D. HttpSession session=request.getSession();

int count=((Integer)session.getAttribute(“count”)).intValue(); session.setAttribute(“count”,new Integer(++count));

二、简答题:(每题30分,共60分)

1、请实现一个猜数游戏的Servlet。当使用GET请求访问它时,生成一个在0~100之间的随机整数,将其作为一个属性存储到用户的会话对象中,同时提供一个表单供用户输入猜测的数。如果该Servlet接收到一个POST请求,它将比较用户猜的数和随机生成的数是否相等,若相等在响应页面中给出信息,否则,应该告诉用户猜的数是大还是小,并允许用户重新猜。

GameServlet.java package 包名;

import java.io.IOException; import java.io.PrintWriter;

import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class GameServlet extends HttpServlet { @Override

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { response.setContentType(\ PrintWriter out = response.getWriter(); out.println(\ out.println(\

out.println(\游戏页面\ out.println(\ out.println(\

HttpSession session=request.getSession();

out.println(\系统产生了一个1-100之间的随机数,请猜测!
\ if(request.getParameter(\

// double d=Math.random()*100+4;//产生一个双精度型的随机数 // int e=(int)d;//把随机数转化成整型 int e=(int)(Math.random()*100)+4; session.setAttribute(\ int count=0;

session.setAttribute(\设置一个count会话来记录猜测次数 }

else {//此处一定要检验输入数据是否为空,否则抛出异常!

int sysnumber = (java.lang.Integer) session.getAttribute(\// out.println(\系统产生的随机数是:\

Integer guess =Integer.parseInt(request.getParameter(\这一行是把输入数据转化为整型,以便接下来判断

out.println(\你猜测的数字是:\ if(guess

int n=((Integer)session.getAttribute(\ n=n+1;

session.setAttribute(\

out.println(\你猜的数字偏小!\ }

else if(guess>sysnumber){

int n=((Integer)session.getAttribute(\ n=n+1;

session.setAttribute(\

out.println(\你猜的数字偏大!\ } else{

int n=((Integer)session.getAttribute(\ n=n+1;

session.setAttribute(\

out.println(\style=\\\恭喜你,猜对了!你总共猜了\ out.println(\ }

}//end if number!=null

out.println(\欢迎你\ //获取登录用户名 +\请输入你猜的数字

+ \ + \千万不要尝试输入空值或字符,否则后果自负):\ out.println(\ />\ out.println(\查看结果\\\

out.println(\我不想玩了

\ out.println(\ out.println(\ }

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

2、利用Cookie,实现一自动登录程序。

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

HttpServletRequest request = (HttpServletRequest) req; HttpSession session = request.getSession(true); String username;

String sessionid; // 此sessionid是上次用户登录时保存于用户端的识别码,用于用户后续访问的自动登录。不是本次访问的session id。

Cookie[] cookies;

CookieManager cm = new CookieManager(); // CookieManager是一个自定义的类,用于从Cookie数组中查找并返回指定名称的Cookie值。 boolean isAutoLogin;

// 如果session中没有user对象,则创建一个。

User user = (User) session.getAttribute(\ if (user == null) {

user = new User(); // 此时user中的username属性为\,表示用户未登录。 }

// 如果user对象的username为\,表示用户未登录。则执行自动登录过程。 // 否则不自动登录。

if (user.getUsername().equals(\

// 检查用户浏览器是否发送了上次登录的用户名和sessionid,

// 如果是,则为用户自动登陆。

cookies = request.getCookies();

username = cm.getCookieValue(cookies, \ sessionid = cm.getCookieValue(cookies, \

isAutoLogin = userSessionDAO.getAutoLoginState(username, sessionid); // 如果在数据库中找到了相应记录,则说明可以自动登录。

if (isAutoLogin) {

user.setUsername(username);

user.setNickname(DBUtil.getNickName(username));

session.setAttribute(\将user bean添加到session中。 } }

chain.doFilter(req, resp); }

本文来源:https://www.bwwdw.com/article/wg1v.html

Top