'web.xml'에 해당하는 글 4건

 

Tomcat 에서 인스턴스를 여러개 만들어 서비스에는 성공하였지만, 각 인스턴스간에 세션을 공유해야 할 상황이라면 몇가지 설정을 추가해야 한다.

 

테스트 환경 : CentOS 7 / Tomcat 8.5
테스트 목표 : 구성된 인스턴스 간에 이동을 하더라도 session 유지

 

 

1. 현재 인스턴스 세션 확인

 

톰캣의 기본 고양이 화면 파일을 수정하여 세션ID 를 노출시켰다.

 

$ vi /app/tomcat/instance1/webapps/ROOT/index.jsp
<!-- 세션 사용하도록 항목 삭제나 변경. (기본값 session="true") -->
<%@ page session="false" %>

<!-- body 태그 안에 추가 -->
<%=session.getId()%>


http://serverIP:port1
http://serverIP:port2
http://serverIP:port3

 

EF5B9FCA054DBCEC5E3201DBA42C927A 처럼 보여지는 세션ID 는 세 인스턴스 간에 모든 다른 값을 출력할 것이다.

 

 

2. server.xml 파일 수정

server.xml 파일에 클러스터 설정의 주석을 해제한다.

상세 설정은 tomcat 웹사이트 참고 : https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html 

 

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

 


3. 방화벽 port 추가

<Membership className="org.apache.catalina.tribes.membership.McastService"
            address="228.0.0.4"
            port="45564"
            frequency="500"
            dropTime="3000"/>


클러스터 멤버를 구성하는데 필요한 Multicast 기본 포트(45564)를 추가한다.
멀티캐스트(multicast)는 한 번의 송신으로 메시지나 정보를 여러 컴퓨터에 동시에 전송하는 역할을 한다.

 

# firewall-cmd --permanent --zone=public --add-port=45564/tcp
# firewall-cmd --permanent --zone=public --add-port=45564/udp
# firewall-cmd --reload

 

 

4. web.xml 파일 수정

각 인스턴스의 webapps/ROOT/WEB-INF/web.xml 파일 아래에 distribuable 요소를 추가하면, 해당 컨텍스트에 대한 클러스터링이 진행되며 세션 공유가 가능해 진다.

<web-app ...>
  <distributable/>
</web-app>



5. Apache / Tomcat 재부팅

http://serverIP:port1
http://serverIP:port2
http://serverIP:port3

재부팅 하면 포트간에 이동하여도 동일한 세션ID 가 유지됨을 확인할 수 있다.

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

start Struts2

Programming/Struts2 2013. 5. 27. 21:23

Maven을 사용한 Struts2 웹 어플리케이션 만들기

 

webapp archetype으로 웹 어플리케이션을 만들었다면,
app/src/main/webapp 디렉토리의 index.jsp 파일을 아래의 주소로 확인할 수 있습니다.
http://localhost:8080/app/index.jsp

 

 

이제 Struts2 프레임워크를 사용하기 위해 pom.xml 파일에 dependency 요소를 추가합니다.
Struts2 구동에 필요한 jar 파일들이 WEB-INF/lib 디렉토리에 다운로드 됩니다.

 

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.14</version>
</dependency>

 

 

모든 클라이언트 요청(/*)에 대해 Struts2 Filter Dispatcher 를 사용하도록,
 web.xml 파일에 <filter />, <filter-mapping /> 요소를 추가합니다.

 

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

 

Struts2는 URL, 클래스, 뷰페이지 사이의 관계를 지정하기 위해 XML 설정 파일이나 메타데이터(annotation)을 사용할 수 있습니다.
XML 설정 파일을 사용하는 방법으로 아래의 내용을 src/main/resources 디렉토리에 struts.xml 파일로 저장합니다.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="basicstruts2" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

 

<constant /> 요소는 프레임워크 속성을 설정하는데 위에서는 개발모드(devMode)로 실행한다고 설정하였습니다.
action 이름은 index 이며 index.action 을 호출하면 결과 페이지로 index.jsp 파일이 렌더링 됩니다.

 

 

"index.jsp 와 index.action 은 같은 페이지를 출력하지만 같은 것이 아님에 주의하라!"

 

아무것도 없이 단지 action 맵핑뿐인 위 예제로는 도저히 이해할 수 없는 주의..;;


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

Config object

Programming/JSP 2013. 4. 15. 00:10

config 내장 객체 기능

 

  • 서블릿 정보 출력
  • 서블릿 컨테이너의 초기화 파라미터 사용

 

 

config 내장 객체는 javax.servlet.ServletConfig 인터페이스를 구현한 객체이며, 서블릿 컨테이너 관리 및 서블릿 초기화시
<TOMCAT_HOME>/conf/web.xml 에 작성된 초기화 파라미터 정보를 모든 웹 어플리케이션과 공유합니다.

 

web.xml 파일에 파라미터는 다음과 같이 <servlet> 태그 안에 이름/값 으로 등록합니다.

 

<web-app ...>
    <servlet>
        <servlet-name>InitParamTests</servlet-name>
        <servlet-class>com.oops4u.test.TestInitParams</servlet-class>

        <init-param>
            <param-name>adminEmail</param-name>
            <param-value>admin@a.com</param-value>
        </init-param>
        <init-param>
            <param-name>mainEmail</param-name>
            <param-value>main@b.com</param-value>
        </init-param>
    </servlet>
</web-app>

 

web.xml 파일을 수정한 후에 톰캣을 재시작하고 나며 변경된 내용이 어플리케이션에 적용됩니다.
다음 메소드를 이용하여 web.xml 파일에 등록된 파라미터를 얻을 수 있습니다.

 

String getServletName()
Enumeration getInitParameterNames()
String getInitParameter(String name)


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

Application object

Programming/JSP 2013. 4. 14. 21:01

application 내장 객체 기능

 

  • 서버 정보 출력
  • 어플리케이션 내에서 정보 공유
  • 로그 기록

 

 

pageContext 객체가 각각의 서블릿 내에서만 정보 공유를 하는 반면, application 객체는 javax.servlet.ServletContext 인터페이스 형의 객체로써, 환경 설정 파일인 WEB-INF/web.xml 파일을 이용하여 어플리케이션 내의 모든 서블릿 내에서 정보를 공유 합니다.

 

web.xml 파일에 파라미터는 다음과 같이 <web-app> 태그 안에 이름/값 으로 등록합니다.

 

<web-app ...>
    <context-param>
        <param-name>파라미터 이름</param-name>
        <param-value>파라미터 값</param-value>
    </context-param>
</web-app>

 

web.xml 파일을 수정한 후에 톰캣을 재시작하고 나며 변경된 내용이 어플리케이션에 적용됩니다.
다음 메소드를 이용하여 web.xml 파일에 등록된 파라미터를 얻을 수 있습니다.

 

Enumeration getInitParameterNames()
String getInitParameter(String name)


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret