java 代码post表单数据到服务器,servlet接收处理

    xiaoxiao2023-03-24  5

    前言:

            一般来说表单数据是在网页前端上面实现,在对应框内填入数据,点击提交按钮即将数据传递给后台(action的值指定负责处理表单数据的具体哪个servlet)。但是其实java代码也是可以远程post表单数据给服务器的Servlet程序,下面讲一讲详细步骤。

    一、客户端

    编写java程序

            主要思想就是利用http协议,post数据到指定url地址。

    直接看下面代码:代码摘自《java核心技术卷2第9版》,我稍作修改,使之更易看懂,原程序的数据来源是放在一个properites文件中,我为了程序好读懂改成在程序中直接对要传输的参数进行赋值。

            数据传输是以键值对的方式(Key-Value)形式传送。可以传送很多对键值对,比如说(k1,v1)(k2,v2)  (k3,v3)......这所有的键值对都存放在Map集合当中,在服务器端,使用HttpServletRequest类的一个方法:getParameter("k1"),即可将客户端传来的k1对应的value值读到,以字符串返回。

    import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class AndroidPost { public static void main(String[] args) throws IOException { /** url这里是一个重点,服务器端使用的servlet,是tomcat容器在负责调用, tomcat默认的监听端口即是8080,IP地址如果是远程的或者使用的云服务器, 那就换成自己的IP,关键是8080端口后面的内容,test1其实是tomcat目录下的一个webapp, test1可以理解成是一个tomcat下面的工程,而Upload_html这个则是具体的负责 接收java代码传来的数据的servlet名称,后缀.java省掉。同时在tomcat的test1工程下面 (或者说文件夹下面)要新建一个WEB-INF的文件夹,在这个文件夹下面要建一个 web.xml文件,在里面要进行配置才能把url这个地址和具体servlet程序关联起来。 后面会讲服务器端 **/ String url = "http://localhost:8080/test1/Upload_html"; String result = doPost(url, sendParam()); System.out.println(result); System.out.println("come on"); } public static Map<String, String> sendParam() { //这里用来存放键值对,为了程序看起来简单就手动输上去了 String key1 = "param1"; String value1 = "1"; String key2 = "param2"; String value2 = "14"; String key3 = "param3"; String value3 = "334"; HashMap<String, String> param = new HashMap<String, String>(); param.put(key1, value1); param.put(key2, value2); param.put(key3, value3); return param; } public static String doPost(String urlString, Map<String, String> nameValuePairs) throws IOException { URL url = new URL(urlString);//先new出一个URL地址,定位网络资源 URLConnection connection = url.openConnection();//打开连接 connection.setDoOutput(true);//使能往远程写操作 //把建立的http的连接流返回给PrintWriter try (PrintWriter out = new PrintWriter(connection.getOutputStream())) { boolean first = true; for (Map.Entry<String, String> pair : nameValuePairs.entrySet()) { if (first) first = false; else out.print('&'); String name = pair.getKey().toString(); String value = pair.getValue().toString(); out.print(name); out.print('='); out.print(URLEncoder.encode(value, "UTF-8")); } } //下面的代码是去接收服务器端的反馈信号,将返回的信号全都存放在response这个对象中, 看一下api文档的StringBuilder类,就明白下面的代码了 StringBuilder response = new StringBuilder(); try (Scanner in = new Scanner(connection.getInputStream())) { while (in.hasNextLine()) { response.append(in.nextLine()); response.append("\n"); } } catch (IOException e) { if (!(connection instanceof HttpURLConnection)) throw e; InputStream err = ((HttpURLConnection) connection).getErrorStream(); if (err == null) throw e; Scanner in = new Scanner(err); response.append(in.nextLine()); response.append("\n"); in.close(); } return response.toString(); } }

    这样一来,客户端就已经写好了。

    二、服务器端

    使用Servlet程序来做客户端的接收处理,而负责调用Servlet的是Tomcat,所以先下载安装好tomcat,其实特别简单就是下载解压然后放在某个目录就好了。这里有两种启动方式:

    1、使用bin目录下的脚本文件,Linux下用startup.sh 、 shutdown.sh,在Windows平台下使用.bat后缀的脚本。

    2、调试阶段其实可以使用eclipse来辅助,新建一个Server,把tomcat关联进去,百度一下有很多带图教程。

    这里重点是讲Servlet端应该怎么编写:先上代码

    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; import com.sun.javafx.collections.MappingChange.Map; public class Upload_html extends HttpServlet{ @Override //客户端的连接被封装到request这个对象中,参数的提取也是从这个对象中拿 //而反馈给客户端的内容封装在response这个对象中,比如返回数据也是通过这个对象来完成 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); //将接收到的数据再返回给客户端 PrintWriter pw = response.getWriter(); //使用方法getParameter来获取键值对应的value值,这里的Key参数要和客户端传上来的Key值一样! pw.println(request.getParameter("param1")); pw.println(request.getParameter("param2")); pw.println(request.getParameter("param3")); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //跳转到doGet当中去处理 doGet(request, response); } }

    服务端配置:

        我这里以手动配置为例,不使用eclipse来辅助。

    安装好tomcat目录结构如下:

    进入webapps目录:

    新建一个文件夹test1,并在test1这个目录下新建WEB-INF文件夹,并在WEB-INF文件夹下新建一个classes文件夹和web.xml文件

    classes里面保存编写好的servlet文件的class文件,比如这里就应该是Upload_html.class文件。另外,在编写servlet文件的时候,会需要toncat安装目录下的一些jar包,主要是servlet-api.jar,目录如下

    另外关键的就是web.xml的配置:

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>test1</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Upload_image</servlet-name> <servlet-class>com.zhoucy.Upload_image</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload_image</servlet-name> <url-pattern>/Upload_image</url-pattern> </servlet-mapping> <servlet> <servlet-name>Upload_html</servlet-name> <servlet-class>com.zhoucy.Upload_html</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload_html</servlet-name> <url-pattern>/Upload_html</url-pattern> </servlet-mapping> </web-app> 重点就是加红的部分。

            <url-pattern>/Upload_html</url-pattern>这里填的值Upload_html就是决定客户端url的最后一个参数, (千万注意有一个斜杠“/”一定要填上的)相当就是说,客户端运行以后,url就指定了Upload_html, 然后找到<servlet-name>Upload_html</servlet-name> ,再通过映射找到上面的两行代码 <servlet-name>Upload_html</servlet-name>  <servlet-class>com.zhoucy.Upload_html</servlet-class>, 最终找到com.zhoucy.Upload_html这个程序,我servlet代码当中是有package封包的,如果没有封包,那就直接程序名, 有封包就把包名也加上,当然.class文件也就得放在相应的包的路径下。

            然后运行tomcat,客户端再运行java代码,注意把ip改好,就可以成功post数据到服务端了。

    转载请注明原文地址: https://ju.6miu.com/read-1202480.html
    最新回复(0)