- 아파치 ( 수동으로 실행 시 root 계정으로 실행 )

/etc/rc.d/rc.local 파일에 다음 내용을 추가

/usr/local/apache/bin/apachectl start



- 톰캣

/etc/rc.d/init.d/tomcat 이란 파일로 아래 내용 작성

==================================================

#!/bin/sh

# Source function library.

. /etc/rc.d/init.d/functions

source /etc/profile

export tomcat_HOME=톰캣 경로

# See how we were called.

case "$1" in

start)

echo -n "Starting tomcat EXPERIMENTAL: "

daemon $tomcat_HOME/bin/startup.sh

echo

;;

stop)

echo -n "Shutting down tomcat EXPERIMENTAL: "

daemon $tomcat_HOME/bin/shutdown.sh

echo

;;

restart)

$0 stop

$0 start

;;

*)

echo "Usage: $0 {start|stop|restart}"

exit 1

esac

exit 0

==================================================


# chmod 755 /etc/rc.d/init.d/tomcat  권한 설정

# /etc/rc.d/init.d/tomcat   실행테스트


Usage : {start|stop|restart} 이 메세지가 뜨면 완성




출처: http://www.parkjinsu.com/23 [SomeThing]



==================

좀더 많은 내용


#!/bin/bash
#
# tomcat
#
# chkconfig: 345 96 30
# description:  Start up the Tomcat servlet engine.
#
# processname: java
# pidfile: /var/run/tomcat.pid
#
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Should-Start: distcache
# Short-Description: start and stop Apache HTTP Server
# Description: implementation for Servlet 2.5 and JSP 2.1
## END INIT INFO
 
# Source function library.
/etc/init.d/functions
 
## tomcat installation directory
PROCESS_NAME=tomcat-servicename
 
CATALINA_HOME="/home/lesstif/apache-tomcat-7.0.54/"
 
## run as a diffent user
TOMCAT_USER=lesstif
 
##  Path to the pid, runnning info file
pidfile=${PIDFILE-/var/run/${PROCESS_NAME}.pid};
lockfile=${LOCKFILE-/var/lock/subsys/${PROCESS_NAME}};
 
RETVAL=0
 
case "$1" in
 start)
        PID=`pidofproc -p ${pidfile} ${PROCESS_NAME}`
        if [[ (-n ${PID}) && ($PID -gt 0) ]]; then
                logger -s "${PROCESS_NAME}(pid ${PID}) is  already running."
                exit;
        fi
        if [ -f $CATALINA_HOME/bin/startup.sh ];
          then
            logger -s "Starting Tomcat"
            /bin/su -l ${TOMCAT_USER} -c "$CATALINA_HOME/bin/startup.sh -Dprocessname=${PROCESS_NAME}"
            PID=`ps -eaf|grep processname=${PROCESS_NAME}|grep -v grep|awk '{print $2}'`
            RETVAL=$?
            [ $RETVAL = 0 ] && touch ${lockfile}
            [ $RETVAL = 0 ] && echo "${PID}" > ${pidfile}
        fi
        ;;
 stop)
        PID=`pidofproc -p ${pidfile} ${PROCESS_NAME}`
        ## if PID valid run shutdown.sh
        if [[ -z ${PID} ]];then
            logger -s "${PROCESS_NAME} is not running."
            exit;
        fi
 
        if [[ (${PID} -gt 0) && (-f $CATALINA_HOME/bin/shutdown.sh) ]];
          then
            logger -s "Stopping Tomcat"
            /bin/su -l ${TOMCAT_USER} -c "$CATALINA_HOME/bin/shutdown.sh"
            RETVAL=$?
            [ $RETVAL = 0 ] && rm -f ${lockfile}
            [ $RETVAL = 0 ] && rm -f ${pidfile}
        fi
        ;;
 status)
        status -p ${pidfile} ${PROCESS_NAME}
        RETVAL=$?
        ;;
 restart)
         $0 stop
         $0 start
         ;;
