问题标签用户 jsp页面调用Servlet后进入Servlet页面空白不跳转了

时间:2022-11-14 06:46:59
各位大大,小弟正在用java做毕业设计,遇到一个问题,就是想实现获取页面的学生姓名sname和学号sno,然后到数据库中执行查询,将这个学生的成绩从数据库中输出到新的页面。可是,问题来了:在查询页面点击提交按钮后,页面跳转到ChengjiServlet2页面,web浏览器就一片空白,在ChengjiServlet2页面的sendRedirect也没了作用。。。希望各位大大们看在我操心做毕业设计的份儿上帮帮我吧,说白了就是一个查询输出,望大大们指点!跪谢!!
 //查询页面,jsp。放在一个文件夹里。路径没出错
<body>
<form id="form1" name="chengjiFrom" method="post" action="../ChengjiServlet2"><h1 align="center">成绩查询页面</h1>
  <p>姓名:
    <input name="sname" type="text" id="sname" />
  </p>
  <p>学号:
    <input name="sno" type="text" id="sno" />
  </p>
  <p>
    <input type="submit" name="Submit" value="查询成绩" />
  </p>
</form>
</body>
[code=java]
//这是我编写的ChengjiServlet2类
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List chengji = new ArrayList();
        //获取chengjichaxun.jsp页面的各个控件属性
String Sname = request.getParameter("sname");
String Sno = request.getParameter("sno");
String SelectScore = request.getParameter("select");

ChengjiSQLUtil chengjiSql = new ChengjiSQLUtil();
Connection conn =null;
Statement stmt=null;
ResultSet rs = null;
conn = chengjiSql.getConn_Bendi();

try
{
if(SelectScore.equals("score_1"))
  {
//创建Statement实例,并执行sql语句
String sql = "SELECT * FROM 'renwu'.'score_da1' where sno='"+Sno+"' and sname='"+Sname+"'";
 
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next())
{
String sno = rs.getString("sno");
String sname = rs.getString("sname");
String ke1_a = rs.getString("ke1_a");
String ke1_b = rs.getString("ke1_b");
String ke1_c = rs.getString("ke1_c");
String ke1_d = rs.getString("ke1_d");
String ke1_e = rs.getString("ke1_e");
String ke1_f = rs.getString("ke1_f");
chengji.add(sno);
chengji.add(sname);
chengji.add(ke1_a);
chengji.add(ke1_b);
chengji.add(ke1_c);
chengji.add(ke1_d);
chengji.add(ke1_e);
chengji.add(ke1_f);
}
HttpSession session = request.getSession();
session.setAttribute("score", chengji);
response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");
   }
else if(SelectScore.equals("score_2"))
{
String sql = "SELECT * FROM 'renwu'.'score_da2' where sno='"+Sno+"' and sname='"+Sname+"'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next())
{
String sno = rs.getString("sno");
String sname = rs.getString("sname");
String ke2_a = rs.getString("ke2_a");
String ke2_b = rs.getString("ke2_b");
String ke2_c = rs.getString("ke2_c");
String ke2_d = rs.getString("ke2_d");
String ke2_e = rs.getString("ke2_e");
String ke2_f = rs.getString("ke2_f");
chengji.add(sno);
chengji.add(sname);
chengji.add(ke2_a);
chengji.add(ke2_b);
chengji.add(ke2_c);
chengji.add(ke2_d);
chengji.add(ke2_e);
chengji.add(ke2_f);
}
HttpSession session = request.getSession();
session.setAttribute("score", chengji);
response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");
}
else if(SelectScore.equals("score_3"))
{
String sql = "SELECT * FROM 'renwu'.'score_da3' where sno='"+Sno+"' and sname='"+Sname+"'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next())
{
String sno = rs.getString("sno");
String sname = rs.getString("sname");
String ke3_a = rs.getString("ke3_a");
String ke3_b = rs.getString("ke3_b");
String ke3_c = rs.getString("ke3_c");
String ke3_d = rs.getString("ke3_d");
String ke3_e = rs.getString("ke3_e");
String ke3_f = rs.getString("ke3_f");
chengji.add(sno);
chengji.add(sname);
chengji.add(ke3_a);
chengji.add(ke3_b);
chengji.add(ke3_c);
chengji.add(ke3_d);
chengji.add(ke3_e);
chengji.add(ke3_f);
}
HttpSession session = request.getSession();
session.setAttribute("score", chengji);
response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");
}
else if(SelectScore.equals("score_4"))
{
String sql = "SELECT * FROM 'renwu'.'score_da4' where sno='"+Sno+"' and sname='"+Sname+"'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next())
{
String sno = rs.getString("sno");
String sname = rs.getString("sname");
String ke4_a = rs.getString("ke4_a");
String ke4_b = rs.getString("ke4_b");
String ke4_c = rs.getString("ke4_c");
String ke4_d = rs.getString("ke4_d");
String ke4_e = rs.getString("ke4_e");
String ke4_f = rs.getString("ke4_f");
chengji.add(sno);
chengji.add(sname);
chengji.add(ke4_a);
chengji.add(ke4_b);
chengji.add(ke4_c);
chengji.add(ke4_d);
chengji.add(ke4_e);
chengji.add(ke4_f);
}
HttpSession session = request.getSession();
session.setAttribute("score", chengji);
response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
chengjiSql.releaseResources(conn, stmt, rs);
}
}

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

