STRUTS에서 리퀘스트를 통해 HttpURLconnection에서 쓴 흐름 대상을 가져오는 방법

최근 한 프로젝트에서 HttpURLconnection에서 흐름을 써야 하는데 STRUTS에서 Request를 통해 흐름 대상을 얻습니다. 그러나 어떻게 조작하든지 STRUTS의 Request에서 대응하는 흐름을 얻지 못해서 답답했습니다. 그 후에 관건을 찾았습니다. 흐름을 쓸 때 폼 제출 형식을 설정했기 때문에 STRUTS에서 흐름을 가져올 때 문제가 발생했습니다. struts는 콘텐츠-type이 지정되지 않은 Request 요청을 했습니다.Action에서 Request를 가져올 수 없도록 봉인할 때 처리되었습니다.getInputStream() 및 request.getReader().상세한 것은 코드의 예를 볼 수 있다.
1. sendPost 방법으로 로컬에서 흐름을 가져와 해당하는 URL 링크에 쓰기:
(중점):
//흐름을 전달할 때 반드시 추가해야 하는 매개 변수, 그리고 ACTION에서 Request를 통과한다.getInputStream에서 흐름을 가져오는 경우 이 인자conn.setRequestProperty("content-type", "text/html")를 추가해야 합니다.//직접 전달 흐름 대상
//다음은 form 구성 요소의 형식을 통해 흐름 대상을 전달하고 구체적으로 인터넷으로 확인한다. 
          conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+ java.util.UUID.randomUUID().toString()); 
	public static void main(String[] args) throws UnsupportedEncodingException {
		 
//		String url = "http://61.154.14.46:8080/exter.shtml?serviceType=1011";
		String url = "http://localhost:8080/webtest/servlet/URLTest?name=linlin";
//		String url = "http://localhost:8081/exter.shtml?serviceType=1022&menuId=4481&mobile=15806092760&text_data=linlinlin&imgName=testa.jpg";
//		getReturnData1(url);
		sendPost(url,null);
	} 
	 /**
     *  HTTP POST url
     * @param url
     * @throws IOException
     */
    public static void sendPost(String url,InputStream in) {
        
    	HttpURLConnection conn = null;
    	OutputStreamWriter osw = null;
        try {
        	File file = new File("D:/test2.jpg");
			if(!file.exists()) {
				try {
					file.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
            URL url1 = new URL(url);
            conn = (HttpURLConnection)url1.openConnection();
            conn.setReadTimeout(10000); //  
            conn.setDoInput(true);//  
            conn.setDoOutput(true);//  
            conn.setUseCaches(false); //  
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Charsert", "UTF-8"); 
            //conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + java.util.UUID.randomUUID().toString());
            // , , ACTION request.getInputStream 
            conn.setRequestProperty("content-type", "text/html"); 
            OutputStream o = conn.getOutputStream();
    		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
    		int BUFFER_SIZE = 1024; 
    		byte[] buf = new byte[BUFFER_SIZE];    
    		int size = 0;    
    	    try {
    			while ((size = bis.read(buf)) != -1)     
    			    o.write(buf, 0, size);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}    
    		finally {
    			try {
    				bis.close();
    				o.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		} 
            
            if (conn.getResponseCode() != HttpURLConnection.HTTP_OK)
                System.out.println( "connect failed!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally
        {
            if (osw != null)
                try {
                    osw.close() ;
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            
            if (conn != null)
                conn.disconnect() ;
        }
    }

2. 위와 같은 방법으로 흐름을 쓸 때 servlet이나 action에서 대응하는 흐름 정보를 얻을 수 있습니다. 코드는 다음과 같습니다.
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		String s = request.getParameter("name");
		System.out.println("s22 is " + s);
		
		InputStream in = request.getInputStream();
		if(in != null) {
			System.out.println(" 。");
			this.writeInputStreamToFile(in);
			 System.out.println("server time is " + new Date());
		} else {
			System.out.println(" 。");
		}
		
		
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the POST method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}
	private void writeInputStreamToFile(InputStream in) throws FileNotFoundException {
		
		File file = new File("D:/test3.jpg");
		if(!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
        FileOutputStream fos = new FileOutputStream(file);
		BufferedInputStream bis = new BufferedInputStream(in);
		int BUFFER_SIZE = 1024; 
		byte[] buf = new byte[BUFFER_SIZE];    
		int size = 0;    
	    try {
			while ((size = bis.read(buf)) != -1)     
			    fos.write(buf, 0, size);
		} catch (IOException e) {
			e.printStackTrace();
		}    
		finally {
			try {
				bis.close();
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} 
		
	}

좋은 웹페이지 즐겨찾기