전자정부프레임워크 정리

crazyoung·2020년 8월 17일
0
post-thumbnail

2. 전자정부프레임워크 정리


spring:message 태그에 관해서

참조 https://m.blog.naver.com/PostView.nhn?blogId=hong699822&logNo=220795347288&proxyReferer=https:%2F%2Fwww.google.com%2F

전자정부프레임워크 설정 관련

http://localhost:8080/ 로 접근하는 방법 (주소에서 프로젝트 이름 빼기)

Servers 파일에서 톰캣 파일 아래에 있는 server.xml 에서 아랫줄에 있는

<Context docBase="eGovTest" path="eGovTest" reloadable="true" source="org.eclipse.jst.jee.server:eGovTest"/></Host>

코드에서 path="eGovTest" 경로를 공백으로, 즉 path=""로 바꿔주면 http://localhost:8080/ 으로 바로 페이지 호출 가능

참조 http://www.mins01.com/mh/tech/read/862?lm=list

사이트

메뉴얼

Mysql 설정관련

src/main/resources/globals.properties
#mysql
Globals.DriverClassName=net.sf.log4jdbc.DriverSpy
Globals.Url=jdbc:mysql://127.0.0.1:3306/egov?useUnicode=true&characterEncoding=UTF-8
#Globals.Url=jdbc:mysql://127.0.0.1:3306/egov
JDBC 연결 URI에서 인코딩 지정해주면 됨.
web.xml -> bean 설정 XML파일 설정 부분.

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>
</context-param>

classpath* : 모든 클래스 패스를 의미한다.
context-*.xml : "context-"로 시작하고 ".xml"로 끝나는 파일의 의미한다.
클래스 패스속 egovframework/spring/com/ 안에 context- 로 시작하는 모든 xml파일을 넣어두면 된다.
그러면 알아서 bean 들이 설정될 것이다.
이클립스에서는 /src/main/resources 속에 egovframework/spring/com/ 라는 폴더를 의미한다.
주의, 이클립스에서 해당 폴더를 Build Path에 넣어두어야 할 것이다.

설정 찾는법

xml 찾기

web.xml 속에서 관련 태그를 뒤져봐라.
<context-param> <servlet> (이 두곳에서만 설정된다.)
*로 설정되어있을 수도 있다.
스프링 디스패처 관련 xml 위치 : /src/main/webapp/WEB-INF/config/egovframework/springmvc
그외 스프링 xml위치 : /src/main/resources/egovframework/spring/com
server.xml
톰캣의 설정파일
이클립스에서 Run as -> Run on Server -> 서버 프로젝트 선택 -> 적용할 피로젝트를 add, remove ->
이렇게하면 자동으로 server.xml이 변경된다.

<Context docBase="com_test" path="/com_test" reloadable="true" source="org.eclipse.jst.j2ee.server:com_test"/>

이런 구문이 추가되어있을 것이다.
이 파일의 Context로 추가되어있어야 톰캣 동작시 보인다.
어노테이션
JAVA 5+ 지원, 스프링 프레임 워크 2.5 부터 지원
현재 2014-02-21 전자정부 표줌 프레임 쿼크는 스프링 F/W 버전이 3.0
Spring Annotation - @Required, @Autowired, @Qualifier, @Resource
Annotation-based Controller (@MVC) 스프링 어노테이션 기반 컨트롤러
스프링 프레임워크
버전 2.5 이상이서는 xml로 서블릿 설정등이 필요 없다. 어노테이션으로 설정하면 됨.
dispatcher-servlet.xml

<context:component-scan base-package="egovframework,temp.example">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

/src/main/resources/egovframework/spring/context-common.xml

<context:component-scan base-package="egovframework,temp.example">
       <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

base-package="egovframework,temp.example" 를 구분으로 기본으로 어노테이션으로 설정해서 읽어드릴 패키지를 설정한다.
안하면 새로만든 패키지가 동작 안할 것이다.
톰캣 재시작해야함.
context-common.xml 에서 추가 안할 경우 @Service, @Repository 등이 처리 안되더라.
그렇게 따지면 dispatcher-servlet.xml 에서 exclunde 를 빼버리는게 더 좋지 않나?(서블릿 전용이라서 뺀건가?)

관련에러
2014-02-25 14:40:05,014 WARN org.springframework.web.servlet.PageNotFound No mapping found for HTTP request with URI /testP01/test/list.do in DispatcherServlet with name 'action'
iBATIS
설정파일
/testProject/src/main/resources/egovframework/egovProps/globals.properties
context-datasource.xml , context-sqlMap.xml 에서 사용됨.
${Globals.DbType}와 같은 표현이 XML파일에서 가능하도록해서 사용함.
/testProject/src/main/resources/egovframework/spring/com/context-datasource.xml
DB소스 Bean 설정
/testProject/src/main/resources/egovframework/spring/com/context-sqlMap.xml
SQL-Map 설정

<property name="dataSource" ref="egov.dataSource"/>