[/code]
//这块是web.xml的相关信息
<servlet>
    <servlet-name>chengjiServlet2</servlet-name>
    <servlet-class>org.afan.course.servlet.ChengjiServlet2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>chengjiServlet2</servlet-name>
    <url-pattern>/chengjiServlet2</url-pattern>
  </servlet-mapping>


//这块是查询成功后要跳转的页面代码,目前还没能走到这个页面。
<body><P>成绩情况</P>
<table>
<%
 List list = (List)session.getAttribute("score");
for(int i=0;i<list.size();i++)
{
out.print("成绩:" + list.get(i) + "<br/>");
}

%>
</table>
</body>

20 个解决方案

#1


你写的可真复杂 先问一嘴 servlet中service方法你没动吧?是不在那放着没动?

#2


这个是Tomcat反馈的部分信息
at org.afan.course.servlet.ChengjiServlet2.doPost(ChengjiServlet2.java:60)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

#3


引用 1 楼 cmchina7 的回复:
你写的可真复杂 先问一嘴 servlet中service方法你没动吧?是不在那放着没动?


没有,只重写了doGet方法和doPost

#4


1.你那个doPost写的有意义么?就是跳转到doget 干嘛不直接在doPost里写呢?多余!
2.根据你的说法首先 你的跳转应该是实现的有问题;
这样解决 把你跳转写到方法的最后 也就是所有情况都跳转 别把跳转写在各个if中,然后把上面的方法注释掉 只留下跳转方法(response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");)
这是为了测试你的跳转成没成功
3 在servlet中用system。out输出一下你的查询结果 看看你的查询方法写没写对

#5


可能Servlet代码有些长,其实意思是第一个jsp页面有一个下拉框,根据不同的下拉框,执行不同的sql语句,连接相应的数据表,总共有4个——大一成绩表、大二成绩表、大三成绩表、大四成绩表。对应4个if语句。出问题的貌似在while(rs.next())这里

#6


别弄混淆了  你不同方法跳转的都是同一个页面 所以这个跳转和你的业务逻辑没关系 先把跳转写明白 不用管你的逻辑ok?
把你的response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");写到if else 之外去对你的业务逻辑的实现一点也不影响

你看看你的路径对不对

#7


还有servlet中service方法负责调用doget或者dopost方法 你页面from中method用get的话servlet自己调用doget
用的post的话 servlet自己调用dopost 你写复杂了

#8


引用 4 楼 cmchina7 的回复:
1.你那个doPost写的有意义么?就是跳转到doget 干嘛不直接在doPost里写呢?多余!
2.根据你的说法首先 你的跳转应该是实现的有问题;
这样解决 把你跳转写到方法的最后 也就是所有情况都跳转 别把跳转写在各个if中,然后把上面的方法注释掉 只留下跳转方法(response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");)
这是为了测试你的跳转成没成功
3 在servlet中用system。out输出一下你的查询结果 看看你的查询方法写没写对

第一步改了,放在了doPost()里了;
第二步试了,response.sendRedirect("./chaxun_chengji/chengji_jieguo.jsp");成功了;
第三步这样子写了
String Sname = request.getParameter("sname");
String Sno = request.getParameter("sno");
String SelectScore = request.getParameter("select");
ChengjiSQLUtil chengjiSql = new ChengjiSQLUtil();
Connection conn =null;
Statement stmt=null;
ResultSet rs = null;
conn = chengjiSql.getConn_Bendi();
try
{
//创建Statement实例,并执行sql语句
String sql = "SELECT * FROM 'renwu'.'score_da1' where sno='"+Sno+"' and sname='"+Sname+"'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next())
{
String sno = rs.getString("sno");
String sname = rs.getString("sname");
String ke1_a = rs.getString("ke1_a");
String ke1_b = rs.getString("ke1_b");
String ke1_c = rs.getString("ke1_c");
String ke1_d = rs.getString("ke1_d");
String ke1_e = rs.getString("ke1_e");
String ke1_f = rs.getString("ke1_f");
System.out.print(sno);
System.out.print(sname);
System.out.print(ke1_a);
System.out.print(ke1_b);
System.out.print(ke1_c);
System.out.print(ke1_d);
System.out.print(ke1_e);
System.out.print(ke1_f);
}
  }catch(Exception e)
{
e.printStackTrace();
}

把response.sendRedirect("./chaxun_chengji/chengji_jieguo.jsp");去掉了,但是没看出啥效果,没有报错,也没有结果。。不知道是不是语句的问题

#9


sql的表名用单引号干嘛?

#10


把sql改成静态的测试一下 先别用参数查询

#11


你是哪个学校的 老师会被你气死的 java惯例变量名小写开头 驼峰命名 快把sno什么的改成小写

#12


引用 10 楼 cmchina7 的回复:
把sql改成静态的测试一下 先别用参数查询

表的单引号是抄书上的,去掉了。用静态的成功了!!而且加上where也可以!! 问题标签用户 jsp页面调用Servlet后进入Servlet页面空白不跳转了

#13


睡了 有问题明天再说吧 这个地方好好学 这是框架的基础 学好了功德无量

#14


现在又冒出了一个问题,我估计是最后一个吧——jsp页面的sname文本框和sno文本框的内容传递到Servlet类中,String xuesheng=request.getParamter("sname")和String xuehao=request.getParamter("sno")好像没能获取文本框的值。执行查询后在新页面没有输出数据表的内容。

#15


引用 13 楼 cmchina7 的回复:
睡了 有问题明天再说吧 这个地方好好学 这是框架的基础 学好了功德无量

师傅,现在有个小问题:我从jsp页面的文本框sname和文本框sno里输入了两个值“张三”和“1111”,然后进入Servlet后,执行查询跳转新页面后,新页面 问题标签用户 jsp页面调用Servlet后进入Servlet页面空白不跳转了除了默认的标签什么也没有了。我猜是Servlet里的getParameter没有获取到jsp页面传来的sname和sno参数。不知是不是,也烦请师傅帮忙看下哈! 问题标签用户 jsp页面调用Servlet后进入Servlet页面空白不跳转了

#16


学校还是比培训机构落后太多了啊!
现在还没开始教学生使用标签库吗?
每次查询都建立链接,你以为web开发是写main函数吗?
找些培训机构的视频看看吧,有好处的。

#17


我不知你有没学框架,如果没有的话,赶紧学吧,不然以后就别找相关工作了。

#18


我估计不是没有获取到值,可能是获取到的内容乱码了,然后查询不出东西。
先输出一下你获取的值,如果是乱码的话,设置下编码:request.setCharacterEncoding("utf-8");

#19


我知道我在java上很菜,但是我可以熬通宵去做代码。经过不懈的努力,我终于实现了自己需要的功能,在此感谢昨晚深夜陪伴我解决问题的师傅cmchina7。他不仅教会了我怎样解决问题,更教会了我怎样分块一块一块测试找到问题,在此对他表示深深的感谢,感谢你深夜仍旧对我的帮助,非常感谢。同时也感谢w405112941给我提出了一个实质性的解决方法,谢谢!!我接着去完成我的“菜鸟设计”了,各位,先说再见了!

#20


引用 18 楼 w405112941 的回复:
我估计不是没有获取到值,可能是获取到的内容乱码了,然后查询不出东西。
先输出一下你获取的值,如果是乱码的话,设置下编码:request.setCharacterEncoding("utf-8");




今天来晚了 不知道你的问题解决了没 不过没解决的话也没事 因为我没看到效果不知道你问题出在了哪 呵呵
给你说个知识点吧 楼上这个代码很好啊 这个代码的作用是 容器在将参数传给servlet的时候 默认按照iso8859的编码解析 你要讲这句代码放到你方法的最前面 最好放在service方法的第一行 然后再写别的东西 
将来要是遇见编码是乱码时 记得以下三个地方
1.初始页面要有编码设置 html写<html charset=“utf-8”>(好像是在html标签上写 你可以随便看一个网页的源码 看看写在哪个标签了 我这pad查找不方便)j
2.jsp的话要有<%@page pageEncoding=“utf-8”%>
3.就是楼上说的那段代码放在servlet的service上
另外我们习惯把servlet的其他方法都不用 直接在service写业务 不用什么doget什么的

#1


你写的可真复杂 先问一嘴 servlet中service方法你没动吧?是不在那放着没动?

#2


这个是Tomcat反馈的部分信息
at org.afan.course.servlet.ChengjiServlet2.doPost(ChengjiServlet2.java:60)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

#3


引用 1 楼 cmchina7 的回复:
你写的可真复杂 先问一嘴 servlet中service方法你没动吧?是不在那放着没动?


没有,只重写了doGet方法和doPost

#4


1.你那个doPost写的有意义么?就是跳转到doget 干嘛不直接在doPost里写呢?多余!
2.根据你的说法首先 你的跳转应该是实现的有问题;
这样解决 把你跳转写到方法的最后 也就是所有情况都跳转 别把跳转写在各个if中,然后把上面的方法注释掉 只留下跳转方法(response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");)
这是为了测试你的跳转成没成功
3 在servlet中用system。out输出一下你的查询结果 看看你的查询方法写没写对

#5


可能Servlet代码有些长,其实意思是第一个jsp页面有一个下拉框,根据不同的下拉框,执行不同的sql语句,连接相应的数据表,总共有4个——大一成绩表、大二成绩表、大三成绩表、大四成绩表。对应4个if语句。出问题的貌似在while(rs.next())这里

#6


别弄混淆了  你不同方法跳转的都是同一个页面 所以这个跳转和你的业务逻辑没关系 先把跳转写明白 不用管你的逻辑ok?
把你的response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");写到if else 之外去对你的业务逻辑的实现一点也不影响

你看看你的路径对不对

#7


还有servlet中service方法负责调用doget或者dopost方法 你页面from中method用get的话servlet自己调用doget
用的post的话 servlet自己调用dopost 你写复杂了

#8


引用 4 楼 cmchina7 的回复:
1.你那个doPost写的有意义么?就是跳转到doget 干嘛不直接在doPost里写呢?多余!
2.根据你的说法首先 你的跳转应该是实现的有问题;
这样解决 把你跳转写到方法的最后 也就是所有情况都跳转 别把跳转写在各个if中,然后把上面的方法注释掉 只留下跳转方法(response.sendRedirect("chaxun_chengji/chengji_jieguo.jsp");)
这是为了测试你的跳转成没成功
3 在servlet中用system。out输出一下你的查询结果 看看你的查询方法写没写对

第一步改了,放在了doPost()里了;
第二步试了,response.sendRedirect("./chaxun_chengji/chengji_jieguo.jsp");成功了;
第三步这样子写了
String Sname = request.getParameter("sname");
String Sno = request.getParameter("sno");
String SelectScore = request.getParameter("select");
ChengjiSQLUtil chengjiSql = new ChengjiSQLUtil();
Connection conn =null;
Statement stmt=null;
ResultSet rs = null;
conn = chengjiSql.getConn_Bendi();
try
{
//创建Statement实例,并执行sql语句
String sql = "SELECT * FROM 'renwu'.'score_da1' where sno='"+Sno+"' and sname='"+Sname+"'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next())
{
String sno = rs.getString("sno");
String sname = rs.getString("sname");
String ke1_a = rs.getString("ke1_a");
String ke1_b = rs.getString("ke1_b");
String ke1_c = rs.getString("ke1_c");
String ke1_d = rs.getString("ke1_d");
String ke1_e = rs.getString("ke1_e");
String ke1_f = rs.getString("ke1_f");
System.out.print(sno);
System.out.print(sname);
System.out.print(ke1_a);
System.out.print(ke1_b);
System.out.print(ke1_c);
System.out.print(ke1_d);
System.out.print(ke1_e);
System.out.print(ke1_f);
}
  }catch(Exception e)
{
e.printStackTrace();
}

把response.sendRedirect("./chaxun_chengji/chengji_jieguo.jsp");去掉了,但是没看出啥效果,没有报错,也没有结果。。不知道是不是语句的问题

#9


sql的表名用单引号干嘛?

#10


把sql改成静态的测试一下 先别用参数查询

#11


你是哪个学校的 老师会被你气死的 java惯例变量名小写开头 驼峰命名 快把sno什么的改成小写

#12


引用 10 楼 cmchina7 的回复:
把sql改成静态的测试一下 先别用参数查询

表的单引号是抄书上的,去掉了。用静态的成功了!!而且加上where也可以!! 问题标签用户 jsp页面调用Servlet后进入Servlet页面空白不跳转了

#13


睡了 有问题明天再说吧 这个地方好好学 这是框架的基础 学好了功德无量

#14


现在又冒出了一个问题,我估计是最后一个吧——jsp页面的sname文本框和sno文本框的内容传递到Servlet类中,String xuesheng=request.getParamter("sname")和String xuehao=request.getParamter("sno")好像没能获取文本框的值。执行查询后在新页面没有输出数据表的内容。

#15


引用 13 楼 cmchina7 的回复:
睡了 有问题明天再说吧 这个地方好好学 这是框架的基础 学好了功德无量

师傅,现在有个小问题:我从jsp页面的文本框sname和文本框sno里输入了两个值“张三”和“1111”,然后进入Servlet后,执行查询跳转新页面后,新页面 问题标签用户 jsp页面调用Servlet后进入Servlet页面空白不跳转了除了默认的标签什么也没有了。我猜是Servlet里的getParameter没有获取到jsp页面传来的sname和sno参数。不知是不是,也烦请师傅帮忙看下哈! 问题标签用户 jsp页面调用Servlet后进入Servlet页面空白不跳转了

#16


学校还是比培训机构落后太多了啊!
现在还没开始教学生使用标签库吗?
每次查询都建立链接,你以为web开发是写main函数吗?
找些培训机构的视频看看吧,有好处的。

#17


我不知你有没学框架,如果没有的话,赶紧学吧,不然以后就别找相关工作了。

#18


我估计不是没有获取到值,可能是获取到的内容乱码了,然后查询不出东西。
先输出一下你获取的值,如果是乱码的话,设置下编码:request.setCharacterEncoding("utf-8");

#19


我知道我在java上很菜,但是我可以熬通宵去做代码。经过不懈的努力,我终于实现了自己需要的功能,在此感谢昨晚深夜陪伴我解决问题的师傅cmchina7。他不仅教会了我怎样解决问题,更教会了我怎样分块一块一块测试找到问题,在此对他表示深深的感谢,感谢你深夜仍旧对我的帮助,非常感谢。同时也感谢w405112941给我提出了一个实质性的解决方法,谢谢!!我接着去完成我的“菜鸟设计”了,各位,先说再见了!

#20


引用 18 楼 w405112941 的回复:
我估计不是没有获取到值,可能是获取到的内容乱码了,然后查询不出东西。
先输出一下你获取的值,如果是乱码的话,设置下编码:request.setCharacterEncoding("utf-8");




今天来晚了 不知道你的问题解决了没 不过没解决的话也没事 因为我没看到效果不知道你问题出在了哪 呵呵
给你说个知识点吧 楼上这个代码很好啊 这个代码的作用是 容器在将参数传给servlet的时候 默认按照iso8859的编码解析 你要讲这句代码放到你方法的最前面 最好放在service方法的第一行 然后再写别的东西 
将来要是遇见编码是乱码时 记得以下三个地方
1.初始页面要有编码设置 html写<html charset=“utf-8”>(好像是在html标签上写 你可以随便看一个网页的源码 看看写在哪个标签了 我这pad查找不方便)j
2.jsp的话要有<%@page pageEncoding=“utf-8”%>
3.就是楼上说的那段代码放在servlet的service上
另外我们习惯把servlet的其他方法都不用 直接在service写业务 不用什么doget什么的

#21