들어가며

기존에 eclipse 에서 tomcat 프로그래밍을 하려면 톰켓을 받아서 설치해야 했었다. maven 에서는 어떻게 하는지 확인해 보도록 하자.

 

프로젝트 만들기

이번 프로젝트는 웹 어플리케이션 이기 때문에 배포형태를 war 로 한다.

 

 

 

디렉토리 구조

웹 어플리케이션 형태는 위와 같이 webapp 디렉토리가 추가된 것이 보일 것이다. 여기에 웹 파일들을 위치시키면 된다.

 

 

TOMCAT 플러그인 설치

이제 웹 어플리 케이션을 테스트 하기 위해서 tomcat 플러그인을 설치해야 한다. tomcat 플러그인은 이름에서도 알 수 있듯이 maven 웹 어플리케이션을 편리하게 tomcat 으로 테스트 해 볼 수 있게 해 주는 플러그인이다. 

 

설치하기 위해서는 아래와 같이 pom.xml 파일을 열어서 plugins 탭에 Add Plugin 아이콘을 클릭한다.

 

아래와 같은 검색화면이 나오는데 tomcat 으로 검색해서 추가하자.

 

 

HELLO 실행하기

일단 아래와 같은 index.jsp 파일을 webapp 디렉토리에 추가하자.

 

- main/webapp/index.jsp

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

 

 

이제 위에서 받은 톰켓 플러그인을 실행해 주면 되는데 그 방법은 [Run As]-[maven build…] 를 클릭 한다음 아래와 같이 Goals 에다가 tomcat:run 이라고 입력하고 Run 을 누르면 된다.

 

그러면 Console 창에 메시지가 뜨면서 실행을 하게 되는데 만약 톰켓이 없다면 자동으로 로컬 레포지토리에 받아지게 된다. 다 받아진 후에 아래 메시지가 뜨면서 실행된다.

[INFO] [tomcat:run {execution: default-cli}]
[INFO] Running war on http://localhost:8080/simplewebapp
[INFO] Creating Tomcat server configuration at D:\cranix\work\workspace-wtp2\simplewebapp\target\tomcat
2009. 8. 17 오후 10:15:47 org.apache.catalina.startup.Embedded start
정보: Starting tomcat server
2009. 8. 17 오후 10:15:48 org.apache.catalina.core.StandardEngine start
정보: Starting Servlet Engine: Apache Tomcat/6.0.16
2009. 8. 17 오후 10:15:48 org.apache.coyote.http11.Http11Protocol init
정보: Initializing Coyote HTTP/1.1 on http-8080
2009. 8. 17 오후 10:15:48 org.apache.coyote.http11.Http11Protocol start
정보: Starting Coyote HTTP/1.1 on http-8080

 

이제 위에서 나온 주소로 접속해 보면 아래와 같이 제대로 뜨는 것을 확인 할 수 있다.

 

 

마치며

maven 은 tomcat 조차도 플러그인 형태로 취급한다. 이렇게 함으로서 작업환경을 특정 플랫폼에 종속시키지 않을 수 있을 것이다.

신고
by cranix 2009.08.17 22:24

예전에 만들었던 AJAX 채팅방 업그레이드판 입니다.

jsp 기반으로 되어있으며 DB 는 필요없습니다.

테스트 주소 : http://apps.cranix.net/CranixChatForAJAX

아래 소스는 이클립스 프로젝트를 그대로 export 한것입니다.

- 기본채팅
- 공개/비밀 방 생성
- FireFox 지원
- 오목(IE 전용)


신고
by cranix 2008.02.20 21:07

spring 이나 struts 같은 프레임웍은 jsp 의 처리를 컨트롤러에 위임하게 된다.

그래서 *.do 같은 형태의 url 로 접근 하도록 만들어 놓은건데.

좀 똑똑한 사용자가 jsp 파일의 경로를 알아서 컨트롤러를 거치지 않고

바로 jsp 에 접근하는게 가능하다.

이것을 막기위해 web.xml 에다가 아래 코드를 추가하면 된다.

[code]<security-constraint>
  <display-name>JSP Protection</display-name>
  <web-resource-collection>
   <web-resource-name>SecureJSPPages</web-resource-name>
   <url-pattern>*.jsp</url-pattern>
  </web-resource-collection>
  <auth-constraint>
   <role-name>nobody</role-name>
  </auth-constraint>
 </security-constraint>
 
 <security-role>
  <description>
  Nobody should be in this role so JSP files are protected
  from direct access.
  </description>
  <role-name>nobody</role-name>
 </security-role>[/code]

