밑의 방식으로는 이전 페이지가 넘어오지 않는다 ㅡ.ㅡ;;

포워딩 해서 그런지


null
/Wonderland/common/addressForward.jsp
http://localhost:8080/Wonderland/common/addressForward.jsp
/common/addressForward.jsp
null
/blog/blogMain.jsp?blog_address=Wonderland/common/addressForward.jsp
/Wonderland/common/addressForward.jsp


이런 식으로 포워드 된 페이지만 나온다..


따라서


<%

    Enumeration em = request.getAttributeNames();
    while( em.hasMoreElements() ) {
        String name = (String)em.nextElement();
        System.out.println(name + " , " + request.getAttribute(name));       
    }

%>


를 이용한다. 단, 톰캣 5.0 / 5.5 이상. 즉, 서블릿 / jsp 버젼에 관계있다.


javax.servlet.forward.request_uri , /Wonderland/tb/lonelycat
javax.servlet.forward.context_path , /Wonderland
javax.servlet.forward.servlet_path , /tb/lonelycat
javax.servlet.forward.path_info , /common/addressForward.jsp
javax.servlet.error.servlet_name , default
javax.servlet.error.message , /Wonderland/tb/lonelycat
javax.servlet.error.request_uri , /Wonderland/tb/lonelycat
javax.servlet.error.status_code , 404


결과는 이런 식.


즉, requets.getAttribute("javax.servlet.forward.servlet_path");


를 하면 컨텍스트 패스를 제외한 뒷부분 /tb/lonelycat 이 나온다.


이걸 이용해서 싸이월드 형식의 주소 포워딩이 가능할 듯.

'프로그래밍 > Web' 카테고리의 다른 글

[펌] Filter 를 이용한 한글 인코딩 적용  (0) 2007.11.27
context-param  (0) 2007.11.27
에러 페이지 처리  (0) 2007.11.27
열혈강의 6장 실습하기  (0) 2007.11.27
04 JSP 액션  (0) 2007.11.27

에러 페이지 처리

프로그래밍/Web 2007. 11. 27. 15:15 Posted by galad
<%--
/******************************************************************************
*   파일      : error.jsp
*   용도      :
*   작성자   : 성홍제
*   Version : 0.1 / 2007. 01. 23 -
******************************************************************************/
--%>

<%@ page
    language="java"
    contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
%>
<%
    // 종종 web.xml의 에러 페이지가 안 먹힐 때 - 에러 페이지로 왔다가 로컬의 에러 페이지로 가는 경우가 있다.
    // 아래처럼 에러 설정을 해주면? 제대로 동작한다
    response.setStatus(200);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>

<!--
 이 페이지를 호출한 이전 페이지의 주소를 얻어낸다. 링크 등의 경우 및 직접 주소창에 넣어도 된다
 -->
<%=request.getHeader("referer")%>
<br>

<!--
현재 주소창에서 URI값을 얻어온다.
예를 들어 http://www.naver.com/news
도메인을 제외한 /new가 나온다
 -->
<%=request.getRequestURI()%>
<br>

<!--
request의 쿼리문을 얻어낸다
예를 들어 http://www.naver.com/news?type=sports
type=sports가 나온다
 -->
<%=request.getQueryString()%>
<br>

<a href="<%=request.getContextPath()%>/lonelycat">TEST</a>

</body>
</html>

'프로그래밍 > Web' 카테고리의 다른 글

context-param  (0) 2007.11.27
밑의 에러 페이지 처리에 이어서.  (0) 2007.11.27
열혈강의 6장 실습하기  (0) 2007.11.27
04 JSP 액션  (0) 2007.11.27
03 JSP 시작  (0) 2007.11.27

열혈강의 6장 실습하기

프로그래밍/Web 2007. 11. 27. 15:14 Posted by galad

★ 친구들 연락처를 관리하기 위한 웹 서비스??


★ server.xml 수정


<Context path="/FriendsList" reloadable="true" docBase="D:\www\Tomcat 5.5\webapps\FriendsList">

  <Resource name="jdbc/FriendsDB"
     auth="Container"
     type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.OracleDriver"
     url="jdbc:oracle:thin:@61.109.232.128:1521:ora92"
     username="lonelycat"
     password="itea"
     maxActive="20"
     maxIdle="10"
     maxWait="-1"/>

