http编程系列3:http协议POST方式提交数据并返回结果

来源:互联网 发布:ug8.0编程图文 编辑:程序博客网 时间:2024/04/29 05:23

使用POST方式提交数据是向服务器提出请求的第二种方式,下面我们将使用方法分享给大家。

这个例子实现的是提交登录的用户名和密码,返回登录是否成功。

整体思路:新建一个web工程,在前端写一个登录界面;在doGet方法中调用doPost方法,在doPost方法中,设置请求和返回的格式,获取用户名和密码两个参数,根据参数是否正确返回登录成功或失败;新建一个java工程,在里面定义一个网址字符串,赋值为web项目中的LoginAction位置,使用这个网址实例化一个URL对象,定义一个changeInputStream方法,在这个方法中定义一个ByteArrayOutputStream对象,把InputStream对象的数据写入到ByteArrayOutputStream对象并转换成字符串的形式返回;定义一个sendPostMessage方法,在这个方法中定义一个字符串缓冲区,如果参数不为空的话,设置参数为键值对的形式并输出,用URL对象实例化一个HttpURLConnection对象,并设置它的超时时间、请求方式、从服务器读取数据、文本类型、长度,获取上传信息,获取输出流,把上传信息写入输出流,关闭输出流,获取服务器的响应码,如果请求完成的话调用changeInputStream方法将返回结果转换为字符串并返回。这样就实现了向web服务器发送请求数据并返回相应的结果。

index.jsp文件:

 <form name="form1" method="post" action="<%=path %>/servlet/LoginAction">    用户名:<input type="text" name="username" value=""/><br/>    密    码:<input type="password" name="password" value="" /><br/>    <input type="submit" name="submit" value="提交表单" />    <form/>
LoginAction.java文件:
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String username=request.getParameter("username");String password=request.getParameter("password");System.out.println("username:"+username);System.out.println("password:"+password);if(username.equals("admin")&&password.equals("123")){//表示服务器端返回结果out.print("Login is successed!!!");}else{out.print("Login is failled!!!");}out.flush();out.close();}

HttpUtils.java文件:

public class HttpUtils {private static String PATH="http://172.21.75.194:8080/myhttp/servlet/LoginAction";private static URL url;public HttpUtils() {}static {try {url=new URL(PATH);} catch (MalformedURLException e) {e.printStackTrace();}}//params填写的url参数,encode字节编码public static String sendPostMessage(Map<String, String> params,String encode){//作为StringBuffer初始化字符串StringBuffer buffer=new StringBuffer();//请求体就在缓冲区中try {if(params!=null&&!params.isEmpty()){for(Map.Entry<String, String> entry:params.entrySet()){//使用强循环buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(),encode)).append("&");}//删除掉最后一个符号&buffer.deleteCharAt(buffer.length()-1);}System.out.println("-->"+buffer.toString());//有时的bug就是按提示敲出来的一个类,多一个s就不行啦。注意按提示敲出来的类的书写细节。HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();urlConnection.setConnectTimeout(3000);urlConnection.setRequestMethod("POST");urlConnection.setDoInput(true);//表示从服务器获取数据urlConnection.setDoOutput(true);//表示向服务器写数据//获得上传信息的字节大小以及长度byte[] mydata=buffer.toString().getBytes();//表示设置请求体的类型是文本类型、设置请求体的长度urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");urlConnection.setRequestProperty("Content-Length", String.valueOf(mydata.length));//获得输出流,向服务器输出数据OutputStream outputStream=urlConnection.getOutputStream();outputStream.write(mydata,0,mydata.length);outputStream.close();//获得服务器响应的结果和状态码int responseCode=urlConnection.getResponseCode();if(responseCode==200){return changeInputStream(urlConnection.getInputStream(),encode);}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "";}    //将一个输入流转换成指定编码的字符串private static String changeInputStream(InputStream inputStream, String encode) {ByteArrayOutputStream outputStream=new ByteArrayOutputStream();byte[] data=new byte[1024];int len=0;String result="";if(inputStream!=null){try {while ((len=inputStream.read(data))!=-1) {outputStream.write(data, 0, len);}result=new String(outputStream.toByteArray(),encode);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return result;}public static void main(String[] args) {Map<String, String> params=new HashMap<String,String>();params.put("username", "admin");params.put("password", "123");String result=HttpUtils.sendPostMessage(params, "utf-8");System.out.println("result:"+result);}}



0 0
原创粉丝点击