商家后台页面密码修改问题—采用button提交数据,后端servlet一直取不到值

在商家后台页面的密码修改过程中,遇到了数据无法从前端传递到后端Servlet的问题。尝试更改onclick方法,使用invoke()方法解决问题。此外,为验证旧密码,从session中获取用户信息,直接在前端比较旧密码,避免额外的数据库调用,同时做了空值验证,成功解决修改密码的流程问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述


在后台页面中,需要输入旧密码,跟两次新密码,然后提交以后,更新密码!

但是在这里遇到一个问题,点击提交以后,我的数据在后台怎么也取不到!

后台servlet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		UserService us = new UserServiceImpl();
		User user = new User();
   	  String password = request.getParameter("password");
   	  String new_password = request.getParameter("new_password");
   	  user =  (User) request.getSession().getAttribute("user");
   	 System.out.println("password="+password+"new="+new_password+"user.getUsername()="+user.getUsername());
      int i=us.updateUser(user.getUsername(), password,new_password);
		if(i==1){
			System.out.println("密码更新成功!");
			request.getSession().setAttribute("user", user);
		request.getRequestDispatcher("/admin/personal/shop_info.jsp").forward(request, response);
		//	request.getRequestDispatcher("/admin/login/home.jsp").forward(request, response);
		}else{
			System.out.println("密码更新失败!");
		//	response.sendRedirect("/shop_Register/admin/login/register.jsp?error=yes");
			request.getRequestDispatcher("/admin/personal/shop_info.jsp").forward(request, response);
		}
	}

前端jsp代码
		<tr>
                  <td width="10%"style="text-align: right;"><font size="2px">旧密码</font></td>
		  <td width="55%"><input type="password" name="password" id ="password" class="txtinput"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;	</td>					
						</tr>
		<tr>
		<td width="45%" style="text-align: right;"><font size="2px">新密码</font></td>
			<td width="55%"><input type="password" name="new_password" id ="new_password" class="txtinput"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;		</td>
							</tr>
							  <tr>
			<td style="text-align: right;"><font size="2px">重复新密码</font></td>
			<td><input type="password" name="new_repassword" id="new_repassword" class="txtinput">&nbsp;&nbsp;&nbsp;&nbsp;	&nbsp;&nbsp;&nbsp;&nbsp;	</td>
	               <td><input type="hidden"  name="pas" id ="pas" value = "<%=user.getPassword() %>"/></td>
			        <!-- 
					把对象密码取出来隐藏掉,后面在取值比较
				-->
					</tr>
<td width="100%" style="text-align:center">
			<input type="button" value ="提交" onclick="window.location.href=('${pageContext.request.contextPath}/servlet/UpdateUserServlet')"/></td> 
屡次提交,后台获取的数据都为Null,所以定位到问题在按钮的事件上,type="button",跟type="submit"是有区别的,submit是特殊的button,如果因为涉及到提交数据,所以应该要采用submit,这样可以直接提交数据到servlet,一般同学的情况应该都在这里,但是,我的问题是换成submit提交,会调用另一个方法,因为这个页面本身进来就加载数据了,所以改成submit没有效果。


后来就把onclick方法改变了,改成一下invock()方法

	<td width="100%" style="text-align:center">
			<input type="button" value ="提交" onclick="invoke()"/></td>   
function invoke(){ 
  var p=document.getElementById("password").value;
  var np=document.getElementById("new_password").value;
  var nrp=document.getElementById("new_repassword").value;
  location.href="${pageContext.request.contextPath}/servlet/UpdateUserServlet?password="+p+"&new_password="+np;  
}  
</script>   
通过 var p=document.getElementById("password").value;
      location.href="${pageContext.request.contextPath}/servlet/UpdateUserServlet?password="+p+"&new_password="+np; 这样的方法来调取参数password和new_password的值,并且反馈给后台,通过输出,就看到获取到这两个参数。


问题二

对于密码的验证,本来修改密码,需要验证旧密码是否匹配,应该是回去前端页面的密码,然后交给后台处理,如果对的,才能修改成功,但是,这样就多调用了一次,其实,我这里采用了一中比较取巧的办法,因为页面登录进来以后,session是存有User的所有信息,包括用户名和密码,所以,就不要再到后台去取了

<%
User user=(User)request.getSession().getAttribute("user");
%>

 <td><input type="hidden"  name="pas" id ="pas" value = "<%=user.getPassword() %>"/></td>
			        <!-- 
					把对象密码取出来隐藏掉,后面在取值比较
				-->

这里把密码隐藏掉,就看不见了,然后取出来在jsp中比较就可以了。

<script>
function invoke(){ 
 var  pass = document.getElementById("pas").value;
  var p=document.getElementById("password").value;
  var np=document.getElementById("new_password").value;
  var nrp=document.getElementById("new_repassword").value;
  if(p == ""){
	  alert("旧密码不能为空!");
	  return false;
  }else if(np == ""){
	  alert("新密码不能为空!");
	  return false;
  }else if(np != nrp){
	  alert("两次密码输入不同!");
	  return false;
  }else if(pass != p){
	  alert("旧密码输入不正确!");
	  return false;
  }
  location.href="${pageContext.request.contextPath}/servlet/UpdateUserServlet?password="+p+"&new_password="+np;  
}  
</script>   

取出用户的密码,然后与我输入的旧密码进行比较,如果不符,就直接弹出来提示用户,省去了一次在调用数据库的任务。还有做了一些为空的验证。问题到这里就基本解决了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值