신고

' > Jsp' 카테고리의 다른 글

jsp 직접실행 막기  (53) 2007.12.12
JSP 페이지를 열때마다 자동으로 캐시 지우기  (42) 2007.03.18
TOMCAT5.5 + MYSQL5.0 + JNDI 설정하기  (44) 2006.12.16
스트러츠 2.0  (92) 2006.12.16
by cranix 2007.12.12 10:56

bean 이란 무엇일까?

bean 은 jsp 프로그래밍에서 데이터를 담는 그릇 이라고 보면된다.

흔히 이것은 데이터베이스 테이블에 하나의 row 를 담는 용도로 쓴다.

그런데 여기서 문제는 그 프로그램이 간단할때는 상관없다.

점점 복잡해 지면 질수록 이 bean 을 뜯어 고치는일이 정말 귀찮은 일이라는 것이다.

솔직히 완벽한 기획이라는것은 없다고 본다.

기획을 해놓고 고치고, 고치고, 고치면서 프로그램이 완성되어 나가는것이지 처음부터 완벽할순 없다.

여기서 고치고,고치고, 고치는 과정에서 bean 까지 고쳐야 하는 상황이 빈번하다.

bean 을 고치게되면 그것을 쓰게되는 상위 계층의 모든 프로그램을 약간씩 수정해 줘야한다.

예를들어 어떤 테이블에 필드가 하나 추가되었다고 하자.

이 상황을 어떻게 반영시킬 것인가?

예를들면..

일단 그 테이블에 해당하는 bean의 set 과 get 을 추가한다.

bean 을 쓰는 상위계층(예를들면 dao 같은... )에서 추가된 set 과 get 을 적용할수 있도록 약간씩 수정해준다.

마지막으로 출력부에서 get 을 이용하여 출력하는부분을 손봐준다.

이건 간단한 프로그램을 예로든거지만 복잡하면 할수록 더욱 계층화 되어있을수도 있다.

이거 무지하게 귀찮은 작업이 아닐수가 없다.

이런 귀차니즘을 해결하기위해 서는 고정적인 bean 말고 가변적인 collection 객체를 사용하는게 낳을꺼 같다.

필드가 변경되면 알아서 갱신되도록 만든다면 저런 귀찮은작업 없이 쉽게 할수있지 않을까?

신고

'자유글' 카테고리의 다른 글

메리대구 공방전 중에서..  (20) 2007.07.14
우리 포도밭 guard 를 소개합니다.  (750) 2007.07.06
bean 에의한 귀차니즘  (720) 2007.07.03
웹2.0 과 framework  (42) 2007.07.02
PDA 수리 사이트  (46) 2007.06.09
천상고원  (42) 2007.05.25
by cranix 2007.07.03 00:21

Spring 의 bean 부분의 예외를 처리했다고 해도.

기본적으로 jsp 페이지 내에서 발생하는 예외는 spring 만으론 잡을수 없다.

그래서 아래와같은 방법을 썻다.

- web.xml

[code] <error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/WEB-INF/jsp/error.jsp</location>
 </error-page>[/code]

- 위와같이 error.jsp 파일을 지정한다.

- error.jsp

[code]<%@page contentType="text/html;chraset=utf-8" isErrorPage="true"%>
<%=exception%>[/code]

- 여기서 중요한건 isErrorPage 속성을 true 로 했다는것이다.
- 이렇게 하면 request  에 "javax.servlet.error.exception"  라는 attribute 가 들어있으면 위와같이 그냥 exception 변수를 쓸수있게 된다.


- BaseExceptionResolver.java

[code]package dic.resolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

public class BaseExceptionResolver implements HandlerExceptionResolver {

 private String view = null;
 public void setView(String view) {
  this.view = view;
 }
 
 public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj, Exception exception) {
  exception.printStackTrace();
  request.setAttribute("javax.servlet.error.exception",exception);
  return new ModelAndView(view);
 }

}[/code]

- 위 파일은 예전에 bean 예외를 잡기위해 만들었던 파일인데 저기다가 위와같이 request 에 javax.servlet.error.exception 예외를 추가하면 jsp 의 errorpage 를 그대로 사용할수 있다.


자 이것으로 class 와 page 에서 나는 모든 에러를 한 페이지에서 잡을수 있게 되었다.

신고
by cranix 2007.05.30 11:38

AJAX 로 채팅방을 만드는데 어떤 컴퓨터는 되고 또 어디서는 안되고..

이런 현상이 있었다.

