为什么在servlet中无法获取到参数? 急!

guan_tu 2013-11-14 01:06:08
我贴一下主要的代码
登陆页面

public class Login extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
//中文乱码
response.setContentType("text/html;charset=gb2312");
PrintWriter pw=response.getWriter();
//返回登陆界面
pw.println("<html>");
pw.println("<body>");
//得到error信息
String info=request.getParameter("info");
if (info!=null) {
pw.println("<h1>你的用户名或是密码错误</h1>");
}
pw.println("<h1>登陆界面</h1>");
pw.println("<form action=Logincl method=post>");
pw.println("用户名:<input type=text name='username' /><br/>");
pw.println("密码:<input type=password name=password /><br/>");
pw.println("<input type=submit value=login /><br/>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html");
} catch (Exception e) {
e.printStackTrace();
}
}
}

登陆处理页面

public class Logincl extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// 业务逻辑
try {
request.setCharacterEncoding("GBK");
// 接收用户名和密码
String username = request.getParameter("username");
String pwd = request.getParameter("password");
// 连接数据库
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:sjbitdb", "epet", "bdqn");
pstmt = conn
.prepareStatement("select * from master where loginname=? and pwd=?");
pstmt.setString(1, username);
pstmt.setString(2, pwd);
rs = pstmt.executeQuery();
// 验证
if (rs.next()) {
// 合法(跳转到welcome)
response.sendRedirect("Welcome?username="+username+"&pwd="
+ pwd);
System.out.println("username"+username);//此处在控制台显示 仍然能够打印出 张三
} else {
// 不合法
response.sendRedirect("Login");// 写你要跳到的servlet的url
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if (rs!=null) {
rs.close();
}
if (pstmt!=null) {
pstmt.close();
}
if (conn!=null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response) {
doGet(request, response);
}

}

Welcome页面

public class Welcome extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// 业务逻辑
try {
request.setCharacterEncoding("GBK");
String username=request.getParameter("username");
System.out.println("username"+username);//此处在控制台显示为空
String pwd = request.getParameter("pwd");
response.setContentType("text/html;charset=gbk");
PrintWriter pw = response.getWriter();
pw.println("welcome!" + "用户名" + username + "密码" + pwd);
} catch (Exception e) {

} }

public void doPost(HttpServletRequest request, HttpServletResponse response) {
doGet(request, response);
}
}


使用的是eclipse 发布的项目,tomcat容器,oracle数据库 ,当我在登陆页面输入用户名张三和密码888888时 ,跳转到了 欢迎页面,但问题是用户名在欢迎页面不能显示出来,密码可以显示 ,地址栏显示为

http://localhost:8080/Servlet1/Welcome?username=%20&pwd=888888

当输入的用户名为字母时,用户名和密码都可以在欢迎页面显示,如果用户名是中文的话
无论我如何设置 都无法在 welcome页面显示 ,这到底是怎么一回事 ?

...全文
3168 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
谷宇. 2013-11-15
  • 打赏
  • 举报
回复
引用 11 楼 nd707355117 的回复:
[quote=引用 9 楼 u012463264 的回复:] "Welcome?username="+username+"&pwd=" + pwd 登陆处理页面打印出来看看是啥?

if (rs.next()) {
				 response.sendRedirect("Welcome?username="+username+"&pwd="
		 + pwd);
		 System.out.println("Welcome?username="+username+"&pwd="
		 + pwd);
		System.out.println("username"+username);
		 } 
打印结果为: Welcome?username=张三&pwd=888888 username张三[/quote] sendRedirect为重定向,会清除请求的数据.楼主试试用转发的形式去跳转. 转发:request.getRequestDispatcher("xxx.jsp").forward(request,response);
hello_逗比 2013-11-15
  • 打赏
  • 举报
回复
采用url传中文的时候要url编码,然后接收受端url解码。
xiangwei5385315 2013-11-15
  • 打赏
  • 举报
回复
加一个response.setCharacterEncoding("GBK");
xuxianyue 2013-11-14
  • 打赏
  • 举报
回复
response.sendRedirect("Welcome?username="+username+"&pwd="          + pwd); URL要进行UTF-8编码,Welcome里面要进行UTF-8解码,使用URLDecoder.decode(s, "UTF-8")
guan_tu 2013-11-14
  • 打赏
  • 举报
回复
楼上的方法我试过了,还是不管用 !
此用户已关机 2013-11-14
  • 打赏
  • 举报
