diff --git a/src/main/java/kcc/kccadr/textsense/service/TextSenseService.java b/src/main/java/kcc/kccadr/textsense/service/TextSenseService.java
index 4a1a85d0..80b162e4 100644
--- a/src/main/java/kcc/kccadr/textsense/service/TextSenseService.java
+++ b/src/main/java/kcc/kccadr/textsense/service/TextSenseService.java
@@ -16,10 +16,17 @@ public interface TextSenseService {
//TextSense OCR 상세내용 불러오기
public TextSenseVO selectTextSenseDetail(TextSenseVO textSenseVO) throws Exception;
+ //TextSense OCR 상세내용 불러오기 팝업
+ public TextSenseVO selectTextSenseDetailPop(TextSenseVO textSenseVO) throws Exception;
+
//TextSense Callback 데이터 내용 업데이트 해주기
public void updateTextSenseCallbackData(TextSenseVO textSenseVO) throws Exception;
//TextSense Status Update
public void updateTextSenseStatus(TextSenseVO textSenseVO) throws Exception;
+ public void updateTextSenseModify(TextSenseVO textSenseVO) throws Exception;
+
+ public void deleteTextSense(TextSenseVO textSenseVO) throws Exception;
+
}
\ No newline at end of file
diff --git a/src/main/java/kcc/kccadr/textsense/service/TextSenseVO.java b/src/main/java/kcc/kccadr/textsense/service/TextSenseVO.java
index 578ed6cf..a8c3a699 100644
--- a/src/main/java/kcc/kccadr/textsense/service/TextSenseVO.java
+++ b/src/main/java/kcc/kccadr/textsense/service/TextSenseVO.java
@@ -38,6 +38,16 @@ public class TextSenseVO extends ComDefaultVO implements Serializable{
private String frstRegisterId;
private String frstRegistPnttm;
+ private String fileContents;
+ private String fileContentsModify;
+
+ private String refresh;
+
+ private String fileName;
+
+ private String lastUpdusrId;
+ private String lastUpdtPnttm;
+
public String getApiUrl() {
return apiUrl;
@@ -117,7 +127,6 @@ public class TextSenseVO extends ComDefaultVO implements Serializable{
public void setStatus(String status) {
this.status = status;
}
-
public String getInputFileLength() {
return inputFileLength;
}
@@ -142,7 +151,6 @@ public class TextSenseVO extends ComDefaultVO implements Serializable{
public void setQueuedat(String queuedat) {
this.queuedat = queuedat;
}
-
public String getStartedat() {
return startedat;
}
@@ -197,5 +205,41 @@ public class TextSenseVO extends ComDefaultVO implements Serializable{
public void setFrstRegistPnttm(String frstRegistPnttm) {
this.frstRegistPnttm = frstRegistPnttm;
}
+ public String getFileContents() {
+ return fileContents;
+ }
+ public void setFileContents(String fileContents) {
+ this.fileContents = fileContents;
+ }
+ public String getFileContentsModify() {
+ return fileContentsModify;
+ }
+ public void setFileContentsModify(String fileContentsModify) {
+ this.fileContentsModify = fileContentsModify;
+ }
+ public String getRefresh() {
+ return refresh;
+ }
+ public void setRefresh(String refresh) {
+ this.refresh = refresh;
+ }
+ public String getFileName() {
+ return fileName;
+ }
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+ public String getLastUpdtPnttm() {
+ return lastUpdtPnttm;
+ }
+ public void setLastUpdtPnttm(String lastUpdtPnttm) {
+ this.lastUpdtPnttm = lastUpdtPnttm;
+ }
}
diff --git a/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseDAO.java b/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseDAO.java
index 66aa5da7..cf16b59b 100644
--- a/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseDAO.java
+++ b/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseDAO.java
@@ -74,6 +74,19 @@ public class TextSenseDAO extends EgovAbstractDAO{
return result;
}
+ public TextSenseVO selectTextSenseDetailPop(TextSenseVO textSenseVO) throws Exception{
+ TextSenseVO result = new TextSenseVO();
+
+ try {
+
+ result = (TextSenseVO) select("textSenseDAO.selectTextSenseDetailPop", textSenseVO);
+
+ } catch (Exception e) {
+ }
+
+ return result;
+ }
+
//TextSense Callback 데이터 내용 업데이트 해주기
public void updateTextSenseCallbackData(TextSenseVO textSenseVO) throws Exception{
@@ -98,4 +111,24 @@ public class TextSenseDAO extends EgovAbstractDAO{
}
}
+ public void updateTextSenseModify(TextSenseVO textSenseVO) throws Exception{
+ try {
+
+ update("textSenseDAO.updateTextSenseModify", textSenseVO);
+
+ } catch (Exception e) {
+ System.out.println("updateTextSenseModify Service DAO Error !!! " + e);
+ }
+ }
+
+ public void deleteTextSense(TextSenseVO textSenseVO) throws Exception{
+ try {
+
+ update("textSenseDAO.deleteTextSense", textSenseVO);
+
+ } catch (Exception e) {
+ System.out.println("deleteTextSense Service DAO Error !!! " + e);
+ }
+ }
+
}
diff --git a/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseServiceImpl.java b/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseServiceImpl.java
index 873f0116..40ef5d05 100644
--- a/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseServiceImpl.java
+++ b/src/main/java/kcc/kccadr/textsense/service/impl/TextSenseServiceImpl.java
@@ -84,6 +84,22 @@ public class TextSenseServiceImpl implements TextSenseService{
return result;
}
+ //TextSense OCR 상세내용 불러오기 팝업
+ @Override
+ public TextSenseVO selectTextSenseDetailPop(TextSenseVO textSenseVO) throws Exception{
+ TextSenseVO result = new TextSenseVO();
+
+ try {
+
+ result = textSenseDAO.selectTextSenseDetailPop(textSenseVO);
+
+ } catch (Exception e) {
+ System.out.println("selectTextSenseDetail Service Impl Error !!! " + e);
+ }
+
+ return result;
+ }
+
//TextSense Callback 데이터 내용 업데이트 해주기
@Override
public void updateTextSenseCallbackData(TextSenseVO textSenseVO) throws Exception{
@@ -112,4 +128,27 @@ public class TextSenseServiceImpl implements TextSenseService{
}
+ @Override
+ public void updateTextSenseModify(TextSenseVO textSenseVO) throws Exception{
+ try {
+
+ textSenseDAO.updateTextSenseModify(textSenseVO);
+
+ } catch (Exception e) {
+ System.out.println("updateTextSenseModify Service Impl Error !!! " + e);
+ }
+ }
+
+ @Override
+ public void deleteTextSense(TextSenseVO textSenseVO) throws Exception{
+ try {
+
+ textSenseDAO.deleteTextSense(textSenseVO);
+
+ } catch (Exception e) {
+ System.out.println("deleteTextSense Service Impl Error !!! " + e);
+ }
+ }
+
+
}
diff --git a/src/main/java/kcc/kccadr/textsense/web/TextSenseController.java b/src/main/java/kcc/kccadr/textsense/web/TextSenseController.java
index ece0382f..4a45c92f 100644
--- a/src/main/java/kcc/kccadr/textsense/web/TextSenseController.java
+++ b/src/main/java/kcc/kccadr/textsense/web/TextSenseController.java
@@ -26,6 +26,7 @@ import kcc.com.cmm.LoginVO;
import kcc.com.cmm.service.EgovFileMngService;
import kcc.com.cmm.service.EgovFileMngUtil;
import kcc.com.cmm.service.FileVO;
+import kcc.com.cmm.util.StringUtil;
import kcc.kccadr.textsense.service.TextSenseService;
import kcc.kccadr.textsense.service.TextSenseVO;
import kcc.let.utl.fcc.service.EgovStringUtil;
@@ -132,6 +133,33 @@ public class TextSenseController {
return "kccadr/textSense/EgovTextSenseDetail";
}
+ @RequestMapping(value="/kccadr/textsence/popup/modifyTextSenseResultPop.do")
+ public String modifyTextSenseResultPop(@ModelAttribute("searchVO")TextSenseVO textSenseVO, ModelMap model) throws Exception{
+
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ if(user == null) {
+
+ return "redirect:/uat/uia/EgovLoginUsr.do";
+
+ }
+
+ textSenseVO.setFrstRegisterId(user.getId());
+ TextSenseVO resultVO = textSenseService.selectTextSenseDetailPop(textSenseVO);
+
+ if(StringUtil.isEmpty(resultVO.getFileContentsModify())) {
+ resultVO.setFileContentsModify(resultVO.getFileContents());
+ }
+ if("Y".equals(textSenseVO.getRefresh())) {
+ resultVO.setFileContentsModify(resultVO.getFileContents());
+ }
+
+ model.addAttribute("textSenseVO", resultVO);
+
+ return "kccadr/textSense/pop/EgovTextSenseDetailPop";
+ }
+
+
/*
* TextSense OCR API 요청처리해주기
@@ -385,4 +413,66 @@ public class TextSenseController {
return modelAndView;
}
+ @SuppressWarnings("unused")
+ @RequestMapping(value="/kccadr/textsence/textSenseModifyAjax.do")
+ public ModelAndView textSenseModifyAjax(TextSenseVO textSenseVO) throws Exception{
+
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("jsonView");
+
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ textSenseVO.setLastUpdusrId(user.getId());
+
+ if(user == null) {
+ modelAndView.addObject("result", "FAIL");
+ modelAndView.addObject("message", "다시 로그인 해주세요.");
+ return modelAndView;
+
+ }
+ try {
+ textSenseService.updateTextSenseModify(textSenseVO);
+
+ modelAndView.addObject("result", "SUCCESS");
+ modelAndView.addObject("message", "저장되었습니다.");
+ } catch (Exception e) {
+ modelAndView.addObject("result", "FAIL");
+ modelAndView.addObject("message", "저장에 실패했습니다.");
+ }
+
+ return modelAndView;
+
+ }
+
+ @SuppressWarnings("unused")
+ @RequestMapping(value="/kccadr/textsence/textSenseDeleteAjax.do")
+ public ModelAndView textSenseDelete(TextSenseVO textSenseVO) throws Exception{
+
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("jsonView");
+
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ textSenseVO.setLastUpdusrId(user.getId());
+
+ if(user == null) {
+ modelAndView.addObject("result", "FAIL");
+ modelAndView.addObject("message", "다시 로그인 해주세요.");
+ return modelAndView;
+
+ }
+ try {
+ textSenseService.deleteTextSense(textSenseVO);
+
+ modelAndView.addObject("result", "SUCCESS");
+ modelAndView.addObject("message", "삭제되었습니다.");
+ } catch (Exception e) {
+ modelAndView.addObject("result", "FAIL");
+ modelAndView.addObject("message", "삭제에 실패했습니다.");
+ }
+
+ return modelAndView;
+
+ }
+
}
diff --git a/src/main/java/kcc/kccadr/xxx/service/XxxService.java b/src/main/java/kcc/kccadr/xxx/service/XxxService.java
index 8b9bcf68..aa4a3a2c 100644
--- a/src/main/java/kcc/kccadr/xxx/service/XxxService.java
+++ b/src/main/java/kcc/kccadr/xxx/service/XxxService.java
@@ -2,6 +2,8 @@ package kcc.kccadr.xxx.service;
import java.util.List;
+import kcc.kccadr.adjPgrMgr.cmm.service.PgrCmmVO;
+
/**
* XXX 관리를 위한 서비스 인터페이스 클래스
* @author 여현준
@@ -37,4 +39,10 @@ public interface XxxService {
// XXX 삭제 (update useYn='N'처리)
public void deleteXxx2(XxxVO xxxVO) throws Exception;
+
+ public void selectPgrCmm1() throws Exception;
+ public void selectPgrCmm2() throws Exception;
+ public void selectPgrCmm3() throws Exception;
+ public void selectPgrCmm4() throws Exception;
+ public void selectPgrCmm5() throws Exception;
}
diff --git a/src/main/java/kcc/kccadr/xxx/service/impl/XxxDAO.java b/src/main/java/kcc/kccadr/xxx/service/impl/XxxDAO.java
index ba6b3ed7..338723b7 100644
--- a/src/main/java/kcc/kccadr/xxx/service/impl/XxxDAO.java
+++ b/src/main/java/kcc/kccadr/xxx/service/impl/XxxDAO.java
@@ -5,6 +5,7 @@ import java.util.List;
import org.springframework.stereotype.Repository;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
+import kcc.kccadr.adjPgrMgr.cmm.service.PgrCmmVO;
import kcc.kccadr.xxx.service.XxxVO;
/**
@@ -56,4 +57,34 @@ public class XxxDAO extends EgovAbstractDAO {
public void deleteXxx2(XxxVO xxxVO) throws Exception {
update("XxxDAO.deleteXxx2", xxxVO);
}
+
+ public void selectPgrCmm1() throws Exception{
+
+ select("xxxDAO.selectPgrCmm1");
+
+ }
+
+ public void selectPgrCmm2() throws Exception{
+
+ select("xxxDAO.selectPgrCmm2");
+
+ }
+
+ public void selectPgrCmm3() throws Exception{
+
+ select("xxxDAO.selectPgrCmm3");
+
+ }
+
+ public void selectPgrCmm4() throws Exception{
+
+ select("xxxDAO.selectPgrCmm4");
+
+ }
+
+ public void selectPgrCmm5() throws Exception{
+
+ select("xxxDAO.selectPgrCmm5");
+
+ }
}
diff --git a/src/main/java/kcc/kccadr/xxx/service/impl/XxxServiceImpl.java b/src/main/java/kcc/kccadr/xxx/service/impl/XxxServiceImpl.java
index 1f10abc3..2db2a2d8 100644
--- a/src/main/java/kcc/kccadr/xxx/service/impl/XxxServiceImpl.java
+++ b/src/main/java/kcc/kccadr/xxx/service/impl/XxxServiceImpl.java
@@ -10,8 +10,11 @@ import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+import kcc.com.cmm.util.StringUtil;
+import kcc.kccadr.adjPgrMgr.cmm.service.PgrCmmVO;
import kcc.kccadr.xxx.service.XxxService;
import kcc.kccadr.xxx.service.XxxVO;
+import kcc.let.utl.fcc.service.EgovCryptoUtil;
/**
* 평가정보 관리를 위한 서비스 구현 클래스
@@ -35,8 +38,7 @@ public class XxxServiceImpl extends EgovAbstractServiceImpl implements XxxServi
// XXX DAO
@Resource(name = "XxxDAO")
private XxxDAO xxxDAO;
-
-
+
/**
* 고유ID 설정 추가
* - 설정파일경로 : /resources/egovframework/spring/com/context-idgen.xml
@@ -78,4 +80,20 @@ public class XxxServiceImpl extends EgovAbstractServiceImpl implements XxxServi
public void deleteXxx2(XxxVO xxxVO) throws Exception {
xxxDAO.deleteXxx2(xxxVO);
}
+
+ public void selectPgrCmm1() throws Exception{
+ xxxDAO.selectPgrCmm1();
+ }
+ public void selectPgrCmm2() throws Exception{
+ xxxDAO.selectPgrCmm2();
+ }
+ public void selectPgrCmm3() throws Exception{
+ xxxDAO.selectPgrCmm3();
+ }
+ public void selectPgrCmm4() throws Exception{
+ xxxDAO.selectPgrCmm4();
+ }
+ public void selectPgrCmm5() throws Exception{
+ xxxDAO.selectPgrCmm5();
+ }
}
diff --git a/src/main/java/kcc/kccadr/xxx/web/XxxController.java b/src/main/java/kcc/kccadr/xxx/web/XxxController.java
index bc1ae673..b14fa3af 100644
--- a/src/main/java/kcc/kccadr/xxx/web/XxxController.java
+++ b/src/main/java/kcc/kccadr/xxx/web/XxxController.java
@@ -1,8 +1,11 @@
package kcc.kccadr.xxx.web;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -22,7 +25,6 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import kcc.com.cmm.CmmUtil;
-import kcc.com.cmm.ComDefaultCodeVO;
import kcc.com.cmm.EgovMessageSource;
import kcc.com.cmm.LoginVO;
import kcc.com.cmm.service.EgovCmmUseService;
@@ -357,4 +359,114 @@ public class XxxController {
return "/kccadr/xxx/xxxLeaderMainPage";
}
+
+ @RequestMapping("/kccadr/xxx/DBSpeedTest1.do")
+ public String DBSpeedTest1() throws Exception {
+
+ String startDate = dateFormat();
+ //db 쿼리
+ xxxService.selectPgrCmm1();
+
+ String endDate = dateFormat();
+
+ sysOut(startDate, endDate);
+
+ return null;
+ }
+
+ @RequestMapping("/kccadr/xxx/DBSpeedTest2.do")
+ public String DBSpeedTest2() throws Exception {
+
+ String startDate = dateFormat();
+ //db 쿼리
+ xxxService.selectPgrCmm1();
+ xxxService.selectPgrCmm2();
+
+ String endDate = dateFormat();
+
+ sysOut(startDate, endDate);
+
+ return null;
+ }
+
+ @RequestMapping("/kccadr/xxx/DBSpeedTest3.do")
+ public String DBSpeedTest3() throws Exception {
+
+ String startDate = dateFormat();
+ //db 쿼리
+ xxxService.selectPgrCmm1();
+ xxxService.selectPgrCmm2();
+ xxxService.selectPgrCmm3();
+
+ String endDate = dateFormat();
+
+ sysOut(startDate, endDate);
+
+ return null;
+ }
+
+ @RequestMapping("/kccadr/xxx/DBSpeedTest4.do")
+ public String DBSpeedTest4() throws Exception {
+
+ String startDate = dateFormat();
+ //db 쿼리
+ xxxService.selectPgrCmm1();
+ xxxService.selectPgrCmm2();
+ xxxService.selectPgrCmm3();
+ xxxService.selectPgrCmm4();
+
+
+ String endDate = dateFormat();
+
+ sysOut(startDate, endDate);
+
+ return null;
+ }
+
+ @RequestMapping("/kccadr/xxx/DBSpeedTest5.do")
+ public String DBSpeedTest5() throws Exception {
+
+ String startDate = dateFormat();
+ //db 쿼리
+ xxxService.selectPgrCmm1();
+ xxxService.selectPgrCmm2();
+ xxxService.selectPgrCmm3();
+ xxxService.selectPgrCmm4();
+ xxxService.selectPgrCmm5();
+
+ String endDate = dateFormat();
+
+ sysOut(startDate, endDate);
+
+ return null;
+ }
+
+
+
+
+
+
+
+
+
+
+ private String dateFormat() {
+ Date date = new Date();
+ SimpleDateFormat fDate = new SimpleDateFormat("ss.SSS");
+ return fDate.format(date);
+ }
+
+ private void sysOut(String startDate, String endDate) {
+
+ String diff = String.valueOf((Float.valueOf(endDate) - Float.valueOf(startDate))).substring(0, 5);
+
+ System.out.println("==============================================DBSpeedTest===========================================");
+ System.out.println("====================================================================================================");
+ System.out.println("============================== start :: " + startDate + " end :: "+ endDate + " =============================");
+ System.out.println("============================= timediff :: "+ diff +" =============================");
+ System.out.println("====================================================================================================");
+ System.out.println("====================================================================================================");
+
+ }
+
}
diff --git a/src/main/resources/egovframework/sqlmap/kccadr/Xxx_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/kccadr/Xxx_SQL_Mysql.xml
index e65c3f3d..8d7e3ab5 100644
--- a/src/main/resources/egovframework/sqlmap/kccadr/Xxx_SQL_Mysql.xml
+++ b/src/main/resources/egovframework/sqlmap/kccadr/Xxx_SQL_Mysql.xml
@@ -73,5 +73,1626 @@
WHERE 1=1
AND BBS_ID = #bbsId#
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/egovframework/sqlmap/kccadr/textsense/TextSense_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/kccadr/textsense/TextSense_SQL_Mysql.xml
index 5a160ba6..08de282a 100644
--- a/src/main/resources/egovframework/sqlmap/kccadr/textsense/TextSense_SQL_Mysql.xml
+++ b/src/main/resources/egovframework/sqlmap/kccadr/textsense/TextSense_SQL_Mysql.xml
@@ -57,6 +57,7 @@
FROM ADR_TEXTSENSE_OCR A
WHERE 1=1
AND A.FRST_REGISTER_ID = #frstRegisterId#
+ AND A.USE_YN = 'Y'
TASK_NAME LIKE CONCAT('%' , #searchKeyword#, '%')
@@ -102,8 +103,11 @@
A.CALLBACK_URI AS callbackUri,
A.EXTERNAL_ID AS externalId,
A.FRST_REGISTER_ID AS frstRegisterId,
- DATE_FORMAT(A.FRST_REGIST_PNTTM,'%Y-%m-%d %T') AS frstRegistPnttm
+ DATE_FORMAT(A.FRST_REGIST_PNTTM,'%Y-%m-%d %T') AS frstRegistPnttm,
+ B.filecontents AS fileContents
FROM ADR_TEXTSENSE_OCR A
+ LEFT JOIN ADR_TEXTSENSE_OCR_TEXTDATA B
+ ON B.filename = LTRIM(A.OUTPUT_URI, 'file:/home/kcc_adr_ocr_dir/')
WHERE 1=1
AND A.FRST_REGISTER_ID = #frstRegisterId#
AND A.ID = #id#
@@ -140,4 +144,55 @@
+
+
+
+
+ UPDATE adr_textsense_ocr_textdata
+ SET filecontents_modify = #fileContentsModify#,
+ last_updusr_id = #lastUpdusrId#,
+ last_updt_pnttm = NOW()
+ WHERE filename = #fileName#
+
+
+
+
+
+ UPDATE adr_textsense_ocr
+ SET use_yn = 'N'
+ WHERE id = #id#
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/kccadr/textSense/EgovTextSenseDetail.jsp b/src/main/webapp/WEB-INF/jsp/kccadr/textSense/EgovTextSenseDetail.jsp
index f01e5df6..b8cbbf9d 100644
--- a/src/main/webapp/WEB-INF/jsp/kccadr/textSense/EgovTextSenseDetail.jsp
+++ b/src/main/webapp/WEB-INF/jsp/kccadr/textSense/EgovTextSenseDetail.jsp
@@ -19,6 +19,12 @@
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<%@ taglib prefix="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %>
<%@ taglib prefix="kc" uri="/WEB-INF/tlds/kcc_tld.tld"%>
+
+<% pageContext.setAttribute("CRLF", "\r\n"); %>
+<% pageContext.setAttribute("LF", "\n"); %>
+<% pageContext.setAttribute("TAB", "\t"); %>
+<% pageContext.setAttribute("SP", " "); %>
+
@@ -28,13 +34,48 @@
-
+
+
+