HttpServletRequest, HttpServletResponse에 대한 이해

HanSamDul·2023년 6월 29일
0

  1. WAS(서버)가 웹 브라우져(클라이언트)로부터 Servlet요청을 받으면
  2. 요청을 받을 때 전달 받은 정보를 HttpServletRequest객체를 (서버에서) 생성하여 저장 요청정보에 있는 패스로 매핑된 서블릿에게 전달 (전달받은 내용들을 파라미터로 Get과 Post 형식으로 클라이언트에게 전달)
  3. 웹브라우져에게 응답을 돌려줄 HttpServletResponse객체를 생성(빈 객체)
  4. 생성된 HttpServletRequest(정보가 저장된)와 HttpServletResponse(비어 있는)를 Servlet에게 전달

HttpServletRequest

  • 웹브라우저 사용자인 클라이언트로부터 서버로 요청이 들어오면 서버에서는 HttpServletRequest를 생성하며, 요청정보에 있는 패스로 매핑된 서블릿에게 전달
  • Http프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용
  • Header정보, Parameter, Cookie, URI, URL 등의 정보를 읽어들이는 메소드를 가진 클래스
  • Body의 Stream을 읽어들이는 메소드를 가지고 있다.
  • 값을 받아올 수가 있다. model(View,jsp)에서 입력한 회원 정보를 컨트롤러로 보냈을 때 HttpServletRequest 객체 안에 모든 데이터들이 들어가게 된다. (getParameter()를 이용,반환타입은 String)

HttpServletResponse

  • Servlet은 HttpServletResponse객체에 Content Type, 응답코드, 응답 메시지등을 담아서 전송함
/**
* 로그인 처리 
*/
@RequestMapping("/checkLogin")
public void checkLogin(HttpServletRequest request, ModelMap model, HttpSession session) throws Exception{
		EgovMap param = DataSet.getRequestParam(request);
		System.out.println("checkLogin");
		
		EgovMap result = commonService.checkLogin(param, request, session);
		
		System.out.println("checkLogin - result");
		
		model.addAttribute("result", result.get("result"));
		model.addAttribute("passwordNoti", result.get("passwordNoti"));
	}

웹브라우저 사용자인 클라이언트로부터 서버로 요청이 들어오면

서버에서는 HttpServletRequest를 생성하며, 요청정보에 있는 패스로 매핑된 서블릿에게 전달합니다.

Excel 다운로드

	@Override
	public void execExcelDownload(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		String lang = SessionUtil.getLangcode();
		JSONObject param = DevUtil.getJsonFromRequestParameter(request);
		param.put("LANG", lang);
		
		List<JSONObject> list = mapper.selectBomTreeExcelList(param);
		
		String cells[] = {"MAT_TYPE_NM","PART_NO","PART_NM","ATTR4","ATTR1_NM","ATTR2_NM","ATTR5_NM","ATTR6_NM","PART_NO_GRP","ATTR7_NM","ATTR8_NM"
						 ,"KIND_CD","ATTR9_NM","ATTR10_NM","ATTR11_NM","ATTR12_NM","ATTR13_NM","ATTR14_NM","ATTR15_NM","ATTR16_NM","ATTR17_NM"
						 ,"ATTR18_NM","ATTR19_NM","ATTR20_NM","ATTR21_NM","ATTR22_NM","ATTR27_NM","ATTR23_NM","ATTR24_NM","ATTR25_NM","ATTR26_NM"};
		
		String filePath = "xlsx/SLB_BOM_DOWNLOAD.xlsx";
		ClassPathResource resource = new ClassPathResource(filePath);
		File file = resource.getFile();
		FileInputStream fis = new FileInputStream(file);
		
		@SuppressWarnings("resource")
		Workbook workbook = new XSSFWorkbook(fis);
		XSSFSheet dataSheet = (XSSFSheet) workbook.getSheetAt(0);	// 0번 시트 읽음
		CellStyle style = workbook.createCellStyle();				// 테이블 타이틀 스타일
		style.setBorderTop(BorderStyle.THIN);						// 테두리 위쪽
		style.setBorderBottom(BorderStyle.THIN);					// 테두리 아래쪽
		style.setBorderLeft(BorderStyle.THIN);						// 테두리 왼쪽
		style.setBorderRight(BorderStyle.THIN);						// 테두리 오른쪽
		
		for(int i=0; i<list.size(); i++) {
			JSONObject item = list.get(i);
			XSSFRow row = dataSheet.getRow(i+3);					// 행 (1,2,3,4..)으로 i번 부터 시작 (getCell은 엑셀 위의 알파벳, 열(A,B,C,D..)로 똑같이 i번 부터 시작한다.)
			if(row == null) row = dataSheet.createRow(i+3);
			for(int j=0; j<cells.length; j++) {
				XSSFCell cell = row.createCell(j);
				cell.setCellStyle(style);
				String value = item.optString(cells[j]);
				if(value != null) {
					cell.setCellValue(value);
				}
			}

		}

		String filename = param.optString("END_PART_NO")+".xlsx";
		filename = URLEncoder.encode(filename,"UTF-8").replace("+", "%20");
		response.setContentType("application/octer-stream");
        response.setHeader("Content-Transfer-Encoding", "binary;");
        response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
                
        OutputStream os = response.getOutputStream();
        workbook.write(os);
        
        fis.close();
        os.close();
	}

0개의 댓글

Powered by GraphCDN, the GraphQL CDN