우선 간단히 구조를 살펴보도록 합시다.

simpleboard패키지안에 actions, controller, jdbcdriver, model이 있습니다.

actions
deleteAction클래스 - 글을 지울 때 쓰이는 액션
listAction클래스 - 글목록을 보여줄 때 쓰이는 액션
modifyAction클래스 - 글을 수정할 때 쓰이는 액션
modifyformAction클래스 - 글을 수정할 때 비밀번호를 입력해서 맞는지 확인할 때 쓰이는 액션
showAction클래스 - 글을 볼 때 쓰이는 액션
writeAction클래스 - 글을 쓸 때 쓰이는 액션

controller
KoRequestProcessor클래스 - 잘은 모르지만 한글을 가능하게 해주는 클래스입니다.

jdbcdriver
DBCInit클래스 - DB를 초기화시키는 클래스가 있습니다.

model
Board클래스 - 객체에 내용을 담을 수 있게 해주는 빈클래스입니다.
BoardDAO클래스 - write, delete, modify, getList 등 실제적으로 수행하는 메소드를 모아놓은 클래스입니다.

클래스 구조는 대충 이렇습니다.
간단합니다. 예를 들면 write.do액션이 들어오면 writeAction을 수행하는데 이 클래스 안에서 DAO를 생성해서 write메소드를 호출하는 형식으로 되어있습니다.
나머지 delete나 modify도 같은 형식으로 이루어져 있습니다.

조금 다른 list보기를 설명해보도록 하겠습니다.
struts-config에 다음과 같이 액션매핑에 액션을 정의합니다.
<action path="/list"
    type="simpleboard.actions.listAction"
    scope="request">
   <forward name="success" path="/list.jsp"/>
 </action>

list.do를 실행하면 listAction을 실행하는데 성공을 리턴하면 list.jsp를 포워드하라는 뜻입니다.

listAction을 보도록 합시다.

listAction.java
[code]
package simpleboard.actions;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import java.util.List;
import simpleboard.model.Board;
import simpleboard.model.BoardDAO;

public class listAction extends Action {
    final int countPerPage = 10;
    public ActionForward execute(   ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
                                    throws Exception{
        int currentPage;
        int totalPage;       
        String pageNum = request.getParameter("page");

        if (pageNum == null)
            pageNum = "1";
        currentPage = Integer.parseInt(pageNum);
        BoardDAO dao = new BoardDAO();

        List<Board> BoardList = dao.getList(currentPage, countPerPage);
        totalPage = dao.getTotalPage(countPerPage);

        HttpSession session = request.getSession();
        session.setAttribute("boardlist", BoardList);
        request.setAttribute("currentpage", new Integer(currentPage));
        request.setAttribute("totalpage", new Integer(totalPage));
        request.setAttribute("nextpage", new Integer(currentPage+1));
        request.setAttribute("prevpage", new Integer(currentPage-1));

        return mapping.findForward("success");
    }
}
[/code]
우선 list.do?page=숫자 형식으로 실행하는데 list.do로 실행하게되면 1로 인식을 하게 됩니다.
그리고 받은 값을 DAO의 geList에 2개의 인자를 전달합니다(현재페이지번호, 한페이지당게시물수).
현재페이지번호에 맞는 게시물들을 List에 다 받게 됩니다. 이것을 session에 저장해서 list.jsp에 출력해주는 식입니다.

그리고, 총페이지수와 다음페이지, 이전페이지 값을 전달해줘서 처음인지 끝인지를 판단할 수 있게하고 다음페이지와 이전페이지를 수행하도록 값을 넘겨줍니다.

이제 list.jsp를 보도록 합시다.

list.jsp
[code]

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

<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld"  prefix="bean" %>
<!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=EUC-KR">
<title>심플보드에 오신 것을 환영합니다</title>
</head>
<body>
<center>
<table border="1" width="500" height="50">
    <tr>
        <td align="center" bgcolor="dddddd">간단한 게시판 (Simple Board)</td>
    </tr>
</table>
<table width=500 border="1">
    <tr bgcolor="#7eaee9" height="25">
        <th width="40" align="center">번호</th>
        <th width="380" align="center">제목</th>
        <th width="80" align="center">글쓴이</th>
    </tr>
    <logic:iterate id="list" name="boardlist">
        <tr>
            <td><bean:write name="list" property="id"/></td>
            <td><html:link page="/show.do" paramId="id" 
                        paramName="list" paramProperty="id">
                <bean:write name="list" property="title"/>
                </html:link>
            </td>
            <td><bean:write name="list" property="name"/></td>
        </tr>
    </logic:iterate>
    <tr>
        <td colspan="3">
        <logic:notEqual name="currentpage" value="1" scope="request" >
            <html:link page="/list.do" paramId="page" paramName="prevpage">
                  [이전페이지]
            </html:link>
        </logic:notEqual>
        <bean:write name="currentpage"/>
        <logic:notEqual name="currentpage" 
          value="<%= request.getAttribute("totalpage").toString() %>"
          scope="request" >
            <html:link page="/list.do" paramId="page" paramName="nextpage">
                  
[다음페이지]
             </html:link>
        </logic:notEqual>
        </td>
    </tr>
    <tr>
        <td colspan="3" align="right">
            
<html:link page="/writeForm.do">글쓰기</html:link>
       
</td>
    </tr>
</table>
<table border="1" width="500" height="28">
    <tr>
        <td align="center" bgcolor="dddddd">제작자 : 성종천(mudchobo@nate.com)</td>
    </tr>
</table>
</center>
</body>
</html>
[/code]
잘 보면 26번라인에 logic:iterate부분은 그 사이를 boardlist에 있는 수만큼 반복해서 출력하라는 것입니다. bean:write를 이용해서 값을 출력하는 것입니다.
그 다음 [다음페이지] [이전페이지] 표현 부분은 링크에다가 뒤에 paramId가 page고 nextpage값이 3이면
list.do?page=3 이라고 요청하게 되는 것입니다.

logic:notEqual은 name에 있는 값이 value값이랑 비교해서 같지 않으면 그 태그안에 있는 내용을 수행하라는 뜻입니다. 스트럿츠의 태그라이브러리가 궁금하신 분은
http://blog.naver.com/wildxing?Redirect=Log&logNo=20033916985
이 분 블로그에서 검색을 "태그라이브러리" 로 검색하면 다나옵니다. 보셔서 참조하세요.

스트럿츠의 태그라이브러리를 사용하니까 jsp코드가 매우 깔끔해집니다.
오늘은 여기까지-_-;

