当前位置:编程学习 > JAVA >>

纠结死了,jsp向servlet就是无法传递参数,求指点

小弟今天学习JSP根据书上写例子,在JSP里 用BUTTON调用javascript方法向servlet传递参数,可是不管怎么写运行起来就是nullpointer异常,用的GET传递 在URL里?后面只有username和password参数,没有要传递的method参数,上代码:
jsp页面:<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<html>
  <head>  
    <title>Db login page</title>
    <script type="text/javascript">
     function doSubmit(){
     form1.action = "servlet?method=login";
     form1.submit();
     }
    </script>
  </head>
  
  <body>
    <form name="form1" action="servlet" method="get">
    username:<input type="text" name="username"></input><br>
    password:<input type="text" name="password"/><br>
    <input type="button" name="login" value="login" onClick="doSubmit()"; />
    <input type="reset"  name="reset" value="reset"/>
    </form>    
  </body>
</html>

servlet页面:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得连接传递的字符串参数method
String how=request.getParameter("method");

if(how.equals("login"))  //到这一步报错java.lang.NullPointerException

{
this.doLogin(request, response); }

报错的URL:http://127.0.0.1:8080/DbDAO/servlet?username=seven&password=seven    这里URL里就是没有method=login这个传递的参数
小弟百度了一晚上了,都说在action后 servlet?参数=值 就可以向servlet传递参数,可是找了好久BUG就是没有找到,求朋友指点 --------------------编程问答-------------------- 估计是form1.submit();这函数把?后面的都截掉了,你把method这参数弄成一个隐藏域,放表单里。
<input type="hidden" name="method" value="" />

然后doSubmit()这方法改method这个隐藏域。 --------------------编程问答--------------------
引用 1 楼 ihtml 的回复:
估计是form1.submit();这函数把?后面的都截掉了,你把method这参数弄成一个隐藏域,放表单里。
<input type="hidden" name="method" value="" />

然后doSubmit()这方法改method这个隐藏域。

++ --------------------编程问答-------------------- 既然使用表单提交为什么还要使用 javascript那么提交请求?
按钮属性直接设置为submint就可以提交,后台servlet就可以直接获取到的 --------------------编程问答-------------------- 事件改下触发位置:
<form name="form1" action="servlet" method="get" onsubmit="doSubmit();">


<script type="text/javascript">
function doSubmit(){
  form1.action = "servlet?method=login";
}
</script>
--------------------编程问答--------------------

String name = request.getParameter("uesrname");
String password = requset.getParameter("password");// 在servlet端 getParameter();是根据表单中的name来获取value的 你的代码里 getParameter("methord")中的method不是form中的name是不能得到值的 所以出现了空指针异常 
我写的着两行代码就能获得你表单里的name和password 你可以试试 --------------------编程问答-------------------- 说实话没发现什么错误,
function doSubmit(){
  form1.action = "servlet?method=login";
  alert("in function doSubmit");  form1.submit();
  }
加上这句话看看,是不是从这个方法提交的 --------------------编程问答-------------------- 你也面也没有<input type="text" name="method"></input>啊,当然会报空异常了。。 --------------------编程问答-------------------- <form name="form1" action="servlet" method="get">

去掉  action="servlet" --------------------编程问答-------------------- 加上这句话之后运行了一下,有提示,证明的确是调用的doSubmit()这个方法,可是还是nullpointer异常,难道这个javascript方法不能够向servlet传递 method=login 这个字符串吗?
引用 6 楼 abstruct 的回复:
说实话没发现什么错误,
function doSubmit(){
  form1.action = "servlet?method=login";
  alert("in function doSubmit");  form1.submit();
  }
加上这句话看看,是不是从这个方法提交的
--------------------编程问答-------------------- 可能我没写清楚意思,我的意思是通过button的javascript方法 提交给servlet name和password 并且在提交一个我自定义的 参数method的值,现在 name和password 提交没问题但是javascript方法 中的method值无法提交
引用 5 楼 a597926661 的回复:

String name = request.getParameter("uesrname");
String password = requset.getParameter("password");// 在servlet端 getParameter();是根据表单中的name来获取value的 你的代码里 getParameter("methord")中……
--------------------编程问答-------------------- 照你的意思我改了一下,BUTTON类型没有改的时候按按钮没反应,我换成SUBMIT后 可以提交在URL后参数为login=login 貌似把SUBMIT按钮的VALUE值当成参数名传递过去了,不是javascript方法中的 method=login
引用 4 楼 ldh911 的回复:
事件改下触发位置:
<form name="form1" action="servlet" method="get" onsubmit="doSubmit();">


<script type="text/javascript">
function doSubmit(){
  form1.action = "servlet?method=login";
}
</script>
……
--------------------编程问答-------------------- 经过试验,发现form如果采用get方式而非post方式的话,浏览器会智能的把action属性中的参数全部清除。

那么楼主,你只有两个选择了:
1、修改form的method属性为post,也就是不采用URL传参法;
2、增加一个隐藏输入域:<input type="hidden" name="method" value="login" /> --------------------编程问答-------------------- 点击login按钮后请注意浏览器的url.....get忽略了method=login --------------------编程问答-------------------- form表单的method=“post” --------------------编程问答-------------------- 说实话,不用使用javascript ,可以再from中的action="/servlet?method=????"就可以了 --------------------编程问答-------------------- 拜托,你form1.action = "servlet?method=login";
你login有定义变量吗,可以用浏览器的调试工具调试一下,你看看你的提交js会不会报错 --------------------编程问答-------------------- 本地测试跟楼主一样,看来get方式是不行的,只能用post方式提交了。 --------------------编程问答-------------------- - =.... get方法无法得到method的值..
用post方法可以得到 --------------------编程问答-------------------- 1楼方法可行. 也比较适用.. --------------------编程问答-------------------- 提交表单为什么还要写个onsubmit的方法 如果做判断 你可以 return onclick 条件够了 直接提交到Servlet
 request 接一下不就好了吗
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,