로 DB소스 설정함.(context-datasource.xml 파일 참고)
/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-.xml
SQL-MAP 설정. 필수는 아니다. 밑에 적힌 sql-map-
.xml 파일을 리소스로 지정한다. (egov 에서는 DB별 처리 때문에 따로 해놓은 것이다.)
/testProject/src/main/resources/egovframework/sqlmap/com//sql-map-.xml
실제 사용 SQLMAP 설정 XML
쿼리 리턴값 (링크)
select() : resultMap
insert()
성공 : 자동증가 PK값, 또는 null
DB에 따라 XML부분 수정 필요
실패 : 에러발생
delete(), update()
성공 : 적용된 ROW수
실패 : 0
약어
VO : Value Object
Model, View 간의 데이터 전달용도, getter,setter 메소드 (설명링크)
DAO : Data Access Object
JSP와 DB사용의 중간 역활
저장, 검색 담당. view와 비지니스 분리
톰캣

GET방식에서 한글이 깨질 때

사용 JSP에서는

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

라고 적어주고.
server.xml 에서

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

추가 부분 URIEncoding="utf-8" (JSP의 pageEncoding에 맞춰 수정 필요)
모든 Connector 에 대해서 적어줘야할 듯

기본 클래스 동작 구조

@Controller
TempController
//컨트롤에서 불러 사용, 내부적으로 TempDAO 를 호출
@Service("tempService")
TempServiceImpl extends AbstractServiceImpl implements TempService
@Repository
TempDAO extends EgovAbstractDAO //실제 DB동작

TempVO implements Serializable //Value Object , DB 결과,검색 관련으로 사용

클래스 제작 순서

xml -> DAO -> Service -> ServiceImpl -> Controller

Controller 를 맨 처음에 껍데기로만 만들어도 상관은 없다.
하지만 DAO를 초반에 만들어 두는게 에러체크하기도 쉽고, JUnit 로 테스트하기에도 좋다.(나머지 클래스는 전부 그냥 가져다 쓰는 것 뿐이라서...)
순서가 다르면 계속 수정할 때 실동작없이 만들어져서 에러잡기 힘들더라...

log4j

protected final Log logger = LogFactory.getLog(getClass()); //로그객채 선언 사용법

logger.debug(resultVO);
logger.warn("테스트");
log4j.xml

패키기 기준으로 설정.

<logger name="temp.example" additivity="false">
	<level value="DEBUG" />
	<appender-ref ref="console" />
</logger>

기본 로그 설정

<root>
	<level value="OFF" />
	<appender-ref ref="console" />
</root>

JUnit4

명칭법 : 클래스명 뒤에 Test를 붙인다.
TempDAOTest 등으로
//DAO를 테스트할 때 사용한 클래스 어노테이션
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:egovframework/spring/context-.xml"}) //xml을 읽어서 BEAN 으로 처리해준다.
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = false) //뭔지 모르겠다.
@Transactional
//에러에서 XML위치를 못 잡는 경우가 있다. Ron Configurations 에서 Classpath부분을 손봐라. 에러에 맞춰서 보고, war등을 추가하니깐 되더라.
@Before
유닛테스트 전 초기화 처리
@Test
테스트로 자동으로 호출한다.
문제는 @Test가 여러개일 경우 순서이 힘들다.
Junit 버전에 따라서 방법이 조금씩 다름.
그래서 그냥
@Test는 하나 지정 후 안에서 다시 순서대로 테스트 메소드 호출하도록 하였음.
DAO CLASS 정도에서만 사용하면 될것 같다.
assertTrue() 메소드를 기본으로 assertNull, assertNotNull, assertEmpty 등을 사용하면 된다.
이 메소드에서 false처리가 되면 예외를 발생시키고 보여주게 된다.
에러 확인
Console 창에 동작 내용(DEBUG,INFO)과 함께 ERROR 등을 보여준다.
에러의 첫 문장에서 가장 끝 부분 부터 봐라.(JAVA의 에러는 가장 안쪽에서 위로 올라가면서 표현되기 때문에)
끝에있는 내용에 따라 조취를 취하면서 하나씩 제거해 나가면 된다.
error.jsp

<%@ page isErrorPage="true" import="java.io.*"%>
...
<c:set var="exception" value="${requestScope['javax.servlet.error.exception']}"/>
${exception}
<p>cause: ${exception.cause}  </p>
<p>Message: ${exception.message}  </p>
<!-- Stack trace -->
<jsp:scriptlet>
  exception.printStackTrace(new java.io.PrintWriter(out));
</jsp:scriptlet>

게시판 부분 분석
EgovBBSManagerController.java
----=------
@Autowired(required=false) <- 자동으로 객체 생성된다. (required=false 해당 클래스가 없거나, 두개가 있거나 해도 에러 발생시키지 않느다.)
private EgovBBSCommentService bbsCommentService; //bbsCommentService라는 객체는 EgovBBSManagerController에서 객체 만들 때 소스상에 new 부분이 없어도 만들어진다. (커플링(연결도)을 줄이위 위한거라네... 요즘 추세라네)
----=------
@RequestMapping("/cop/bbs/selectBoardList.do") <- 스프링의 어노테이션 표현, "/cop/bbs/selectBoardList.do"라는 URL요청에 대해서 아래 메소드를 실행한다.

    public String selectBoardArticles(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception {}

아규먼트로 넘어오는 BoardVO boardVO 나 ModelMap model 는 selectBoardArticles 메소드를 호출할 때 자동으로 생성되어 호출된다. (아마 스프링쪽에서 해주는 것 같음(상세 조사 필요)

.do 제거하기

https://m.blog.naver.com/PostView.nhn?blogId=bg_ellder&logNo=98758399&proxyReferer=https:%2F%2Fwww.google.com%2F

profile
메모장

0개의 댓글