  1. 스트럿츠로 제작한 게시판 소스입니다.
 
Posted by 머드초보
,
 

저번에 어설픈 방명록, 로그인시스템에 이어 이번에도 어설픈 게시판을 제작해 보았습니다. 스트럿츠로 삽질하시는 분들에게 조금이나마 도움이 되었으면 합니다.

소스설명과 간단한 팁을 차후에 올리도록 하겠습니다-_-;(지금은 피곤해서-_-;)

게시판주소입니다.
http://mudchobo.tomeii.com/SimpleBoard/


소스파일입니다.



참고로 이클립스WTP 2.0 + 톰캣5.5 + JDK5.0 + 스트럿츠1.3.8 에서 제작했습니다.

ps. 가끔 broken pipe어쩌구 에러 뜨는데 F5무한연타하시면 뜹니다. 왜그러는지 잘모르겠습니다.
 
Posted by 머드초보
,
 


재미있다고 해서 이틀에 걸쳐서 다 봤습니다. 보면서 느낀점은 참 간단했습니다. 윤은혜귀엽다?-_-;

뭐 어쨌든 소설이 원작이다보니 내용자체는 말이 안됩니다만 그런것이 이 드라마의 매력인 것 같습니다.
일본에서는 이런 말도 안되는 소재의 드라마가 많이 제작 되고 있지만 우리나라 같은 경우에는 최근들어서 많이 제작되고 있는 것 같아서 참 기쁩니다-_-;

군대에 가 있을 때 X-MAN을 즐겨보곤 했는데 그 때 윤은혜가 참 귀여웠는데 지금 봐도 귀엽군요-_-; 조금 거슬리는 것이 있다면야 윤은혜의 연기가 아닌가 싶습니다-_-; 발음이 참 거슬리지만 귀엽게 들리는군요.

그리고 또 보면서 느낀점은 윤은혜 힘 쎄다? 잘 먹는다? 이런 느낌을 받았습니다. 윤은혜가 공유를 업는데 정말 잘 업습니다-_-; 그리고 신기할 정도로 잘 먹습니다. 계속 보고 있으면 먹고 있는 거 먹고 싶은 생각이듭니다-_-; 자장면, 탕수육, 김밥, 등등 먹을 때마다 먹고 싶더군요.

암튼 정말 재미있는 드라마였습니다. 아... 이제 드라마 그만 봐야하는데-_-; 공부해야하는데-_-;


사용자 삽입 이미지

업는 장면. 정말 잘 업습니다!


사용자 삽입 이미지

이번엔 업고 계단까지 올라갑니다!


사용자 삽입 이미지

업으면서 돼지업고 가는 아저씨와 대화도 합니다!


사용자 삽입 이미지

정장 입은 윤은혜. 내가 정장 입은것보다 잘어울리는군요-_-;


사용자 삽입 이미지

여장(?)도 정말 잘 어울립니다!

 
Posted by 머드초보
,
 


가끔 VMware에서 느리다고 하시는 분 계시는데 VWware Tools를 설치하면 빨라집니다. 뭐하는 것인지는 잘 모르겠지만 속도향상도 있는 것 같습니다. 설치하지 않으면 VMware에 오른쪽 하단에 설치가 안되었다고 경고문이 뜹니다.

우선 VMware에서 Solaris를 가동하기 전에 CD-ROM에서 솔라리스.iso파일을 집어넣고 있다면 auto-detect로 바꾸시길 바랍니다. 이것때문에 고생했습니다-_-; 이거 안해주면 VMware Tools를 시디에 집어 넣지 못합니다.

바꾼다음에 Solaris를 가동합니다. 부팅이 다되면 VMware에 메뉴에서 VM->Install VMware Tools를 선택합니다. 뭐라고 경고문이 뜨는데 install을 클릭하게되면 바탕화면에 VMware Tools라는 시디아이콘이 생깁니다.

더블클릭하면 tar파일이 있는데 적당한 곳에 압축을 풀고 압축파일안에 있는 vmware-install.pl을 실행하도록 합니다. 실행하면 자동으로 설치가 됩니다.

끝입니다-_-;

솔라리스 시디를 계속 넣고 있어서 하루종일 삽질했네요.


 
Posted by 머드초보
,
 


공유기를 쓰거나 유동IP인 사람들은 DHCP로 설치를 해야지 네트워크를 사용할 수 있습니다. 그런데 DHCP로 설정하면 호스트네임이 unknown으로 나타납니다. 이것을 고쳐보도록 합시다.

/etc/nodename
이 파일이 없으면 생성해주도록 합시다.
생성해서 다음과 같이 입력합니다.

Hostname <- 사용하고 싶은 hostname을 써주시고 저장합니다.

ex)
mudchobo