回复
或者在setString之前用另外一个变量 String uname = username; pstmt.setString(1, uname ); LZ测试完了告诉大家一下结果哈,这个问题挺神奇的
此用户已关机 2013-11-14
  • 打赏
  • 举报
回复
url里username=%20 表示username=空格 所以在跳转的时候,这个username的值已经是空格了 现在LZ就用排除法吧 把连接数据库的地方改改,比如换成statement方式
guan_tu 2013-11-14
  • 打赏
  • 举报
回复
引用 12 楼 u012463264 的回复:
Welcome页面去掉 这个 request.setCharacterEncoding("GBK");试试吧
这些方法都试过了 ,没有用,现在问题是,如果不连接数据库,输入中文就可以获取到,但是只要连接数据库后,到最后一个页面,只要用户名是中文的就什么也得不到,乱码都没有!
别闹腰不好 2013-11-14
  • 打赏
  • 举报
回复
Welcome页面去掉 这个 request.setCharacterEncoding("GBK");试试吧
guan_tu 2013-11-14
  • 打赏
  • 举报
回复
引用 9 楼 u012463264 的回复:
"Welcome?username="+username+"&pwd=" + pwd 登陆处理页面打印出来看看是啥?

if (rs.next()) {
				 response.sendRedirect("Welcome?username="+username+"&pwd="
		 + pwd);
		 System.out.println("Welcome?username="+username+"&pwd="
		 + pwd);
		System.out.println("username"+username);
		 } 
打印结果为: Welcome?username=张三&pwd=888888 username张三
别闹腰不好 2013-11-14
  • 打赏
  • 举报
回复
引用 9 楼 u012463264 的回复:
"Welcome?username="+username+"&pwd=" + pwd 登陆处理页面打印出来看看是啥?
?、
别闹腰不好 2013-11-14
  • 打赏
  • 举报
回复
"Welcome?username="+username+"&pwd=" + pwd 登陆处理页面打印出来看看是啥?
guan_tu 2013-11-14
  • 打赏
  • 举报
回复
引用 5 楼 u012463264 的回复:
要是乱码,最起码也得有乱码输出来吧 觉得不是乱码问题!
对的,我现在也觉得可能不是乱码的问题,在第二个页面还是能够获取中文用户名的,但是 到了 欢迎页面后,在控制台打印的话,就是什么都不显示了 ,我觉得就是一个空值,好像也不是null啊
guan_tu 2013-11-14
  • 打赏
  • 举报
回复
我刚才有个新的发现 ,如果我在登陆处理页面没有连接数据库,将第二个页面的代码换成如下代码

try {
			// 接收用户名和密码
			String username = request.getParameter("username");
			String pwd = request.getParameter("password");
			if (pwd.equals("123")) {
			 response.sendRedirect("Welcome?username=" + username + "&pwd="+ pwd);
			} else {
				 // 不合法
				 response.sendRedirect("Login");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
如果写成这样 我在欢迎页面使用 username = new String(username.getBytes("ISO-8859-1"), "GBK");就能够获得到用户名 了,真是太奇怪了~~~
别闹腰不好 2013-11-14
  • 打赏
  • 举报
回复
撸主说输出是null? Welcome页面在输出一遍 ,在控制台看看是啥?
别闹腰不好 2013-11-14
  • 打赏
  • 举报
回复
要是乱码,最起码也得有乱码输出来吧 觉得不是乱码问题!
guan_tu 2013-11-14
  • 打赏
  • 举报
回复
引用 1 楼 zhuweisyyc 的回复:
编码问题,你把你浏览器的设置为GBK看看。
额,能讲清楚些吗?
guan_tu 2013-11-14
  • 打赏
  • 举报
回复
引用 2 楼 wangtianxin0929 的回复:
获取参数的时候将编码格式改为UTF-8 或GBK或GB2312 试试。 String username= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); 这样在欢迎页面应该可以看到你输入的中文字符了。
试过了 ,还是获取不到!
漏扫老司机 2013-11-14
  • 打赏
  • 举报
回复
获取参数的时候将编码格式改为UTF-8 或GBK或GB2312 试试。 String username= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); 这样在欢迎页面应该可以看到你输入的中文字符了。
zhuweisyyc 2013-11-14
  • 打赏
  • 举报
回复
编码问题,你把你浏览器的设置为GBK看看。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