version)
        if [ -f $CATALINA_HOME/bin/version.sh ];
          then
            logger -s "Display Tomcat Version"
            /bin/su -l ${TOMCAT_USER} -c "$CATALINA_HOME/bin/version.sh"
            RETVAL=$?
        fi
        ;;
 *)
         echo $"Usage: $0 {start|stop|restart|status|version}"
        exit 1
        ;;
esac
exit $RETVAL


출처 : https://www.lesstif.com/pages/viewpage.action?pageId=6979609




출처 : http://blog.naver.com/patrickson?Redirect=Log&logNo=90153182047


윈도우 스케줄러에 특정 URL을 호출하는 작업을 등록하고 싶다.

안타깝게도 윈도우 스케줄러 등록시에는 특정 url을 입력해주는 부분이 없다.

 

그럴때 메모장에 아래와 같이 작성을 한 다음 확장자를 vbs로 지정한다음 그 파일을

원하는 시간에 호출하도록 처리를 해주면 되겠다.

===========================================================================

Call LogEntry()

Sub LogEntry()

        'Force the script to finish on an error.

        On Error Resume Next

        'Declare variables

        Dim objRequest

        Dim URL

        Set objRequest = CreateObject("Microsoft.XMLHTTP")

        'Put together the URL link appending the Variables.

        URL = http://적용할 url

        'Open the HTTP request and pass the URL to the objRequest object

        objRequest.open "POST", URL , false

        'Send the HTML Request

        objRequest.Send

        'Set the object to nothing

        Set objRequest = Nothing

End Sub


===========================================================================


지금 작업은 해놨으나 작동은 되는지 확인해야함...


/conf/web.xml에 에러 코드 유형별로 에러 페이지 설정 방법

<web-app>
    <error-page>
      <error-code>404</error-code>
      <location>/404error.jsp</location>
    </error-page>
    <error-page>
      <error-code>500</error-code>
      <location>/500error.jsp</location>
    </error-page>
    <error-page>
      <exception-type>java.lang.Throwable</exception-type>
      <location>/exception_error.jsp</location>
    </error-page>
</web-app>

 

100 : Continue 
101 : Switching protocols 
200 : OK, 에러없이 전송 성공
201 : Created, POST 명령 실행 및 성공 
202 : Accepted, 서버가 클라이언트 명령을 받음 
203 : Non-authoritative information, 서버가 클라이언트 요구 중 일부 만 전송 
204 : No content, 클라언트 요구을 처리했으나 전송할 데이터가 없음 
205 : Reset content 
206 : Partial content 
300 : Multiple choices, 최근에 옮겨진 데이터를 요청 
301 : Moved permanently, 요구한 데이터를 변경된 임시 URL에서 찾았음 
302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시 
303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음 
304 : Not modified 
305 : Use proxy 
400 : Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음 
401 : Unauthorized, 클라이언트의 인증 실패 
402 : Payment required, 예약됨 
403 : Forbidden, 접근이 거부된 문서를 요청함 
404 : Not found, 문서를 찾을 수 없음 

405 : Method not allowed, 리소스를 허용안함 
406 : Not acceptable, 허용할 수 없음 
407 : Proxy authentication required, 프록시 인증 필요 
408 : Request timeout, 요청시간이 지남 
409 : Conflict 
410 : Gone, 영구적으로 사용할 수 없음 
411 : Length required 
412 : Precondition failed, 전체조건 실패 
413 : Request entity too large, 
414 : Request-URI too long, URL이 너무 김 
415 : Unsupported media type 
500 : Internal server error, 내부서버 오류(잘못된 스크립트 실행시) 
501 : Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구함 
502 : Bad gateway, 서버의 과부하 상태 
503 : Service unavailable, 외부 서비스가 죽었거나 현재 멈춤 상태 
504 : Gateway timeout 
505 : HTTP version not supported