</Context>


★ <host> ~ </host> 사이에 추가


★ context를 압축해서 올림...

'프로그래밍 > Web' 카테고리의 다른 글

밑의 에러 페이지 처리에 이어서.  (0) 2007.11.27
에러 페이지 처리  (0) 2007.11.27
04 JSP 액션  (0) 2007.11.27
03 JSP 시작  (0) 2007.11.27
02 HelloWorld!!!  (0) 2007.11.27

04 JSP 액션

프로그래밍/Web 2007. 11. 27. 15:13 Posted by galad

★ jsp:useBean... 등에 관하여



<!--
/******************************************************************************
*   파일      : contact2.html
*   용도      : jsp:bean 사용 예제 html
*   작성자   : 성홍제
*   작성일   : 2006. 08. 31
*   Version : 1.0
******************************************************************************/
 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    <title>Insert title here</title>
</head>
<body>
<h3>연락처</h3>
<form method=post action=contact2.jsp>
  이름<input type=text name=name><br>  <!-- name 속성의 값이 contact2.java의 메소드 -->
  메일<input type=text name=mail><br><!--input 태그를 닫아버리면 null 값이 전송된다.-->
    <p>
    <input type=submit value="전송">
    <input type=reset value="취소">
</form>
</body>
</html>


이 html에서 contact2.jsp에 정보를 넘겨서, contact2.jsp에서 contact2 클래스를 사용하여

개체를 생성, 정보를 저장, 불러오는 예제.


<%--
/******************************************************************************
*   파일      : contact2.jsp
*   용도      : contact2 클래스를 사용해 jsp:bean으로 활용해보는 page
*   작성자   : 성홍제
*   작성일   : 2006. 08. 31
*   Version : 1.0
******************************************************************************/
--%>

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<% request.setCharacterEncoding("euc-kr"); %>
   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    <title>Insert title here</title>
</head>
<body>
<%
    String name = request.getParameter("name");
    String mail = request.getParameter("mail");
%>
<%-- 선언, 생성 Contact2 contact = new Contact2() 와 같다. --%>
<jsp:useBean id="contact" class="contact.contact2" scope="page"/>


<jsp:setProperty name="contact" property="*"/>

<%-- contact 개체에 값을 넣어준다. - 위의 "*" 대신 이렇게 써도 된다.
<jsp:setProperty name="contact" property="name"/>
<jsp:setProperty name="contact" property="mail"/>
 --%>
<%-- 출력해본다. --%>
이름은 : <%= contact.getName() %>
<br>
메일주소는 : <%= contact.getMail() %>

</body>
</html>




/******************************************************************************
*   파일      : contact2.java
*   용도      : contact2.html 에서 넘겨주는 정보를 위한 클래스
*   작성자   : 성홍제
*   작성일   : 2006. 08. 31
*   Version : 1.0
******************************************************************************/

package contact;

public class contact2
{
    // Fields
    private String name;
    private String mail;
   
    // Constructor
    public contact2()
    {}
   
    // Methods
    public void setName(String name)    // contact2.html 의 폼 내의 <input>의 이름과 같아야함
    {                                                  // 밑의 메소드들도 모두 마찬가지. get, set 뒤에 붙는
        this.name = name;                      // 이름이 같아야한다. 첫글자는 html에서는 소문자.
    }
   
    public String getName()
    {
        return this.name;
    }
   
    public void setMail(String mail)
    {
        this.mail = mail;
    }
   
    public String getMail()
    {
        return this.mail;
    }
   
    // Main
}


★ html에서 체크박스이 데이터를 jsp:bean으로 받을 경우

html.....


<input type=checkbox name=sw value="jdk1.5">JDK1.5 <br>
<input type=checkbox name=sw value="JBuilder">JBuilder <br>
<input type=checkbox name=sw value="Eclipse">Eclipse<br>
<input type=checkbox name=sw value="Visual age">Visual age <br>
<input type=checkbox name=sw value="NetBean">NetBean<br><br>


jsp.....


<jsp:setProperty name="data" property="sw"/>  // 받을 때


