折腾两天了,初略的发现了问题出现的地方,原因还是没找到
主要就是userName没传递下去,userArray是传递下去了的。原因是什么呢。1、从user页面输入一个userName提交到MainServlet这里没问题,代码不贴了。2、MainServlet中的doGet()代码
response.setContentType("text/html;charset=GBK");
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("GBK");
String usrName=request.getParameter("userName");
if(usrName==null||usrName.equals(" ")){
out.println("<h1 style='color:red' align='center'>请返回并输入有效的用户名</h1>");
}
else{
Vector vec=(Vector)getServletContext().getAttribute("userArray");
if (vec==null) {
vec=new Vector();
}
if(!vec.contains(usrName)){
vec.add(usrName);
//Servlet上下文初始化
HttpSession ses=request.getSession();
ses.setAttribute("userName", usrName);
getServletContext().setAttribute("userArray", vec);//是因为这个保证了userArray的正常传递了吗?
//Servlet上下文初始化结束
out.println("<html>");
out.println("<frameset rows='80%,*'>");
out.println("<frame src='top?name"+usrName+"'>");
out.println("<frame src='message?name"+usrName+"'>");
out.println("</frameset>");
out.println("</html>");
}
else {
out.println("<h1 style='color:red' align='center'>正在使用的用户ID</h1>");
}
}
out.close();
到这里userName是可以正常获取的,然后转到框架top和message中去。书上说的是,创建TopServlet和MessageServlet框架,并将用户名作为查询字符串传递
("<frame src='top?name"+usrName+"'>");
("<frame src='message?name"+usrName+"'>");就是说的这段了。可是usrName并没有传递过去。
3、top做的事情是继续分成两个框架,display和message其中doGet()部分代码
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html;charset=GB2312");
response.setCharacterEncoding("GBK");
request.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>TopServlet</TITLE></HEAD>");
out.println("<frameset cols='80%,*'>");
out.println("<frame src='display'>");
String usrName=request.getParameter("userName");//这里已经没有获取到userName的值了,问:应该怎么做?
out.println("<frame src='userlist?name="+usrName+"'>");
out.println(" </frameset>");
out.println("</HTML>");
out.flush();
out.close();
}
4、userlist能显示所有登陆者的名单,但是没有把当前用户设定为粗体,doGet()代码
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html;charset=GB2312");
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("<meta HTTP-EQUIV='REFRESH' content='3;userlist'>");
out.println(" <HEAD><TITLE>UserList</TITLE></HEAD>");
out.println(" <BODY bgcolor=\"#ffff00\">");
Vector usr=(Vector)getServletContext().getAttribute("userArray");//Vector数组正常获得了
request.setCharacterEncoding("GBK");
String UserName=request.getParameter("userName");//显然,是userName没有得到的原因
if (usr==null) {
throw new ServletException("Servlet中发生错误.");
}
for(int i=0;i<usr.size();i++)
{
if(String.valueOf(usr.get(i)).equals(UserName)){
out.println("<b>"+String.valueOf(usr.get(i))+"</b><br>");
}
else {
out.println(String.valueOf(usr.get(i))+"<br>");
}
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
主要就是userName没传递下去,userArray是传递下去了的。原因是什么呢。1、从user页面输入一个userName提交到MainServlet这里没问题,代码不贴了。2、MainServlet中的doGet()代码
response.setContentType("text/html;charset=GBK");
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("GBK");
String usrName=request.getParameter("userName");
if(usrName==null||usrName.equals(" ")){
out.println("<h1 style='color:red' align='center'>请返回并输入有效的用户名</h1>");
}
else{
Vector vec=(Vector)getServletContext().getAttribute("userArray");
if (vec==null) {
vec=new Vector();
}
if(!vec.contains(usrName)){
vec.add(usrName);
//Servlet上下文初始化
HttpSession ses=request.getSession();
ses.setAttribute("userName", usrName);
getServletContext().setAttribute("userArray", vec);//是因为这个保证了userArray的正常传递了吗?
//Servlet上下文初始化结束
out.println("<html>");
out.println("<frameset rows='80%,*'>");
out.println("<frame src='top?name"+usrName+"'>");
out.println("<frame src='message?name"+usrName+"'>");
out.println("</frameset>");
out.println("</html>");
}
else {
out.println("<h1 style='color:red' align='center'>正在使用的用户ID</h1>");
}
}
out.close();
到这里userName是可以正常获取的,然后转到框架top和message中去。书上说的是,创建TopServlet和MessageServlet框架,并将用户名作为查询字符串传递
("<frame src='top?name"+usrName+"'>");
("<frame src='message?name"+usrName+"'>");就是说的这段了。可是usrName并没有传递过去。
3、top做的事情是继续分成两个框架,display和message其中doGet()部分代码
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html;charset=GB2312");
response.setCharacterEncoding("GBK");
request.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>TopServlet</TITLE></HEAD>");
out.println("<frameset cols='80%,*'>");
out.println("<frame src='display'>");
String usrName=request.getParameter("userName");//这里已经没有获取到userName的值了,问:应该怎么做?
out.println("<frame src='userlist?name="+usrName+"'>");
out.println(" </frameset>");
out.println("</HTML>");
out.flush();
out.close();
}
4、userlist能显示所有登陆者的名单,但是没有把当前用户设定为粗体,doGet()代码
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html;charset=GB2312");
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("<meta HTTP-EQUIV='REFRESH' content='3;userlist'>");
out.println(" <HEAD><TITLE>UserList</TITLE></HEAD>");
out.println(" <BODY bgcolor=\"#ffff00\">");
Vector usr=(Vector)getServletContext().getAttribute("userArray");//Vector数组正常获得了
request.setCharacterEncoding("GBK");
String UserName=request.getParameter("userName");//显然,是userName没有得到的原因
if (usr==null) {
throw new ServletException("Servlet中发生错误.");
}
for(int i=0;i<usr.size();i++)
{
if(String.valueOf(usr.get(i)).equals(UserName)){
out.println("<b>"+String.valueOf(usr.get(i))+"</b><br>");
}
else {
out.println(String.valueOf(usr.get(i))+"<br>");
}
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
解决方案 »
- 〖〖〖〖〖乱码问题终极解决办法〗〗〗〗〗〗〗
- 刚开始学Java,看到Java用到插件这么多,有点怕.高手指点下.
- 执行JSP页面后让tomcat服务器关闭 代码怎么写?
- 求在JSTL里的FOREACH里面怎么知道当前访问的是FOREACH里面的第几个值?在线等
- help me!!!有分的[100分]
- 这是神马问题?
- 简单问题——数据类型不一致 多谢~~~(在线等)
- ssh框架任务调度模块老是宕机
- 为什么这个JSP程序第一次调用显示错误,刷新后会显示呢?
- sea.js调用百度地图api
- 问个javascript方面的问题:根据select option项的变换,切换不同的数据项
- 小型网站简繁体互换???
代码真多,up
<frame src='top?name"+usrName+"'>
如果成功传了,我要取值的时候用什么getParameter?还是getQueryString?
还有该取什么呢?name?还是userName?书上的top中取的userName没取到值message中用的name也没取到
我都不知道哪个错了,或者都错了?
ses.setAttribute("userName", usrName);但你却在reqeuest里取值,当然没有了
String UserName=request.getParameter("userName");//显然,是userName没有得到的原因
改:String UserName=ses.getAttribute("userName").toString();
试试
参数名1=值1&参数名2=值2...
例子中
out.println("<frame src='top?name"+usrName+"'>");
name后面明显缺少等号,不符合标准;
这行倒是对的
out.println("<frame src='userlist?name="+usrName+"'>");而且取值方式也不应该是
request.getParameter("userName")
而应为request.getParameter("name"),因为name是参数名,你所要做得是通过参数取值。//Servlet上下文初始化
HttpSession ses=request.getSession();
ses.setAttribute("userName", usrName);这两步也不是通过上下文初始化,而是通过session方式保存usrName的值,以便你在其它地方可以取用。最后,建议LZ换本书吧,不要因此耽误啊附:getQueryString():是指请求字符串,即URL中?号后的所有字符组成的串
getParameter(String name):是返回参数key为name的值value