1

我在 Eclipse 中制作了一个在 Tomcat 服务器上运行的简单 servlet。

我正在运行一个简单的 java 应用程序,它将一个字符串传递message=20给 servlet。servlet 获取数据。我在用

String name= request.getParameter("message");

获取传递的字符串。当我将名称值返回给应用程序时,我可以取回它。但是当我尝试处理字符串名称时:

int val=Integer.parseInt(name);

我明白了NumberFormatException。我无法弄清楚问题是什么。我已经能够从 servlet 中取回 name 变量的值,但为什么我不能使用它呢?

我使用的代码如下:

客户端代码

URL url = new URL("http://localhost:8080/DemoServer/demoservelet");

URLConnection conn = url.openConnection();

conn.setDoOutput(true);

BufferedWriter out = new BufferedWriter( new OutputStreamWriter( conn.getOutputStream() ) );

out.write("message=20");

服务代码

String username = request.getParameter("message").toString();

int val=Integer.parseInt(username);  //get error msg on this line

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("Passed val :"+ username+username.length());


}

我在转换时遇到错误。返回的另一件事我得到的长度值为 4 这也没有任何意义?

请帮助我解决这个问题。

4

4 回答 4

1

您是否尝试使用 GET 样式的参数传递或 PUSH 样式的参数传递?

GET 样式的传递在 URL 的末尾添加参数,如下所示:

http://localhost:8080/DemoServer/demoservelet?value=20

像这样的 URL 可以相当容易地组装。您只需要更改您的 URL-creation 行,并且可以删除与打开 BufferedWriter 相关的两行:

URL url = new URL(String.format("http://localhost:8080/DemoServer/demoservelet?value=%d", 20));

POST 样式的传递必须遵守 HTTP 协议,这与您目前使用的非常相似,除了所有参数必须有一个尾随换行符这一事实。使用您的示例:

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));

out.writeln("message=20");

您还可以使用 PrintStream,如果您需要更改参数,这将使格式化参数更容易处理:

PrintStream out = new PrintStream(conn.getOutputStream());

out.printf("message=%d\n", 20);

使用 GET 样式还是 PUSH 样式取决于您,但这取决于您传递的数据类型。

于 2012-05-10T22:47:11.817 回答
0

我相信您必须将参数写为参数才能将其检测为一个。

out.write("<param name=\"message\" value=\"20\">");
于 2012-05-10T23:43:02.233 回答
0

您必须检查名称是否为有效数字。name.match("^-?\d+$"); 如果是数字则返回 true

于 2012-05-10T21:43:16.550 回答
0

你有输出名称的值,确定名称是一个数字,调试时检查值。

于 2012-05-11T05:23:33.443 回答