<%  // 사용하는 경우 - 스트링 배열로 사용한다.
    String[] sw = data.getSw();

    if(sw != null)
    {
        for(int i = 0; i < sw.length; i++)
        {
            out.print(sw[i] + " ");
        }
    }
    else
    {
        out.println("선택한 것이 없습니다.");
    }
%>


데이터를 저장하는 class....


private String[] sw = null;


public void setSw(String[] sw)
{
    this.sw = sw;
}
   
public String[] getSw()
{
    return sw;
}


// sw는 바로 html에서의 체크박스의 이름

'프로그래밍 > Web' 카테고리의 다른 글

에러 페이지 처리  (0) 2007.11.27
열혈강의 6장 실습하기  (0) 2007.11.27
03 JSP 시작  (0) 2007.11.27
02 HelloWorld!!!  (0) 2007.11.27
01 시작~  (0) 2007.11.27

03 JSP 시작

프로그래밍/Web 2007. 11. 27. 15:12 Posted by galad

★ 프리젠테이션 로직에 들어간다.


★ 디폴트 객체의 스코프

1. page : 한 JSP페이지에서만 사용가능

  : response, out, config, page, exception


2. request : 다른 페이지로 전달(이동, forward) 되는 경우에 이동된 페이지에서도 사용 가능

   setAttribute() 메소드를 이용해서 어떤 정보를 저장해 놓으면 다른 페이지에서도 사용 가능

  : request


3. session : 객체 세션이 사용되는 한, 여러 페이지에서 사용할 수 있다.

   1번 페이지에서 필요한 정보들을 session 개체에 저장하면, 다른 페이지들에서도 활용 가능

   로그인 정보 등..

  : session


4. application : 웹 응용 프로그램에 소속된 모든 페이지들이 사용할 수 있다.

  : application


★ 변수 선언

스크립트렛(<% ~ %>) 에서 정의한 변수는 나중에 _japService() 메소드의 지역 변수로

선언(<%! ~ %>) 에서 정의한 변수는 나중에 서블릿 클래스의 멤버 필드로 바뀐다.


즉, 하나의 jsp 문서에서 여러 개의 <% ~ %> 안에 있는 변수는 _japService() 메소드 안에 있는

것이므로 위의 스크립트렛에서 정의한 변수를 아래의 스크립트렛에서 사용할 수 있다.


변수를 선언해서 사용하는 경우는 멤버 메소드에서 그 변수를 사용하는 경우를 빼고는 별로 없다.


★ 폼에서 한글 데이터를 전송 받아서 사용할 때 한글이 깨지는 경우

jsp문서에서 한글 데이터를 처리하기 전 - 가능하면 최상위에 - 에 다음과 같이 추가


request.setCharacterEncoding("euc-kr");


들어오는 정보를 한글 처리해 달라는 것.


예제)))))


<!--
/******************************************************************************
*   파일      : select-items.html
*   용도      : 폼에서 jsp로의 데이터 전송 테스트
*   작성자   : 성홍제
*   작성일   : 2006. 08. 29
*   Version : 1.0
******************************************************************************/
-->

<html>
<head>
    <title>JSP POST TEST</title>
</head>

<body>
<center>
    <h2>JSP POST 테스트</h2>
</center>

<form method=POST action=select-items.jsp>
    이름 <input type=input name=name><br>
    주소 <input type=input name=addr> <br><br>
 
    다음 사항을 선택해주세요.<br>
    사용중인 운영 체제는 ? <br>
    <select name=os size=3 multiple>
        <option value="win32">윈도우즈
        <option value="linux">리눅스
        <option value="solaris">솔라리스
        <option value="misc">기타
    </select>

    <br><br>사용중인 컴퓨터 하드웨어는 ? <br>
    <select name=hw>
        <option value="pentium">펜티엄
        <option value="misc">기타
    </select>

    <br><br>사용중인 통신회사는 ? <br>
    <select name="통신회사"  multiple>
        <option> 하이텔
        <option> 천리안
        <option>기타
    </select>

    <br>
    <input type=submit value=전송>
    <input type=reset value=취소>
</form>
</body>
</html>


