- WAS(서버)가 웹 브라우져(클라이언트)로부터 Servlet요청을 받으면
- 요청을 받을 때 전달 받은 정보를 HttpServletRequest객체를 (서버에서) 생성하여 저장 요청정보에 있는 패스로 매핑된 서블릿에게 전달 (전달받은 내용들을 파라미터로 Get과 Post 형식으로 클라이언트에게 전달)
- 웹브라우져에게 응답을 돌려줄 HttpServletResponse객체를 생성(빈 객체)
- 생성된 HttpServletRequest(정보가 저장된)와 HttpServletResponse(비어 있는)를 Servlet에게 전달
/**
* 로그인 처리
*/
@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를 생성하며, 요청정보에 있는 패스로 매핑된 서블릿에게 전달합니다.
@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();
}