에러페이지는 docbase 부터 시작됨

원문: http://blog.naver.com/neolithe/20024769222

 

conf/web.xml 파일에 다음과 같이 추가


<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app>

...

...

 

  <!-- error page setup -->
 <error-page>
  <error-code>404</error-code>
  <location>/error/code404.jsp</location>
 </error-page>


 <error-page>
  <error-code>500</error-code>
  <location>/error/code500.jsp</location>
 </error-page>

...

...

</web-app>

 

 

설정하고 나서 code404.jsp , code500.jsp 페이지를 해당디렉토리에 만든다.

JSP 스크립트립 부분은 제외하고 나머진 알아서 디자인 하면된다.

 

code404.jsp


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

<%

response.setStatus(HttpServletResponse.SC_OK);

%>
<html>
<head>
<title>404 에러 페이지</title>
</head>
<body>
요청하신 페이지는 존재하지 않습니다.
</body>
</html>

 

code500.jsp


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

<%

response.setStatus(HttpServletResponse.SC_OK);

%>    
<html>
<head>
<title>500 에러 페이지</title>
</head>
<body>
서비스 과정에서 에러가 발생했습니다.<br>

빠른 시일안에 문제를 해결하겠습니다.
</body>
</html>

 

 

에러 발생 후 처리 예제

예) 로그인시 해당 아이디를 가진 사용자의 이름을 파싱하지 못하는 에러 발생.

 

infoForm.html


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="viewInfo.jsp">
 이 름 : <input type="text" name="name" size="20"> <br>
 나 이 : <input type="text" name="age" value="20"> <br>
<hr>
* P.S : 나이는 숫자만 입력해야 합니다. 
<hr>
<input type="submit" value="전송">
</form>

</body>
</html>

 

viewInfo.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="error02.jsp" %>
<%! 
String s_name; 
int age;

%>   
<%
//post 전송 방식일 경우 파라메터에 대한 한글 처리
request.setCharacterEncoding("UTF-8");

s_name = request.getParameter("name");
age = Integer.parseInt(request.getParameter("age"));

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3> 회원 정보 출력 </h3><hr>
당신의 이름은 <%= s_name %>입니다.<br>
당신의 나이는 <%= age %>살입니다.<br>
</body>
</html>

 

error02.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isErrorPage="true"%>   
<% 
response.setStatus(HttpServletResponse.SC_OK);
%>     
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table align="center">
<tr bgcolor="#aaaaaa">
다음과 같은 에러가 발생하였습니다
</tr>
<tr>
<%= exception.getMessage() %>
</tr>
<table>
</body>
</html>

 [출처] http://www.cyworld.com/everysons/2352294

톰켓 6.0 버젼


여러 방법이 있을 수 있겠지만, 손쉬운 방법으로는 conf/server.xml 중


대략 96줄에 있는 <Host> 태그의 appBase를 변경해주거나,


<Host> 태그 내에 <Context> 태그를 추가해주면 된다


말은 쉬우나, 따라하는 것은 쉽지 않기 때문에 예를 들어보면,


우선 톰켓이 기본적으로 보고 있는 루트 컨텍스트는 webapps/ROOT 이다


96:  <Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


appBase는 ${catalina-home} 밑의 상대경로를 인자로 받으며,

기본적으로 보안과 context의 통일적인 적용을 이유로 컨텍스트의 루트는 ROOT 디렉토리 밑이 된다.

따라서, 톰켓이 설치가 되면 웹루트는 ${catalina-home}/webapps/ROOT 가 되는 것


보다 쉬운 이해를 위해 이를 3가지 별로 변경을 해본다


1. webapp 자체를 웹루트 디렉토리로 만들고 싶을 때,


    단지, <Host> 태그 내에 아래와 같은 컨텍스트를 추가하면 됩니다.

    <Context path="" docBase="." reloadable="true"/>


   사실 컨텍스트는 더 많은 옵션이 있으나 여기는 최소한의 사항만 적었습니다. 

   실서버에 적용할 때는 log 부분도 신경을 써주셔야 합니다. 더 자세한 사항은 웹을 검색해 보시기 바랍니다.