<%--
/******************************************************************************
*   파일      : select-items.jsp
*   용도      : select-items.html에서 넘겨받은 데이터를 보여준다.
*   작성자   : 성홍제
*   작성일   : 2006. 08. 29
*   Version : 1.0
******************************************************************************/
--%>
<%@ page contentType="text/html;charset=KSC5601" %>

<html>
<head>
    <title>Select Items</title>
</head>

<body>
<center>
    <h2>Select Items 테스트</h2>
</center>

HTML에서 선택한 내용은 다음과 같습니다. <hr>

<%
    request.setCharacterEncoding("euc-kr");

    java.util.Enumeration en = request.getParameterNames();

    while(en.hasMoreElements())
    {
        String name = (String)en.nextElement();
        String values[] = request.getParameterValues(name);

        for(int i=0; i < values.length; i++)
        {
            out.print("<li>");
            out.print(name);
            out.print(":");
            out.println(values[i]);
        }
    }
%>

</body>
</html>



결과가 순서대로 나오지는 않지만, Enumeration이 원래 그렇단다....

'프로그래밍 > Web' 카테고리의 다른 글

에러 페이지 처리  (0) 2007.11.27
열혈강의 6장 실습하기  (0) 2007.11.27
04 JSP 액션  (0) 2007.11.27
02 HelloWorld!!!  (0) 2007.11.27
01 시작~  (0) 2007.11.27

02 HelloWorld!!!

프로그래밍/Web 2007. 11. 27. 15:10 Posted by galad


/******************************************************************************
*   파일      : HelloServlet.java
*   용도      : 초간단 서블릿 프로그램
*   작성자   : 성홍제
*   작성일   : 2006. 08. 24
*   Version : 1.0
******************************************************************************/

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet
{
    // 서버가 입력받은 정보는 req에 - 클라이언트가 request했으므로, 서버가 보낼 정보는 res에 - 서버가 response하므로.
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
        // 현재 클라이언트에 보낼 문서는 text/html이고 euc-kr로 인코딩되어있다고 알림
        res.setContentType("text/html;charset=euc-kr");
       
        PrintWriter out = res.getWriter();  // 출력 스트림을 얻는다.
       
        // html body 작성
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello, World</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("Hello, World!!!");
        out.println("</body>");
        out.println("</html>");
       
        out.close();
    }
}


익스플로러에서 실행 시

1. http://localhost:8080/ITEA/servlet/HelloServlet 

  localhost:8080 으로 들어갔으므로, 아파치를 통하지 않고 바로 톰캣으로 들어간다.

  /ITEA/ 는 톰캣에 deploy한 context를 말한다.

  /servlet/ 은 class 파일이 있는 위치를 말한다.

  HelloServlet 은 만들어서 D:\www\Tomcat 5.5\webapps\ITEA\WEB-INF\classes

에 넣어놓은 class파일명.

  여기서 제대로 보이지 않으면 톰캣 설정에서 문제


D:\www\Tomcat 5.5\webapps\ITEA\WEB-INF\web.xml 파일을 찾아보자


<servlet>
   <servlet-name>invoker</servlet-name>
   <servlet-class>org.apache.catalina.servlets.InvokerServlet</servlet-class>
</servlet>


<servlet-mapping>
   <servlet-name>invoker</servlet-name>
   <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>


  오타는 없는가?


2. http://localhost/ITEA/servlet/HelloServlet

  localhost 로 들어갔으므로 아파치를 통해 톰캣으로 연동된 것.

  위의 경우에는 제대로 되는데, 2번의 경우 되지 않는다면 연동에서 실패한 것.

  관련 문서들을 찾아보자.


D:\www\Apache2\conf\httpd.conf 파일을 제대로 설정했는가

특히 이 부분

