首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2013-11-30 
为什么在servlet中无法获取到参数? 急!我贴一下主要的代码登陆页面 public class Login extends HttpServl

为什么在servlet中无法获取到参数? 急!
我贴一下主要的代码
登陆页面 


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页面显示 ,这到底是怎么一回事 ?


[解决办法]
编码问题,你把你浏览器的设置为GBK看看。
[解决办法]
获取参数的时候将编码格式改为UTF-8 或GBK或GB2312 试试。
String username= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");
这样在欢迎页面应该可以看到你输入的中文字符了。
[解决办法]
要是乱码,最起码也得有乱码输出来吧  觉得不是乱码问题!
[解决办法]
撸主说输出是null? Welcome页面在输出一遍 ,在控制台看看是啥?
[解决办法]
"Welcome?username="+username+"&pwd=" + pwd 登陆处理页面打印出来看看是啥?
[解决办法]

引用:
"Welcome?username="+username+"&pwd=" + pwd 登陆处理页面打印出来看看是啥?
?、
[解决办法]
Welcome页面去掉 这个 request.setCharacterEncoding("GBK");试试吧 
[解决办法]
url里username=%20
表示username=空格
所以在跳转的时候,这个username的值已经是空格了
现在LZ就用排除法吧
把连接数据库的地方改改,比如换成statement方式

热点排行