2. webapp/test/ROOT를 웹루트 디렉토리로 만들고 싶을 때,


96:  <Host name="localhost"  appBase="webapps/test"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


3. d:/env/home/my 를 웹루트 디렉토리로 만들고 싶을 때,


96:  <Host name="localhost"  appBase="d:/env/home/my"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


    <Context path="" docBase="." reloadable="true"/>

    </Host>


     또는, 


96:  <Host name="localhost"  appBase="d:/env/home/"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">


    <Context path="" docBase="my" reloadable="true"/>

    </Host>


두설정의 차이는  Context 를 빼먹으면 ROOT를 자동으로 웹루트로 쓴다


톰켓 5.0부터 추가적인 <Context>는 server.xml에 추가하지 않고,

각 웹어플리케이션 디렉토리 별로 META-INF 밑에 context.xml을 추가하게 된다.


웹루트를 appBase와 같이 하려면 이의 설정을 server.xml에서 설정해도 상관없지만

webapps를 루트로 쓰는 것은 특별한 경우가 아니면 지양하는 게 좋으며,

꼭 필요하다면 apache의 redirect를 쓰는 방법 등으로 해결가능




ex)

* -  여기서 DocBase를 잡는 다는 것은

자신이 원하는 위치의 폴더를 작업 공간으로 잡는 것을 말한다.

 

1. 만약 C:\안에  Happy라는 폴더를 작업공간으로 만들고 싶을 경우

 -  자신의 tomcat이 설치되어 있는 폴더 안에 conf\Catalina\localhost 에 Happy.xml 파일을 만들어 준다.

(여기서 xml 파일은 자신이 만들고자 하는 폴더 이름과 같게 한다.)

- localhost 폴더 안에 있는 xml 파일 중 하나를 복사하여 Happy.xml 파일에 붙여 넣기 한다.

- Happy.xml파일을 열고

  <Context path="path로 적을 것" docBase="작업공간 위치"

         privileged="true" antiResourceLocking="false" antiJARLocking="false">

     이 부분만 고쳐주면 된다.

예) <Context path="/Happy" docBase="C:\Happy"

         privileged="true" antiResourceLocking="false" antiJARLocking="false">

 \- 수정이 끝난 후 tomcat을 재시작 한다.

- Happy폴더 안에 HTML 파일을 아무거나 넣는다.

- 재시작 후 Internet Explorer를 열고 주소창에  

   http://localhost:지신의 포드번호/Happy/HTML파일명.html 을 입력하여

   그 파일의 내용이 보인다면 성공한 것이다.

[출처] Tomcat DocBase 잡는 법|작성자 하얀아이


html 이나 jsp 파일의 인코딩그리고 DB에서도 인코딩을 모두 셋팅 해주었지만

파일의 인코딩이 깨질경우 WAS에서 불러올 때 부터 인코딩을 설정해주는 방법



catalina.bat 를 편집으로 열어서 대략 110번째 줄 마지막에

-Dfile.encoding=utf8 입력



set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" 

-Dfile.encoding=utf8 


utf8은 하나의 인코딩 설정이므로 자신 프로젝트에 맞는 인코딩 형식을 써준다



TCP : 한쪽 노드에서 다른 쪽 노드로 파일을 보내는 녀석// 여러개로 잘라서 보낼 수도 있다.

IP : 한 호스트에서 목적지 호스트 까지 패킷을 옮기고 이동하기 위한 베이스 프로토콜

(웹에서만 사용하는 프로토콜)

HTTP 는 TCP/IP를 기반으로 하는 프로토콜



