问题遇到的现象和发生背景
通过tomcat服务器,在浏览器360极速浏览器上输入 学号、姓名,查询数据库某表中的学生的相关信息。
问题相关代码,请勿粘贴截图
三个jsp文件,两个tag文件:
首页:
<%@ page contentType="text/html;charset=gb2312"%>
<html><body>
<form action="byName.jsp" method="post">
<h2>根据学号查询</h2>
<input type=text name="number">输入学号:
<input type=submit name="g" value="提交">
</form>
<form action="byName.jsp" method="post">
<h2>根据姓名查询</h2>
<input type=text name="name">输入姓名:
<input type=submit name="g" value="提交">
</form>
</body></html>
这是二选一,输入学号和姓名会跳转到不同的页面。
byName.jsp
<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="look"%>
<html><body color=cyan><font size=2>
<% String name=request.getParameter("name");%>
<look:NameCondition name="<%=name%>"/>
</font></body></html>
byNumber.jsp
<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="look"%>
<html><body color=cyan><font size=2>
<% String number=request.getParameter("number");%>
<look:NumberCondition number="<%=number%>"/>
</font></body></html>
NameCondition.tag
<%@ tag pageEncoding="utf-8" %>
<%@ tag import="java.sql.*" %>
<%@ attribute name="number" required="true"%>
<HTML><BODY>
<% Connection con;
Statement sql;
ResultSet rs;
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); }
catch(Exception e) { out.print(e); }
try { String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student";
String user="sa";
String password="";
con=DriverManager.getConnection(uri,user,password);
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM message WHERE number="+number");
if(rs.next()){
out.print("<table border=2>");
out.print("<tr>");
out.print("<th width=100>"+"number");
out.print("<th width=100>"+"name");
out.print("<th width=50>"+"birthday");
out.print("<th width=50>"+"email");
out.print("</TR>");
out.print("<tr>");
out.print("<td >"+rs.getString(1)+"</td>");
out.print("<td >"+rs.getString(2)+"</td>");
out.print("<td >"+rs.getString(3)+"</td>");
out.print("<td >"+rs.getString(4)+"</td>");
out.print("</tr>") ;
out.print("</table>");
}
else{
out.print("<h1>您输入的学号错误,没有此人。</h1>") ;
}
con.close();
}
catch(SQLException e1) { out.print(e1); }
%>
</BODY></HTML>
NameCondition.tag
<%@ tag pageEncoding="utf-8" %>
<%@ tag import="java.sql.*" %>
<%@ attribute name="name" required="true"%>
<HTML><BODY>
<% Connection con;
Statement sql;
ResultSet rs;
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); }
catch(Exception e) { out.print(e); }
try { String uri= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student";
String user="sa";
String password="";
con=DriverManager.getConnection(uri,user,password);
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM message WHERE name="+name);
if(rs.next()){
out.print("<table border=2>");
out.print("<tr>");
out.print("<th width=100>"+"number");
out.print("<th width=100>"+"name");
out.print("<th width=50>"+"birthday");
out.print("<th width=50>"+"email");
out.print("</TR>");
out.print("<tr>");
out.print("<td >"+rs.getString(1)+"</td>");
out.print("<td >"+rs.getString(2)+"</td>");
out.print("<td >"+rs.getString(3)+"</td>");
out.print("<td >"+rs.getString(4)+"</td>");
out.print("</tr>") ;
out.print("</table>");
}
else{
out.print("<h1>您输入的学号错误,没有此人。</h1>") ;
}
con.close();
}
catch(SQLException e1) { out.print(e1); }
%>
</BODY></HTML>
运行结果及报错内容
输入学号的结果:
17个�,还有其他几个字母。
我的解答思路和尝试过的方法
jdk是1.8,tomcat是5.66,sql是2012版本的。
我想要达到的结果
通过在浏览器输入的学号或者姓名,能正确访问获取到数据库的信息并显示在浏览器上。