/etc/hostname.네트워크식별자
이 파일을 열어서 편집합시다.
Hostname <- 사용하고 싶은 hostname을 써주시고 저장합니다.

ex)
mudchobo

/etc/inet/hosts
이 파일을 열어서 편집합시다.
#
# Internet host table
#
127.0.0.1       localhost
192.168.0.3    unknown        # Added by DHCP

파일 내용이 저렇게 되어있을텐데 unknown을 바꾸고 싶은 hostname으로 변경합니다.

ex)
192.168.0.3 mudchobo # Added by DHCP

/etc/inet/ipnodes
이 파일을 열어서 편집합시다.
#
# Internet host table
#
127.0.0.1       localhost
192.168.0.3    unknown        # Added by DHCP

파일 내용이 저렇게 되어있을텐데 unknown을 바꾸고 싶은 hostname으로 변경합니다.

ex)
192.168.0.3 mudchobo # Added by DHCP

/etc/net/ticclts/hosts
이 파일을 열어서 편집합시다.
#
# Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident "@(#)hosts 1.3 03/12/07 SMI"
#
# NOTE: This file is no longer consulted and may be removed from a future
#  release of Solaris.
#
hostname hostname <- 이곳에 사용하고 싶은 hostname을 두번적어줍니다.

ex)
mudchobo mudchobo

cat /etc/net/ticots/hosts
이 파일도 위와 같이 똑같이 hostname을 두번 적어줍니다.

/etc/net/ticotsord/hosts
이 파일도 위와 같이 똑같이 hostname을 두번 적어줍니다.

재부팅하면 hostname이 변경되어 있을 것 입니다.
 
Posted by 머드초보
,