웹 서버(Web Server)

 - 클라이언트의 요청을 받아 HTML이나 오브젝트를 HTTP 프로토콜을 이용해 전송하는 것.

   사용자가 클라이언트로 요청을 보내오면 그 명령에 대한 처리를 실행하고 다시 사용자에게 답변을 보내준다.

 - 사용자가 요청한 것들 중에 웹 서버 자체적으로 처리할 수 없는 것들을 톰캣과 같은 컨테이너나 PHP 모듈과

   같이 처리할 수 있는 곳으로 넘겨 처리 결과를 받아와서 사용자에게 넘겨주는 역할도 수행한다.

 - 웹 서버만 구축된 서버는 웹 페이지, 이미지 등 정적인 페이지를 생성하지만,

   JSP 컨테이너가 탑재되어 있는 WAS는 JSP 페이지를 컴파일 해 동적인 페이지를 생성한다.

 - 웹 서버는 웹 문서를, WAS는 JSP 페이지 등을 양분하여 서버 부담을 줄이는 것이 가능하다.

 - Apache, IIS(Internet Information Server), WebtoB 등



웹 어플리케이션 서버(Web Application Server / WAS)

  : 웹과 기업의 기간 시스템 사이에 위치하면서, 웹 기반 분산 시스템 개발을 쉡게 도와주고

    안정적인 트랜잭션 처리를 보장 해주는 일종의 미들웨어 소프트 웨어 서버

    3계층 웹 컴퓨팅 환경에서 트랜잭션 처리 및 관리와 다른 기종 시스템 간의 애플리케이션 연동등을 주된 기능으로함


 -  웹 서버 + 웹 컨테이너.

 -  웹상에서 사용하는 컴포넌트들을 올려놓고 사용하게 되는 서버

 - EJB 와 같은 빈들이 올라가게 되며, 서버에 따라 웹에 필요한 많은 기능들을 포함하고 있다.

 - J2EE 스펙을 구현한 서버(JSP / Servlet Container와 EJB Container 로서의 기능)

 - 가장 많이 사용하는 WAS는 BEA사의 Web Logic, IBM사의 Web Sphere, T-max사의 Jeus, Tomcat, Redhot사의 JBoss 등이 있다.)

 - Tomcat은 JSP / Servlet Container의 기능을 구현했으나 EJB Container로서의 기능은 없다.

    따라서 Tomcat은 Was가 아니라는 사람들도 있다.



컨테이너(Containner)

 - JSP와 서블릿을 이용하는 웹 응용 프로그램은 자바 언어를 이용해서 작성할 수 있는데,

   JSP와 서블릿을 실행시킬 수 있는 소프트웨어를 웹 컨테이너(Web Container) 혹은 서블릿 컨테이너(Servlet Container)라고 한다.

 - Servlet 컨테이너, JSP 컨테이너, EJB 컨테이너 등의 종류가 있으며, 대표적인 웹 컨테이너로는

   자카르타 톰캣(JSP), RESIN, Web Logic, WebtoB 등이 있다.

 - 웹 서버에서 JSP를 요청하면 톰캣에서는 JSP 파일을 서블릿으로 변환하여 컴파일을 수행하고,

   서블릿의 수행결과를 웹 서버에서 전달하게 된다. 

 

웹 서버와 WAS의 차이점

 - 웹 서버와 WAS를 구별 짓는 것은 동적 서버 콘텐츠를 수행하는가? 만약 수행한다면 WAS로 보면 된다.

 - 웹 서버 : 정적인 HTML이나 이미지를 제공하는 서버.

   WAS : 동적인 처리를 담당하는 서버. 


웹 서버와 WAS의 일반적인 구성

 - 사용자가 브라우저에서 요청을 하게 되면 다음과 같이 웹 서버와 WAS 서버를 거쳐 응답이 돌아오게 된다.

   사용자 요청(웹 브라우저) -> 웹 서버 -> WAS(동적 처리) -> 웹 서버 -> 사용자 응답 메세지(웹 브라우저)

+ Recent posts