찾아보니 브라우저에 "페이지를 열때마다" 가 체크가 되어있으면 되고 안되어있으면 안되었다.

아마도 브라우저가 캐시하는 데이터때문에 그랬던거 같다.

그래서 jsp 페이지에서 자체적으로 열때마다 캐시를 지우는 헤더를 삽입해주었다.

아래는 그 소스다.


<jsp>

<%
 response.setHeader("Cache-Control","no-cache");
 response.setHeader("Pragma","no-cache");
 response.setDateHeader("Expires",0);
%>


<php>

<? php
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");  

header ("Expires: 0");
?>




신고

' > Jsp' 카테고리의 다른 글

jsp 직접실행 막기  (53) 2007.12.12
JSP 페이지를 열때마다 자동으로 캐시 지우기  (42) 2007.03.18
TOMCAT5.5 + MYSQL5.0 + JNDI 설정하기  (44) 2006.12.16
스트러츠 2.0  (92) 2006.12.16
by cranix 2007.03.18 01:20
el, JSP, jstl
JSTL ( JSP Tag Library )

일반적으로 사용하는 JSP 태그를 표준화 시킨건데 아래 것들이 많이 사용된다.

CORE  ::  http://java.sun.com/jstl/core   ::  c
XML    ::  http://java.sun.com/jstl/xml    ::  x
I18N     ::  http://java.sun.com/jstl/fmt     :: fmt
SQL     ::  http://java.sun.com/jstl/sql     ::  sql

예) <%@ taglib prefix="c"  uri="http://java.sun.com/jstl/core"  %>

위와같이 JSP 파일에 선언해주면 되는데 하기전에 라이브러리 파일과 tld 파일을 설치해 줘야한다.

- JSTL 설치하기

1. JSTL 다운로드

JSTL 은 아래 두사이트에서 다운로드 할수있다.
  --> 여기서 다운로드를 해봤는데 모든 툴들이 하나로 통합되어 진거 같다.
        JSTL 만 따로 받고싶은 나로선 별로 내키진 않았다.

2) http://apache.org 
  --> 여기서는 jakarta-taglibs-standard-1.1.2.zip 파일을 받으면 된다.


2. 설치
  - WEB-INF/lib 디렉토리에 jstl.jar 와 standard.jar 파일을넣는다.
  - WEB-INF/tld 에다가 tld 폴더를 복사한다.

3. WEB.XML 설정
  --> 처음에 uri="http://java.sun.com/jstl/core" 라고 쓰는걸 보고 sun 에서 해당 url 을 지원해 주는줄 알았으나 그게 아니고 WEB.xml 파일에 아래와같이 설정해 줘야지 쓸수 있는것이다.

             <taglib>
                           <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
                           <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
             </taglib>
 
             <taglib>
                          <taglib-uri>http://java.sun.com/jstl/xml</taglib-uri>
                          <taglib-location>/WEB-INF/tld/x.tld</taglib-location>
             </taglib>
 
             <taglib>
                           <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
                          <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
             </taglib>

4. JSP 선언
  --> 위에서 말한것처럼 JSP 파일에는 아래와같이 선언해주면 된다.
<%@ taglib prefix="c"  uri="http://java.sun.com/jstl/core"  %>



- EL(expression language) 내장객체
 
pageScope  ::  page 범위에 포함된 속성 값에 접근
requestScope  ::  request 범위에 포함된 속성값에 접근
sessionScope ::  session 범위에 포함된 속성값에 접근
applicationScope  ::  application 범위에 포함된 속성값에 접근
param  ::  request.getParameter("aa")와 동일한 기능. 사용은  $(param.aa)
paramValues  ::  request.getParameterValues의 기능. $(paramValues.aa)
header  ::  request.getHeader('aa") 와 동일.  $(header.aa)
headerValues  ::  request.getHeaderValues("aa")와 동일 $(headerValues.aa)
initParam  ::  컨텍스트의 초기화 파라미터값
cookie  ::  쿠키 정보에 접근
pageContext  :: PageContext 객체


참조 : http://blog.empas.com/zeroscience/17279705
신고

' > Spring' 카테고리의 다른 글

기본 Controller 지정하기.  (23) 2007.05.24
SPRING  (25) 2007.02.28
JSTL 사용하기  (28) 2007.02.28
hello spring 테스트  (19) 2007.02.27
스프링 프레임워크 공식 홈페이지  (16) 2007.02.26
Spring 프레임 워크북  (17) 2007.02.26
by cranix 2007.02.28 10:36
| 1 |