JkMount /*servlet/* ajp13
JkMount /*.jsp  ajp13
JkMount /*.do  ajp13
JkMount /Mail  ajp13


/*servlet/*  을 확인해 볼 것. 요청한 주소에 servlet/ 이 있다면 톰캣에서 처리하게 하겠다는 의미

'프로그래밍 > Web' 카테고리의 다른 글

에러 페이지 처리  (0) 2007.11.27
열혈강의 6장 실습하기  (0) 2007.11.27
04 JSP 액션  (0) 2007.11.27
03 JSP 시작  (0) 2007.11.27
01 시작~  (0) 2007.11.27

01 시작~

프로그래밍/Web 2007. 11. 27. 15:09 Posted by galad

1. Apache 설치하기

- Network Domain : IP

- Server Name : IP

- E-main : any


2. Tomcat 설치하기

- 딱히 없다.

- 디렉토리만 설정



★ 아파치, 톰캣 연동하기

1. 아파치 사이트에서 아파치와 톰캣 버젼에 맞는 자카르타를 받는다.


2. 받은 자카르타 파일명을 mod_jk.so 로 바꾸어서 D:\www\Apache2\modules 에 넣는다.

 당연히 디렉토리는 자신이 설치한 곳에


3. 아파치 설정 파일 httpd.conf 변경


파일 중간에 LoadModule 하는 곳에 추가

LoadModule    jk_module     modules/mod_jk.so


마지막에 추가

#For Jakarta
JkWorkersFile     "D:/www/Tomcat 5.5/conf/workers.properties"
JkLogFile      "D:/www/Tomcat 5.5/logs/mod_jk.log"
#JkLogLevel    debug

JkMount /*servlet/* ajp13
JkMount /*.jsp  ajp13
JkMount /*.do  ajp13
JkMount /Mail  ajp13


4. workers.properties 파일을 위에서 설정한 디렉토리에 생성해준다.

위의 디렉토리는 꼭 톰캣일 필요는 없고 아파치에 넣어도 상관없다.

worker.list=ajp13
worker.testWorker.port=8009
worker.testWorker.host=localhost
worker.testWorker.type=ajp13


5. 톰캣의 설정파일 server.xml 을 변경

굵은 글씨를 위치를 잘 찾아서 추가할 것

.

.

<Server port="8005" shutdown="SHUTDOWN">

  <!-- Comment these entries out to disable JMX MBeans support used for the
       administration web application -->
  <Listener className="org.apache.jk.config.ApacheConfig" modJk="D:/www/Apache2/modules/mod_jk.so"/>
  <Listener className="org.apache.catalina.core.AprLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>

.

.

<Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

    <Listener className="org.apache.jk.config.ApacheConfig" append="true" forwardAll="false" modJk="D:/www/Apache2/modules/mod_jk.so"/>

.

.



6. 톰캣과 아파치를 멈춘 후, 톰캣 - 아파치의 순서로 실행시킨다.



★ 연동 후, 디렉토리 문제.

연동 후, 루트는 기본적으로 아파치에서 설정한 디렉토리가 된다 - htdocs. 따라서 위에서

설정한 jsp, do, servlet 등이 아닌 css나 img 등은 모두 기본적으로 아파치 쪽에서 찾게 되므로

path에 주의할 것.

주로 css, img 등은 아파치 디렉토리에 놓고 쓰던가, 아니면 아파치와 톰캣의 디렉토리를

일치시키기도 한다. 아니면 css나 img를 문서에서 사용할 때 절대경로를 설정하던가..


★ 톰캣의 D:\www\Tomcat 5.5\webapps 에 원하는 디렉토리 - 예를 들어 ITEA - 를 만들고

그 밑에 WEB-INF와 WEB-INF\classes, WEB-INF\lib, WEB-INF\web.xml 파일을 만들어주면

웹브라우져에서 접속가능.

하나의 또다른 서버처럼 작동. http://localhost:8080/ITEA/ 이런 식으로 접속 가능하다.

ROOT에 있는거 복사해다가 수정해서 사용하면 된다.


★ 톰캣 매니져에서 deploy 해주기

Context Path (optional):
XML Configuration file URL:
WAR or Directory URL:


★ 개인용 컴퓨터의 경우 8080 포트가 방화벽에 막혀있어서 접속이 불가능하기도 하므로

예외에 추가해줄 것


★ 톰캣에서 컴파일된 서블릿을 자동 로드하게 만들기

context.xml 파일을 변경

<Context> -> <Context reloadable="true">

'프로그래밍 > Web' 카테고리의 다른 글

에러 페이지 처리  (0) 2007.11.27
열혈강의 6장 실습하기  (0) 2007.11.27
04 JSP 액션  (0) 2007.11.27
03 JSP 시작  (0) 2007.11.27
02 HelloWorld!!!  (0) 2007.11.27