您的位置:首页 > 编程语言 > Java开发

java实现使用url传递paramString和paramStream

2015-11-19 20:03 726 查看
一、传递paramString

1、先新建一个纯servelet项目TestServer

(1)servlet代码:

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

*

*@类功能说明:servlet,作为接收Url参数的测试

*@修改人员名: yang

*@修改日期: 2015-11-19 下午02:13:18

*@修改次数:

*@创建时间: 2015-11-19 下午02:13:18

*@版本:V1.0

*/

@SuppressWarnings("serial")

public class TestUrlServer extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

// 接收String参数

String param = (String) request.getParameter("param");

if (param != null) {

System.out.println("字符参数是:" + param);

} else {

System.out.println("空字符参数!");

}

}

}

(2)、配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="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">
<!-- 测试通过URL访问传递param和流 -->

<servlet>

<servlet-name>TestUrlServer</servlet-name>

<servlet-class>com.test.action.TestUrlServer</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>TestUrlServer</servlet-name>

<url-pattern>/testUrlServer</url-pattern>

</servlet-mapping>

</web-app>

2、新建一个测试类进行测试

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import org.junit.Test;

/**

*

*@类功能说明:测试请求http://localhost:8080/

*@修改人员名: yang

*@修改日期: 2015-11-19 下午01:55:38

*@修改内容:

*@修改次数:

*@创建时间: 2015-11-19 下午01:55:38

*@版本:V1.0

*/

public class TestURL {

/**

* @方法功能说明: 测试将String串作为参数传递给 server

* @修改者名字: yang

* @修改日期: 2015-11-19

* @修改次数:

* @参数: @throws Exception

* @返回值 void

* @测试结果:

*/

@Test

public void testParamString(){

//param必须与servelt中的param名称一致

String urlString="http://localhost:8080/TestServer/testUrlServer?param=123456";

BufferedReader br=null;

try{

//创建url请求

URL url=new URL(urlString);

//连接请求协议

HttpURLConnection _url=(HttpURLConnection)url.openConnection();

//设置请求方法

_url.setRequestMethod("POST");

//设置请求开启连接

_url.connect();

//写入请求参数,记得把字节流转换成字符流

br=new BufferedReader(new InputStreamReader(_url.getInputStream()));

//实现读入内存的操作

String content="";

StringBuffer ss=new StringBuffer();

while((content=br.readLine())!=null){

ss.append(content);

}

}catch(Exception e){

throw new RuntimeException(e);

}finally{

try {

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

二、传递pramStream(传递流)

1、新建servlet代码

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

*

*@类功能说明:servlet,作为接收Url参数的测试

*@修改人员名: yang

*@修改日期: 2015-11-19 下午02:13:18

*@修改次数:

*@创建时间: 2015-11-19 下午02:13:18

*@版本:V1.0

*/

@SuppressWarnings("serial")

public class TestUrlServer extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

// 接收request文件流

InputStream in = request.getInputStream();

//接收传递的文件名称filename

String name = request.getHeader("filename");

//写入文件到本地,如果不确定文件是什么类型,那么可以拼接或者采用其他方式处理

FileOutputStream fos = new FileOutputStream("D:/"+name+".log");

//写入文件流到文件中

byte[] buffer = new byte[1024];

int bytes = 0;

while ((bytes = in.read(buffer)) != -1) {

fos.write(buffer, 0, bytes);

}

in.close();

fos.flush();

fos.close();

}

}

}

2、对应的web.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="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">
<!-- 测试通过URL访问传递param和流 -->

<servlet>

<servlet-name>TestUrlServer</servlet-name>

<servlet-class>com.test.action.TestUrlServer</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>TestUrlServer</servlet-name>

<url-pattern>/testUrlServer</url-pattern>

</servlet-mapping>

</web-app>

3、新建一个测试类进行测试

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import org.junit.Test;

/**

*

*@类功能说明:测试请求http://localhost:8080/

*@修改人员名: yang

*@修改日期: 2015-11-19 下午01:55:38

*@修改内容:

*@修改次数:

*@创建时间: 2015-11-19 下午01:55:38

*@版本:V1.0

*/

public class TestURL {

/**

* @方法功能说明: 测试将流作为参数传递给servlet

* @修改者名字: yang

* @修改日期: 2015-11-19

* @修改次数:

* @参数: @throws Exception

* @返回值 void

* @测试结果:

*/

@Test

public void testParamStream() throws Exception{

//传递的文件名称,用于给server的接收参数取文件名称

String filename="paramStream";

//需要传递的文件

String path="D:/qq.log";

//访问的url路径

String severUrl = "http://localhost:8080/TestServer/testUrlServer";

//创建url连接

URL url = new URL(severUrl);

HttpURLConnection h_urlcon = (HttpURLConnection) url.openConnection();

//在JDK 1.5以后可以这样来设置超时时间 (毫秒)

//设置连接主机超时时间30s

h_urlcon.setConnectTimeout(30000);

//设置读取数据超时时间30秒

h_urlcon.setReadTimeout(30000);

//设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在

//http正文中,设置为true,默认是false

h_urlcon.setDoOutput(true);

//设置是否从httpUrlConnection读取,默认为true

h_urlcon.setDoInput(true);

h_urlcon.setChunkedStreamingMode(1024*1024);

//默认是get方法

h_urlcon.setRequestMethod("POST");

h_urlcon.setRequestProperty("connection", "Keep-Alive");

h_urlcon.setRequestProperty("charsert", "GBK");

//设定传送的内容类型是可序列化的java对象,如果不设置,可能在web服务器传送序列化对象时会抛出java.io.Exception异常

h_urlcon.setRequestProperty("content-Type","multipart/form-data;file="+filename);

//server接收时的参数名称为filename

h_urlcon.setRequestProperty("filename",filename);

//写到内存给url

OutputStream out = new DataOutputStream(h_urlcon.getOutputStream());

DataInputStream in = new DataInputStream(new FileInputStream(path));

int bytes = 0;

byte[] bufferOut = new byte[1024];

while ((bytes = in.read(bufferOut)) != -1) {

out.write(bufferOut, 0, bytes);

}

in.close();

out.flush();

out.close();

}

}

注:以上测试已经通过,可以依照情况进行修改后使用!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: