- 浏览: 340857 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
ydm135:
解决了我的部分问题,写的不是我想要的位置。,
jRegistryKey读取注册表的例子及jar包下载 -
hqc20111612:
...
Hibernate java.lang.NoClassDefFoundError: org/dom4j/DocumentException 导入dom4j依然 -
江恂泽:
楼主用的jRegistry是那个版本的?我下 了好多个版本Re ...
java读写注册表的两种方式,Preferences与jRegistry -
xander:
不错,不错
java String 缓冲池概念的举例说明(面试题) -
xiaohuafyle:
fzfz_902 写道在windows sever 2008上 ...
java 读取CD-ROM 光驱中文件
转载自:
http://blog.csdn.net/pathuang68/article/details/6920076
在某些情况下,需要用Java applicatioin来模拟form,向服务器(本文以servlet为例)发送http post请求,包括提交表单域中的数据以及上传文件。如果仅仅是传递form中的数据,而不包含上传文件,那是很简单的,比如Java application可以这么写:
服务端的servlet可以这么写:
一切看起来都不复杂。但是如果要模拟的表单,除了要向服务器传递如上面的“key = value”这样的普通信息,同时还要上传文件,事情就复杂得多。下面详解如下:
1. 准备
玄机逸士很久没有开发web方面的应用了,所以机器上没有现成的环境,为此先要进行这方面的准备。
a) 到http://tomcat.apache.org 上下载tomcat压缩包apache-tomcat-6.0.33.zip,将其解压到指定目录即可,
如:D:\Tomcat6
b) 到http://commons.apache.org上下载用于文件上传的两个包:commons-fileupload-1.2.2-bin.zip
和commons-io-2.1-bin.zip, commons-fileupload依赖于commons-io,但在编程的过程中,
不会直接用到commons-io
c) 检查Tomcat的安装是否成功。双击D:\Tomcat6\bin目录中的startup.bat文件,就可以启动tomcat。
打开浏览器,访问http://localhost:8080/,如果出现tomcat相关的页面,则说明tomcat安装成功。
d) 在D:\Tomcat6\webapps目录下创建一个test子目录,我们等会开发的servlet就将部署在这里。在
test目录下再建立两个目录WEB-INF(必须大写)和upload,在WEB-INF下面 创建两个目录classes和lib,
同时新建一个web.xml文件;在upload目录下,创建一个temp子目录,这些工作做完以后,test目录
下面的目录文件结构如下图所示。
其中的classes目录,用来存放将要开发的servlet,lib用来存放commons-fileupload和commons-io相关的jar包,web.xml是一些应用描述信息;upload用于存放客户端(即我们要开发的Java application)上传过来的文件,temp则用于存放上传过程中可能产生的一些临时文件。
e) 将commons-fileupload-1.2.2-bin.zip和commons-io-2.1-bin.zip解压,可以得到commons-fileupload-
1.2.2.jar和commons-io-2.1.jar,我们将这两个文件拷贝到d)中创建的lib目录中。
f) 编辑web.xml使之如下:
这个web.xml可以先从D:\Tomcat6\webapps\examples\WEB-INF下面拷贝过来,再进行如上黑体字所示的修改即可。<servlet>标签描述的是servlet代码方面的资料,其中<servlet-name>Hello</servlet-name>是给这个servlet起一个名字Hello,它必须和下面的<servlet-mapping>中的<servlet-name>一致,该名字具体是什么可以随意写定。
<servlet-class>com.pat.handlinghttprequestservlet.HandlingHttpRequestServlet</servlet-class>说明了完整的servlet类名,即servlet的类名为HandlingHttpRequestServlet,它位于包com.pat.handlinghttprequestservlet中。
<url-pattern>/upload</url-pattern>,说明了如果客户端向“http://Web服务器的URL地址:端口号/test/upload”发出了请求,则该请求将由位于包com.pat.handlinghttprequestservlet中的HandlingHttpRequestServlet进行处理。
到此,前期准备工作结束。下面准备写代码。
2. Servlet的代码
再在classes目录建立如下目录结构com\pat\handlinghttprequestservlet,这用来代表HandlingHttpRequestServlet这个servlet所在的包名,将编译好的HandlingHttpRequestServlet.class,拷贝到这个目录下,然后启动(或者重新启动)tomcat
3. Java application的代码
4. 运行结果
运行PostRequestEmulator之前,服务器的upload目录下的情况:
运行PostRequestEmulator后,服务器的upload目录下的情况:
PostRequestEmulator从服务端得到的反馈情况:
Response fromserver is: OK
Tomcat控制台输出:
如果上传的文件中有大于1M的情况,第二次执行PostRequestEmulator的时候,就会在temp目录中产生临时文件。
本文参考材料:
http://v.youku.com/v_show/id_XMjc0ODMxMTA4.html
http://www.iteye.com/topic/1116110(在Android中用Application模拟http post请求)
http://apps.hi.baidu.com/share/detail/46728849
http://www.eoeandroid.com/thread-22679-1-1.html
http://blog.zhaojie.me/2011/03/html-form-file-uploading-programming.html
http://blog.csdn.net/pathuang68/article/details/6920076
在某些情况下,需要用Java applicatioin来模拟form,向服务器(本文以servlet为例)发送http post请求,包括提交表单域中的数据以及上传文件。如果仅仅是传递form中的数据,而不包含上传文件,那是很简单的,比如Java application可以这么写:
package com.pat.postrequestemulator; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; public class PostRequestEmulator { public static void main(String[] args) throws Exception { // 服务地址 URL url = new URL("http://127.0.0.1:8080/test/upload"); // 设定连接的相关参数 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod("POST"); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // 向服务端发送key = value对 out.write("username=kevin&password=pass"); out.flush(); out.close(); // 获取服务端的反馈 String strLine = ""; String strResponse = ""; InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while ((strLine = reader.readLine()) != null) { strResponse += strLine + "\n"; } System.out.print(strResponse); } }
服务端的servlet可以这么写:
package com.pat.handlinghttprequestservlet; 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; public class PostRequestEmulator extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); // 获取username所对应的value String password = req.getParameter("password"); // 获取password所对应的value System.out.println("Thereceived username and password is: " + username + "/" + password); // 向请求端发回反馈信息 PrintWriter out = resp.getWriter(); out.print("OK"); out.flush(); out.close(); super.doPost(req, resp); } }
一切看起来都不复杂。但是如果要模拟的表单,除了要向服务器传递如上面的“key = value”这样的普通信息,同时还要上传文件,事情就复杂得多。下面详解如下:
1. 准备
玄机逸士很久没有开发web方面的应用了,所以机器上没有现成的环境,为此先要进行这方面的准备。
a) 到http://tomcat.apache.org 上下载tomcat压缩包apache-tomcat-6.0.33.zip,将其解压到指定目录即可,
如:D:\Tomcat6
b) 到http://commons.apache.org上下载用于文件上传的两个包:commons-fileupload-1.2.2-bin.zip
和commons-io-2.1-bin.zip, commons-fileupload依赖于commons-io,但在编程的过程中,
不会直接用到commons-io
c) 检查Tomcat的安装是否成功。双击D:\Tomcat6\bin目录中的startup.bat文件,就可以启动tomcat。
打开浏览器,访问http://localhost:8080/,如果出现tomcat相关的页面,则说明tomcat安装成功。
d) 在D:\Tomcat6\webapps目录下创建一个test子目录,我们等会开发的servlet就将部署在这里。在
test目录下再建立两个目录WEB-INF(必须大写)和upload,在WEB-INF下面 创建两个目录classes和lib,
同时新建一个web.xml文件;在upload目录下,创建一个temp子目录,这些工作做完以后,test目录
下面的目录文件结构如下图所示。
其中的classes目录,用来存放将要开发的servlet,lib用来存放commons-fileupload和commons-io相关的jar包,web.xml是一些应用描述信息;upload用于存放客户端(即我们要开发的Java application)上传过来的文件,temp则用于存放上传过程中可能产生的一些临时文件。
e) 将commons-fileupload-1.2.2-bin.zip和commons-io-2.1-bin.zip解压,可以得到commons-fileupload-
1.2.2.jar和commons-io-2.1.jar,我们将这两个文件拷贝到d)中创建的lib目录中。
f) 编辑web.xml使之如下:
<?xmlversion="1.0" encoding="ISO-8859-1"?> <!-- Licensed to the Apache Software Foundation(ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional informationregarding copyright ownership. The ASF licenses this file to You under theApache License, Version 2.0 (the "License"); you may not usethis file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreedto in writing, software distributed under the License is distributedon an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied. See the License for the specific languagegoverning permissions and limitations under the License. --> <web-appxmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>com.pat.handlinghttprequestservlet.HandlingHttpRequestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/upload</url-pattern> </servlet-mapping> </web-app>
这个web.xml可以先从D:\Tomcat6\webapps\examples\WEB-INF下面拷贝过来,再进行如上黑体字所示的修改即可。<servlet>标签描述的是servlet代码方面的资料,其中<servlet-name>Hello</servlet-name>是给这个servlet起一个名字Hello,它必须和下面的<servlet-mapping>中的<servlet-name>一致,该名字具体是什么可以随意写定。
<servlet-class>com.pat.handlinghttprequestservlet.HandlingHttpRequestServlet</servlet-class>说明了完整的servlet类名,即servlet的类名为HandlingHttpRequestServlet,它位于包com.pat.handlinghttprequestservlet中。
<url-pattern>/upload</url-pattern>,说明了如果客户端向“http://Web服务器的URL地址:端口号/test/upload”发出了请求,则该请求将由位于包com.pat.handlinghttprequestservlet中的HandlingHttpRequestServlet进行处理。
到此,前期准备工作结束。下面准备写代码。
2. Servlet的代码
public class HandlingHttpRequestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @SuppressWarnings({ "unchecked", "deprecation" }) @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); // 得到绝对文件夹路径,比如"D:\\Tomcat6\\webapps\\test\\upload" String path = req.getRealPath("/upload"); // 临时文件夹路径 String repositoryPath = req.getRealPath("/upload/temp"); // 设定临时文件夹为repositoryPath factory.setRepository(new File(repositoryPath)); // 设定上传文件的阈值,如果上传文件大于1M,就可能在repository // 所代 表的文件夹中产生临时文件,否则直接在内存中进行处理 factory.setSizeThreshold(1024 * 1024); // System.out.println("----"+ req.getContextPath()); // 得到相对文件夹路径,比如 "/test" // 创建一个ServletFileUpload对象 ServletFileUpload uploader = new ServletFileUpload(factory); try { // 调用uploader中的parseRequest方法,可以获得请求中的相关内容, // 即一个FileItem类型的ArrayList。FileItem是在 // org.apache.commons.fileupload中定义的,它可以代表一个文件, // 也可以代表一个普通的form field ArrayList<FileItem> list = (ArrayList<FileItem>) uploader.parseRequest(req); System.out.println(list.size()); for (FileItem fileItem : list) { if (fileItem.isFormField()) { // 如果是普通的form field String name = fileItem.getFieldName(); String value = fileItem.getString(); System.out.println(name + " = " + value); } else { // 如果是文件 String value = fileItem.getName(); int start = value.lastIndexOf("\\"); String fileName = value.substring(start + 1); // 将其中包含的内容写到path(即upload目录)下, // 名为fileName的文件中 fileItem.write(new File(path, fileName)); } } } catch (Exception e) { e.printStackTrace(); } // 向客户端反馈结果 PrintWriter out = resp.getWriter(); out.print("OK"); out.flush(); out.close(); super.doPost(req, resp); } }
再在classes目录建立如下目录结构com\pat\handlinghttprequestservlet,这用来代表HandlingHttpRequestServlet这个servlet所在的包名,将编译好的HandlingHttpRequestServlet.class,拷贝到这个目录下,然后启动(或者重新启动)tomcat
3. Java application的代码
public class PostRequestEmulator { public static void main(String[] args) throws Exception { // 设定服务地址 String serverUrl = "http://127.0.0.1:8080/test/upload"; // 设定要上传的普通Form Field及其对应的value // 类FormFieldKeyValuePair的定义见后面的代码 ArrayList<FormFieldKeyValuePair> ffkvp = new ArrayList<FormFieldKeyValuePair>(); ffkvp.add(new FormFieldKeyValuePair("username", "Patrick")); ffkvp.add(new FormFieldKeyValuePair("password", "HELLOPATRICK")); ffkvp.add(new FormFieldKeyValuePair("hobby", "Computer programming")); // 设定要上传的文件。UploadFileItem见后面的代码 ArrayList<UploadFileItem> ufi = new ArrayList<UploadFileItem>(); ufi.add(new UploadFileItem("upload1", "E:\\Asturias.mp3")); ufi.add(new UploadFileItem("upload2", "E:\\full.jpg")); ufi.add(new UploadFileItem("upload3", "E:\\dyz.txt")); // 类HttpPostEmulator的定义,见后面的代码 HttpPostEmulator hpe = new HttpPostEmulator(); String response = hpe.sendHttpPostRequest(serverUrl, ffkvp, ufi); System.out.println("Responsefrom server is: " + response); } } class HttpPostEmulator { // 每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。 private static final String BOUNDARY = "----------HV2ymHFg03ehbqgZCaKO6jyH"; public String sendHttpPostRequest(String serverUrl, ArrayList<FormFieldKeyValuePair> generalFormFields, ArrayList<UploadFileItem> filesToBeUploaded) throws Exception { // 向服务器发送post请求 URL url = new URL(serverUrl/* "http://127.0.0.1:8080/test/upload" */); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 发送POST请求必须设置如下两行 connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Charset", "UTF-8"); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); // 头 String boundary = BOUNDARY; // 传输内容 StringBuffer contentBody = new StringBuffer("--" + BOUNDARY); // 尾 String endBoundary = "\r\n--" + boundary + "--\r\n"; OutputStream out = connection.getOutputStream(); // 1. 处理普通表单域(即形如key = value对)的POST请求 for (FormFieldKeyValuePair ffkvp : generalFormFields) { contentBody.append("\r\n") .append("Content-Disposition: form-data; name=\"") .append(ffkvp.getKey() + "\"") .append("\r\n") .append("\r\n") .append(ffkvp.getValue()) .append("\r\n") .append("--") .append(boundary); } String boundaryMessage1 = contentBody.toString(); out.write(boundaryMessage1.getBytes("utf-8")); // 2. 处理文件上传 for (UploadFileItem ufi : filesToBeUploaded) { contentBody = new StringBuffer(); contentBody.append("\r\n") .append("Content-Disposition:form-data; name=\"") .append(ufi.getFormFieldName() + "\"; ") // form中field的名称 .append("filename=\"") .append(ufi.getFileName() + "\"") // 上传文件的文件名,包括目录 .append("\r\n") .append("Content-Type:application/octet-stream") .append("\r\n\r\n"); String boundaryMessage2 = contentBody.toString(); out.write(boundaryMessage2.getBytes("utf-8")); // 开始真正向服务器写文件 File file = new File(ufi.getFileName()); DataInputStream dis = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[(int) file.length()]; bytes = dis.read(bufferOut); out.write(bufferOut, 0, bytes); dis.close(); contentBody.append("------------HV2ymHFg03ehbqgZCaKO6jyH"); String boundaryMessage = contentBody.toString(); out.write(boundaryMessage.getBytes("utf-8")); } out.write("------------HV2ymHFg03ehbqgZCaKO6jyH--\r\n".getBytes("UTF-8")); // 3. 写结尾 out.write(endBoundary.getBytes("utf-8")); out.flush(); out.close(); // 4. 从服务器获得回答的内容 String strLine = ""; String strResponse = ""; InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while ((strLine = reader.readLine()) != null) { strResponse += strLine + "\n"; } return strResponse; } } // 一个POJO。用于处理普通表单域形如key = value对的数据 class FormFieldKeyValuePair implements Serializable { // The form field used for receivinguser's input, // such as "username" in "<inputtype="text" name="username"/>" private String key; // The value entered by user in thecorresponding form field, // such as "Patrick" the abovementioned formfield "username" private String value; public FormFieldKeyValuePair(String key, String value) { this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } // 一个POJO。用于保存上传文件的相关信息 class UploadFileItem implements Serializable { // The form field name in a form used foruploading a file, // such as "upload1" in "<inputtype="file" name="upload1"/>" private String formFieldName; // File name to be uploaded, thefileName contains path, // such as "E:\\some_file.jpg" private String fileName; public UploadFileItem(String formFieldName, String fileName) { this.formFieldName = formFieldName; this.fileName = fileName; } public String getFormFieldName() { return formFieldName; } public void setFormFieldName(String formFieldName) { this.formFieldName = formFieldName; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }
4. 运行结果
运行PostRequestEmulator之前,服务器的upload目录下的情况:
运行PostRequestEmulator后,服务器的upload目录下的情况:
PostRequestEmulator从服务端得到的反馈情况:
Response fromserver is: OK
Tomcat控制台输出:
如果上传的文件中有大于1M的情况,第二次执行PostRequestEmulator的时候,就会在temp目录中产生临时文件。
本文参考材料:
http://v.youku.com/v_show/id_XMjc0ODMxMTA4.html
http://www.iteye.com/topic/1116110(在Android中用Application模拟http post请求)
http://apps.hi.baidu.com/share/detail/46728849
http://www.eoeandroid.com/thread-22679-1-1.html
http://blog.zhaojie.me/2011/03/html-form-file-uploading-programming.html
发表评论
-
Java动态代理与CGLib
2014-10-11 02:01 1407Java动态代理机制是一种强大的编译时生成代码的机制。 比如以 ... -
关于try-catch的finally
2014-09-24 18:58 968知识点一:在Java的方法 ... -
JDBC驱动程序的四种类型
2012-08-26 22:11 55621、JDBC框架 JDBC(Java DataBase C ... -
newInstance() 的参数版本与无参数版本详解
2012-07-26 00:09 33814通过反射创建新的类示例,有两种方式: Class.newIns ... -
jRegistryKey读取注册表的例子及jar包下载
2012-07-25 10:13 5901出于跨平台的考虑,java在当初设计的时候,并没有考虑 ... -
JAVA程序员不该有的6种异常处理陋习
2012-07-05 15:12 1373只有在学会处理异常之后,我们才能说自己是一个合格的java ... -
java获取操作系统盘符的代码分享
2012-07-04 14:33 2790有时,我们在编程的时候不得不用到操作系统所在的磁盘的盘符. 然 ... -
java项目打包后,无法显示图片或无法读取文件问题解决方案
2012-07-02 11:54 11492在项目中使用到了图片,可以将图片放在src文件夹的外部,也可以 ... -
POI解析excel2007和生成excel2007
2012-06-26 15:45 2567最近几天在整理客户的数据,数据量比较大,有几十万条,用到了ex ... -
java获取当前路径
2012-06-18 10:33 11361、利用System.getProperty() ... -
java执行bat阻塞的解决方法
2012-06-18 10:18 7773java在执行.bat文件时,经常会出现卡住不动的情况,我们称 ... -
java 读取CD-ROM 光驱中文件
2012-06-14 11:49 3409我编写了一个利用Java控制光驱的打开与关闭,并从光盘中拷贝文 ... -
java读写注册表的两种方式,Preferences与jRegistry
2012-05-29 11:53 15526由于java程序是“write once, run every ... -
Java调用WMIC命令的方法阻塞
2012-05-28 16:25 1651转自:http://blog.csdn.net/ragic/a ... -
java正则表达式捕获组,非捕获组与注释介绍
2012-04-21 01:24 2292正则表达式,简单部分可参加Pattern的javadoc介绍. ... -
深入浅出java 序列化概念
2012-04-15 02:15 1903在做继承时,Eclipse ... -
探讨Java内部类的可见性
2012-04-11 00:48 973转载自http://zhangjunhd.blog.51cto ... -
java.util.ConcurrentModificationException出现原因及解决方案
2012-04-10 19:45 2790public void setReparation( Re ... -
java JVM 虚拟机指令集
2012-04-03 01:34 11490x00 nop 什么都不做 0x01 a ... -
jdk/bin & jre/bin 目录下面的工具说明
2012-04-03 00:54 10545jre/bin目录下面工具说明 javac:Java编译器,将 ...
相关推荐
WebServices在服务端和客户端使用SOAP消息格式来传递数据,我们使用Servlet来模拟SOAP消息的客户端和服务端。
java Java Servlet小程序 java Java Servlet小程序 java Java Servlet小程序
servlet中实现请求转发,用户登录,在servlet中验证用户名和密码.
在JAVA中如何用SERVLET处理Http Post的表单请求xml
c# post发送到java servlet 并可以通过servlet HttpServletReques 的getParameter方法获取
android中java与服务器端servlet发送JSON数据请求-附件资源
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是...
Java Web基础与实例教程的PPT,自己制作的PPT,将近400页,免费分享,童鞋们努力学习吧。
何为Servlet? ... Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
Java_Servlet技术概述和实例,Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用...
Web编程(Java )-Servlet API中请求和响应的应用
Servlet技术是Java Web开发中常用的一种技术,用于响应用户请求并生成动态内容。本文将介绍Servlet技术的基本原理以及使用方式。 首先,Servlet是一个Java类,它可以接收HTTP请求并且生成HTTP响应。当服务器接收到...
HttpClient模拟http发送post和get请求
Java期末大作业 基于Java+JSP+Servlet实现的租车管理系统源码 Java期末大作业 基于Java+JSP+Servlet实现的租车管理系统源码 Java期末大作业 基于Java+JSP+Servlet实现的租车管理系统源码 Java期末大作业 基于Java+...
servlet3异步请求,需要安装gradle,执行scripts/gradle-eclipse.bat/sh 然后导入eclipse
Java程序设计 12 JSP Servlet.ppt
java servlet 微信点餐小程序 微信小程序 mysql 毕设
如何向客户端发送响应 知道如何解决web开发中的中文乱码问题,知道乱码问题产生的原因和解决方法 会debug服务端代码 什么是Servlet Servlet是Java web应用中最核心的组件,完全用Java语言编写,它运行于服务端,它...
Java+servlet+jsp页面ajax请求 有详细的注释
java帮助文档\servlet docjava帮助文档\servlet docjava帮助文档\servlet docjava帮助文档\servlet doc