需求:
客户端是以swing做的界面,用户输入用户名和密码后,点击确定后关闭当前swing窗口,然后打开浏览器以[color=red]post[/color]方式提交到服务器。
麻烦各位高手给些意见, [color=red]关键是怎样以post方式提交到web服务器[/color],[color=blue]谢谢了~~!!![/color]
[b]问题补充:[/b]
能不能在发送post请求的同时,打开浏览器,在浏览器中执行,像一般的web项目那样呢?
[b]问题补充:[/b]
我现在就有这种困惑,因为客户端都是终端机,不能用cookies,还必须以post方式,不知道该怎么设置session来保证当前登陆的用户
[b]问题补充:[/b]
谢谢各位帮忙!!!
收获很多
使用HttpURLConnection试试
je上有这么一篇文~~
http://benlsoft.iteye.com/blog/97059
用httpclient很容易实现
参考例子文章
http://www.blogjava.net/wangxinsh55/archive/2009/06/25/284149.html
http://www.99inf.net/SoftwareDev/Java/54529.htm
可以打开浏览器,但应该做不到用浏览器自动提交
还是一样的session处理嘛,用户以哪种方式提交http请求这又没什么关系,你的应用只不过把他当一般用户处理嘛,
[color=blue]使用JavaSE中的URLConnection,链接到服务器,并向服务器提交参数信息。支持GET、POST(已测试)。
见代码:
[/color]
服务器端:
[code="java"]
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class HelloServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("这是测试Java Socket 链接的");
String param = request.getParameter("id");
out.println("输入的参数:"+param);
out.println("</HTML>");
out.flush();
out.close();
}
}
[/code]
JavaSE的客户端
[code="java"]
import java.io.*;
import java.net.*;
public class Hello {
public static void main(String[] args) throws Exception {
// Post参数名
String param = "id";
// Post参数值
String paramValue = "JavaSE传入的参数";
//
URL url = new URL("http://127.0.0.1:8080/webapp/servlet/HelloServlet");
URLConnection connection = url.openConnection();
// 设置为True可以向服务器提交数据
connection.setDoOutput(true);
// 向服务器提交数据
OutputStreamWriter out = new OutputStreamWriter(connection
.getOutputStream());
out.write(param + "=" + paramValue);
out.close();
// 后续处理,根据实际情况。这里输入信息。
BufferedReader in = new BufferedReader(new InputStreamReader(connection
.getInputStream()));
String decodedString;
while ((decodedString = in.readLine()) != null) {
System.out.println(decodedString);
}
in.close();
}
}
[/code]
可以先在本地的指定路径下(比如C盘根目录下的post.html)放入一个写好的html文件
其中写一段JavaScript代码 使在页面载入后就执行
如lz要提交到某个服务器
那么就可以在js代码中这么写
[code="js"]
window.location = http://***.com/xxxservlet
/code
在java方法中将要提交服务器的位置
写入以下代码
[code="java"]
try {
Runtime.getRuntime().exec("iexplore.exe C:\post.html") ;
}
catch(IOException ioe)
{
System.out.println("调用出错.");
}
[/code]
[color=red]前提是将C:\Program Files\Internet Explorer 加入环境变量中的Path[/color]
这样的话 就可以主动调用ie带访问那个html文件,最终达到以post方式提交服务器的
目的
补充一下:
[code="js"]window.location = http://***.com/xxxservlet [/code]
更正为
[code="js"]window.location = "http://***.com/xxxservlet" [/code]
还有如果不想改变Path的话
直接如下调用:
[code="java"]
try{
Runtime.getRuntime().exec("C:\Program Files\Internet Explorer\iexplore.exe C:\post.html") ;
}
catch(IOException ioe)
{
System.out.println("调用出错.");
}
[/code]
我刚试了下,是可以的哦
至于设置session的话
可以在那个html文件中先提供一个占位符,在cs程序中将调用ie之前,先将该文件中的占位符修改为客户标识
至于使用form提交还是直接post,看lz的选择了啊
使用telnet