`
log_cd
  • 浏览: 1098410 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

嵌入式运行HttpServer

阅读更多
一、嵌入式运行Jetty并提供上传文件功能
1、定义处理请求的Handler
public class DispatchRequestHandler extends AbstractHandler {

	public void handle(String target, Request baseRequest,
			HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		response.setHeader("Cache-Control", "no-cache");
		response.setStatus(HttpServletResponse.SC_OK);
		baseRequest.setHandled(true);
		if(target.contains("/upload")){//process file upload
			processUploadFileRequest(request, response);
		}else{//other request
			response.getWriter().println("<h1>Hello World</h1>");
			response.getWriter().println("<li>Request url: " + target + "</li>");
			response.getWriter().println("<li>Server port: " + request.getServerPort() + "</li>");
		}
	}

	private void processUploadFileRequest(HttpServletRequest request, HttpServletResponse response){
		try{
			String uploadPath = "D:/upload";
			File uploadFolder = new File(uploadPath);
			if(!uploadFolder.exists()){
				uploadFolder.mkdirs();
			}
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);
			if(!isMultipart){
				throw new Exception("not file upload request!");
			}
			DiskFileItemFactory factory = new DiskFileItemFactory();
			//factory.setSizeThreshold(4094);
			//factory.setRepository(new File("D:/temp/buffer"));
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setSizeMax(10*1024*1024);
			
			FileItemIterator iter = upload.getItemIterator(request);
			while (iter.hasNext()) {
				FileItemStream item = iter.next();
				String name = item.getFieldName();
				InputStream stream = item.openStream();
				if (item.isFormField()) {
					System.out.println("Form field " + name + " with value " + Streams.asString(stream) + " detected.");
				} else {
					System.out.println("File field " + name + " with file name " + item.getName() + " detected.");
					File savedFile = new File(uploadPath, item.getName());
					FileOutputStream fos = new FileOutputStream(savedFile);
					byte[] buff = new byte[1024];
					int len = 0;
					while((len = stream.read(buff)) > 0){
						fos.write(buff, 0, len);
					}
					fos.close();
				}
			}	
			/*
			List<FileItem> items = upload.parseRequest(request);
			Iterator<FileItem> it = items.iterator();
			while(it.hasNext()){
				FileItem item = (FileItem)it.next();
				if(item.isFormField()){
					System.out.print(item.getFieldName()+"="+item.getString());
				}else{
					String fileName = item.getName();
					//item.getInputStream();
					System.out.println(fileName);
					if(fileName != null){
						File savedFile = new File(uploadPath, fileName);
						item.write(savedFile);	
					}
				}
			}
			*/
			response.getWriter().println("1");//success
		}catch(Exception e){
			e.printStackTrace();
			try{
				response.getWriter().println("0");//fail
			}catch(Exception ex){}
		}
	}
	
}

2、嵌入式运行Jetty
public class MainEntrance {

	public static void main(String[] args){
		Server server = new Server();//jetty server
		SelectChannelConnector connector_1 = new SelectChannelConnector();
		connector_1.setPort(8088);
		SelectChannelConnector connector_2 = new SelectChannelConnector();
		connector_2.setPort(8089);		
		server.setConnectors(new Connector[]{connector_1,connector_2});
		server.setHandler(new DispatchRequestHandler());
		
		try {
			server.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

3、用HttpClient上传文件进行测试
public class TestUpload {

	public static void main(String[] args) {
		String targetURL = "http://127.0.0.1:8088/upload";
		File uploadFile = new File("D:/test/IMG_5352.JPG");
		HttpClient httpClient = new DefaultHttpClient();//apache httpClient
		HttpPost httpPost = new HttpPost(targetURL);
		
		try {
			FileBody fileBody = new FileBody(uploadFile);
			StringBody comment = new StringBody("测试上传文件",Charset.forName("UTF-8"));
	
			MultipartEntity multipartEntity = new MultipartEntity();
			multipartEntity.addPart("upload", fileBody);
			multipartEntity.addPart("comment", comment);
			httpPost.setEntity(multipartEntity);
			
			HttpResponse response = httpClient.execute(httpPost);
			int statusCode = response.getStatusLine().getStatusCode();
			if(statusCode == HttpStatus.SC_OK){ 
				HttpEntity resEntity = response.getEntity();   
				System.out.println(EntityUtils.toString(resEntity));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				httpClient.getConnectionManager().shutdown();
			} catch (Exception ignore) {

			}
		}

	}

}

二、JDK6自带的HttpServer
1.Server端
public class JDK6HTTPServer {

	public static void run(){
		try{
			HttpServerProvider provider = HttpServerProvider.provider(); 
			HttpServer httpServer = provider.createHttpServer(new InetSocketAddress(80),100);//concurrent request 100
			httpServer.createContext("/", new JDK6HTTPServer().new JDK6HTTPServerHandler());
			httpServer.setExecutor(null);//creates a default executor
			httpServer.start();
			System.out.println("JDK6HTTPServer started...");
		}catch(Exception e){
			
		}
	}
	
	public class JDK6HTTPServerHandler implements HttpHandler{
		public void handle(HttpExchange httpExchange) throws IOException {
			//System.out.println(httpExchange.getRequestURI());
			InputStream inputStrean = httpExchange.getRequestBody();
			BufferedReader reader = new BufferedReader(new InputStreamReader(inputStrean)); 
			String temp = null;  
            while((temp = reader.readLine()) != null){
                System.out.println("client request:"+temp);  
            }
			
			StringBuffer buff = new StringBuffer();
			buff.append("<h1>Hello World</h1>");
			httpExchange.sendResponseHeaders(200, buff.toString().getBytes().length);
			OutputStream outputStream = httpExchange.getResponseBody();    
			outputStream.write(buff.toString().getBytes());    
			outputStream.close();			
		}
	}
	
	public static void main(String[] args){
		run();
	}
	
}

2.client端测试
public class TestJDK6HTTPServer {

	public static void requestServer(){
		try{
	        URL url = new URL("http://127.0.0.1");  
	        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
	        urlConn.setDoOutput(true);  
	        urlConn.setDoInput(true);  
	        urlConn.setRequestMethod("POST");  
	       
	        String msg = "测试内容";  
	        OutputStream out = urlConn.getOutputStream();  
	        out.write(msg.getBytes());  
	        out.flush();  
	        if(urlConn.getContentLength() != -1 && urlConn.getResponseCode() == 200) {  
                InputStream in = urlConn.getInputStream();  
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));  
                String temp = "";  
                while ((temp = reader.readLine()) != null) {  
                    System.err.println("server response:" + temp);
                }  
                reader.close();  
                in.close();  
                urlConn.disconnect();  
	        }  
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args){
		ExecutorService exec = Executors.newCachedThreadPool();
		for (int i = 0; i < 20; i++) {  
            Runnable run = new Runnable() {  
                public void run() {  
                	requestServer();  
                }  
            };  
            exec.execute(run);  
        }  
        exec.shutdown();
	}
	
}
分享到:
评论

相关推荐

    jetty嵌入式Httpserver

    最后,`httpserver-test`这个文件可能是测试用例或示例代码,包含了一些使用Jetty实现HTTP服务器的实例,你可以通过查看这个文件来进一步学习和理解Jetty的使用方法。记住,实践是最好的老师,动手编写和运行代码将...

    搭建Web服务的嵌入式Web Server

    - 传统上,嵌入式Web Server是直接运行在嵌入式设备内部的,目的是为了发送简单的网页和处理CGI等基本网络请求。 - 随着Web技术的发展,传统的嵌入式Web Server已不能满足更多高级功能的需求,比如表单更新、实时...

    基于嵌入式设备Web Server的设计与实现毕业论文.docx

    本文从嵌入式系统和Web Server的基本原理出发,通过对HTTP请求的分析和SOCKET技术的应用,实现了在Arm开发板上可以运行的Web Server应用实例系统。 嵌入式系统 嵌入式系统是指专门为特定应用设计的计算机系统,...

    嵌入式Web Server Boa源码及相关资料

    Boa的源码简单、易于理解,适合在内存和处理能力受限的硬件上运行,比如微控制器或者嵌入式Linux系统。它支持基本的HTTP协议,包括静态网页服务和CGI(Common Gateway Interface)应用程序,使开发者可以创建动态...

    基于Stm32的嵌入式WebServer例程

    嵌入式Web服务器是一个能够在嵌入式设备(如STM32微控制器)上运行的HTTP服务器,它接收来自客户端(通常是Web浏览器)的HTTP请求,并返回相应的HTTP响应,如HTML页面、图片或其他资源。这种服务器的核心是网络协议...

    嵌入式webServer初步学习总结报告

    通常,当用户通过Web浏览器发送HTTP请求时,嵌入式WebServer会接收这个请求,解析其内容,然后执行相应的处理,如访问数据库、控制硬件设备或生成动态响应。处理完成后,WebServer将结果封装成HTTP响应返回给客户端...

    STM32F407 LAN8720A 嵌入式WebServer实现简单的登录注册功能

    Ethernet_httpserver - 副本 - 副本这个压缩包中的源代码到STM32F4xx开发板,我们可以运行这个嵌入式Web服务器,并通过计算机或路由器访问其IP地址,观察登录注册功能是否正常工作。 总之,STM32F407与LAN8720A...

    基于嵌入式Web+Server的远程监控系统的研究与实现.pdf

    嵌入式操作系统如VxWorks、μC/OS、Linux等,它们被设计来运行在特定硬件上,具有较小的内存占用和高效稳定的性能。嵌入式Web服务器能响应HTTP请求,并将监控的实时数据转换为Web页面。 嵌入式Web+Server远程监控...

    构造一个嵌入式Web Server

    这些操作系统能够高效地运行在微控制器上,同时提供必要的网络堆栈支持。 网络堆栈是构建Web服务器的关键组件。TCP/IP协议族负责设备间的通信,包括HTTP协议,它是Web服务器与客户端交互的基础。我们可以使用开源的...

    mongoose 嵌入式WEB server

    2. **多平台支持**: `mongoose`不仅能在常见的Linux、Windows等操作系统上运行,还支持各种嵌入式操作系统,如FreeRTOS、uCLinux等。 3. **易于集成**: `mongoose`以库的形式提供,可以通过简单的API接口将其嵌入到...

    基于Linux的嵌入式安全Web Server的实现.pdf

    【基于Linux的嵌入式安全Web Server的实现】 嵌入式Web服务器是一种在有限资源的设备上运行的轻量级Web服务器,它允许设备通过Internet进行远程管理和监控。本文主要探讨了如何在Linux操作系统上实现一个针对嵌入式...

    嵌入式WebServer技术及其实现.doc

    2. **EMIT技术**:通过高性能处理器(如桌面计算机或嵌入式处理器)作为网关,运行TCP/IP协议和效劳程序。嵌入式设备通过轻量级总线与网关连接,使用简单协议如emNet进行通信。 3. **MCU直接实现**:选择具有足够...

    轻量级C++实现的httpserver和httpclient

    本项目聚焦于轻量级的C++实现的HTTP服务器(httpserver)和HTTP客户端(httpclient),利用mongoose库作为基础,为开发者提供了一种简单且高效的方法来添加HTTP功能,而无需依赖如libcurl这样的大型库。 HTTP(超...

    http server http server

    标题中的“http server http server”和描述中的“http server phphttp server phphttp server php”都指向了HTTP服务器和PHP在Web服务中的应用。HTTP服务器是互联网上用于处理客户端HTTP请求的应用程序,而PHP是一...

    http.rar_embedded webserver_http webserver_webserver http_嵌入式win

    标题中的"http.rar_embedded webserver_http webserver_webserver http_嵌入式win" 提示我们,这个压缩包可能包含了一个用于在嵌入式系统中运行的HTTP Web服务器的相关资源,尤其是针对Windows系统的嵌入式环境。...

    著名的linux嵌入式系统的WebServer源代码,支持ASP脚本

    标题提到的“著名的Linux嵌入式系统的WebServer源代码”通常指的是一个轻量级且高效的服务软件,它能够处理HTTP请求,支持ASP(Active Server Pages)脚本,这使得开发者可以编写动态网页应用。 ASP是一种微软开发...

    c++mongoose 实现httpserver,httpclient

    在`HttpServerRun.h`和`httpserver2.vcxproj`中,我们可能看到HTTP服务器的实现。HTTP服务器的主要任务是接收来自客户端的HTTP请求,解析这些请求,并返回相应的HTTP响应。在mongoose中,通过创建一个服务器实例,...

    基于嵌入式Web Server的远程数据采集系统的网络实现.pdf

    - **Web Server构架**:Web Server运行在嵌入式设备上,响应来自互联网的浏览器请求,返回编码数据或数据流。这种架构允许远程设备通过HTTP协议进行数据交换。 **3. 主要配置** - **Web Server选择**:常见的...

    基于Hi3510处理器和Linux的嵌入式WebServer的研究和实现

    ### 基于Hi3510处理器和Linux的嵌入式WebServer的研究和实现 #### 一、引言 随着互联网技术的迅速发展及其在各行各业的广泛应用,越来越多的信息化产品需要具备接入互联网的能力,并可通过Web页面进行远程访问与...

Global site tag (gtag.js) - Google Analytics