어찌하다보니 스트럿츠2를 공부하게 되었네요.
책에 있는 예제를 이클립스로 셋팅법과 간단한 예제를 소개하려고 합니다-_-;
이 책에서 톰캣플러그인으로 사용하길래 그냥 Dynamic Web Project로 만들어도 될듯해서 ^^
(예제출처 : 스트럿츠2 프로그래밍 - 현철주, 정광선, 민상기 지음)

테스트환경 : Tomcat 6.0.16 + JDK 6 u 4 + Struts 2.0.11

이클립스를 실행합니다.
File -> New -> Project -> Dynamic Web Project선택
Project name을 HelloStruts2로 하고~ ^^
Target Runtime은 톰캣 6.0으로 추가를 해봅시다 ^^ New해서 Apache Tomcat 6.0선택하고 톰캣이 설치된 경로만 지정해주면 돼요 ^^
그리고 Finish를 클릭합시다 ^^

아.....스트럿츠2를 받아야죠! http://struts.apache.org/download.cgi 여기서 Struts 2.0.11버전을 받습니다.
압축을 풀고 lib경로에 있는 파일들을 방금 만든 프로젝트경로의 lib폴더로 복사합니다.
antlr-2.7.2.jar
commons-beanutils-1.6.jar
commons-chain-1.1.jar
commons-logging-1.0.4.jar
commons-logging-api-1.1.jar
commons-validator-1.3.0.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
oro-2.0.8.jar
struts2-core-2.0.11.jar
struts-core-1.3.5.jar
xwork-2.0.4.jar

플러그인만 빼고 다 복사하면 돼요. 플러그인도 같이 복사하면 에러나요-_-; 해당 lib가 없어서 그런 것 같아요. spring plugin이런것을 사용하려면 spring lib가 있어야 하는 듯 해요 ^^

그다음 web.xml파일에 아래와 같은 filter를 추가해줍니다.
[code]
<filter>
   <filter-name>struts</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
 
<filter-mapping>
   <filter-name>struts</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
[/code]

Java Resources : src에 오른쪽 마우스를 대고 struts.xml파일을 하나 추가해줍시다.
이눔은 빌드되면서 classes폴더로 들어가게 됩니다.

struts.xml
[code]
<?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>
 <package name="default" extends="struts-default" namespace="">
 
  <action name="echo" class="example.chapter3.EchoAction">
   <result>/WEB-INF/echo.jsp</result>
  </action>
 
 </package>
</struts>
[/code]
보면 struts1이랑 비슷해요. 대신 이눔은 package라는 놈이 있어서 비슷한 놈들 끼리 묶을 수 있어요.

이제 저 example.chapter3.EchoAction을 만들어 봅시다.
Java Resources: src에 오른쪽 마우스를 대고! EchoAction클래스를 하나 만듭시다.
EchoAction.java
[code]
package example.chapter3;

public class EchoAction {
 private String echo;
 
 public String execute() throws Exception {
  return "success";
 }

 public String getEcho() {
  return echo;
 }

 public void setEcho(String echo) {
  this.echo = echo;
 }
}
[/code]
요렇게 작성을 합니다. 보면 execute가 있네요. 그리고 get, set이 있구요.

이제 action에 작성한 jsp를 작성해봅시다.
WEB-INF에 오른쪽마우스를 클릭해서 JSP를 선택해서 추가합니다.
아까 ACTION에서 작성한 echo.jsp파일을 생성합시다.
echo.jsp
[code]
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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>예제3-1: echo</title>
</head>
<body>

<s:form action="echo" theme="simple">
 <s:textfield name="echo" />
 <p/><s:property value="echo" /></p>
 <s:submit />
</s:form>
</body>
</html>
[/code]
간단히 보면 스트럿츠태그가 있습니다. 예전에 쓰던 <html:, <bean: 보다 더 좋아진 듯 합니다.
신기한 건 s:textfield해놓고, name을 echo로만 줘도 setter가 작동하는 듯 합니다-_-;
s:property도 getter가 그냥 작동하는 듯 합니다. 뭐 아직 저도 잘몰라서 뭐라 말은 못하겠네요.
어쨌든 이제 실행시켜보고 field에 뭐라고 쓰면 뭐라고 나올 껍니다-_-;

url은 http://localhost:8080/HelloStruts2/echo.action 로 요청합니다 ^^

사용자 삽입 이미지


음....더 공부를 해봐야할 것 같네요 ^^
 
Posted by 머드초보

댓글을 달아 주세요

  1. 초보자 2008.03.05 15:01  댓글주소  수정/삭제  댓글쓰기

    스트럿츠 정말 처음입니다. ^^; 위에 내용되로 따라 해보니 아래와 같은 문제가 생겼습니다.

    Cannot find the tag library descriptor for /struts-tags

    따로 설정해주는게 있는지요? 해당 페이지를 볼려고 하면 URL 경로를 어떻게 주어야하는지요?

    • BlogIcon 머드초보 2008.03.05 16:08  댓글주소  수정/삭제

      아....해당 jsp파일을 로드하는게 아니라 액션url을 요청해야해요.
      http://localhost:8080/HelloStruts2/echo.action
      echo라는 action으로 추가했으면 echo액션을 요청하는 겁니다.
      위에 안써놨네요 죄송해요 ^^

  2. 스트럿츠초보 2008.03.26 11:34  댓글주소  수정/삭제  댓글쓰기

    이클립스로 저렇게 작성하고 나서 어떻게 실행시켜야 하나요?
    이클립스에서 run해서 하면 되는건가요?
    그리고 저걸 그냥 웹브라우져에 url만 치고 들어갈수 있게 설정할라면 톰켓 어디에가다 소스파일을 위치 시켜야하는지 알려주세요..
    dgmeet@nate.com 여기로 메일좀 보내주세요.

    • 머드초보 2008.03.27 08:26  댓글주소  수정/삭제

      안녕하세요! 이클립스에 톰캣을 추가하고 그 추가한 톰캣에 해당 프로젝트를 추가하고, url요청하면 됩니다 ^^
      톰캣에 배포하려면 ANT나 WAR로 제작해서 톰캣매니저로 배포하는 방법이 있구요 ^^
      혹시 궁금사항 있으시면 mudchobo@nate.com으로 연락주세요 ^^

  3. BlogIcon Gizmo_j 2008.08.20 17:52  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    위에 있는대로 착실하게 진행을 했는대...
    404에러가 떨어지내여..ㅠㅠ
    EchoAction.java는 컴파일이 되서 build폴더에 들어 가있구여
    struts.xml 이놈두 classes 폴더에 들어가 있습니다.
    혹시
    이거 말고 사전에 머 다른거 작업해야하는게 있는건가여..?
    아~ 왜 이러지..ㅠㅠ 흑...
    이거 되면 Flex로 붙이는 방법도 찾아야 되는대...
    큰일이내여...ㅠㅠ

    • 머드초보 2008.08.21 08:32  댓글주소  수정/삭제

      음...이상하네요.
      사전에 작업같은 거 안해줘도 되는데-_-;
      이거 저도 아주 오래전에 한거라 기억이....
      web.xml에도 추가를 하셨는지요?

  4. 감사합니다 2008.10.16 00:39  댓글주소  수정/삭제  댓글쓰기

    더분에 좋은자료 감사합니다.
    몇가지 도움을 부탁하고싶습니다.(햔재의 소스 코드 기능 추가 변경)

    1. 수정또는 삭제시 별도의 페이지(비밀번호 확인)를 호출하게 하였는데.
    비밀번호 묻지 않고 MessageBox에서 진행여부를 묻고 그후 처리하는 방법으로 수정하고싶습니다.
    2. 페이지의 목록수를 콤보박스에서 입력 받아 자유로이 보기줄수를 조정하고자 할때는 어떻게
    수정해야하는지요
    3. 입력 또는 수정시에 구분값을 입력 받는경우 보통 Code TABLE에서 정의한 코드를 사용하는데
    이런경우 콤보로 입력 받는경우의 처리방법

    위 내용에 대한 도움 부탁드립니다.

    • 머드초보 2008.10.17 23:20  댓글주소  수정/삭제

      제가 스트럿츠2를 공부하려고 하다가 스프링으로 넘어가다보니 스트럿츠2를 전혀 안해봐서 모르겠네요 ㅠㅠ
      도움이 되지 못해서 죄송해요 ㅠ

  5. idoori 2009.11.09 16:32  댓글주소  수정/삭제  댓글쓰기

    앞으로 여기서 공부좀 해야겠구먼~

 

마지막입니다. 글 삭제하기 기능입니다.

이것도 글 수정하는 거랑 원리가 비슷합니다. 글삭제버튼을 누르게 되면 비밀번호를 입력하라고 나오는데 입력해서 맞으면 삭제하는 식입니다.






글삭제를 누르면 deleteForm.do를 실행합니다. 이것은 deleteForm.jsp를 실행합니다.

[code]
<html:form action="delete" method="POST" focus="pwd">
<table border="1" width="250">
    <tr bgcolor="#7eaee9">
        <td>게시물의 비밀번호를 입력하세요.</td>
    </tr>
    <tr>
        <td>
        <html:password property="pwd"/>
        <html:hidden property="id" value="<%= request.getParameter("id") %>"/>
        <html:submit value="확인"/>
        </td>
    </tr>
    <tr>
    <td>
    <html:messages id="msg" property="invalidPwd">
        <bean:write name="msg"/>
    </html:messages>
    </td>
    </tr>
</table>
</html:form>
[/code]
pwd를 입력받고 id는 파라메터로 받은 것을 delete.do에 넘겨줍니다.
delete.do를 수행하는 action태그를 보도록 합시다.

struts-config.xml
[code]
<action path="/delete"
                type="simpleboard.actions.deleteAction"
                name="DynaForm"
                scope="request"
                validate="true"
                input="/deleteForm.jsp">
</action>
[/code]

deleteAction을 수행하며 비밀번호가 맞으면 자바스크립트를 통해 삭제가 성공했다는 메시지를 띄우고 틀리면 deleteForm.jsp를 다시 실행합니다.
deleteAction을 보도록 합시다.

deleteAction.java
[code]
public class deleteAction extends Action{
    public ActionForward execute(   ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception{
       
        DynaActionForm deleteForm = (DynaActionForm)form;
        BoardDAO dao = new BoardDAO();
        ActionMessages errors = new ActionMessages();
       
        int id = (Integer)deleteForm.get("id");
        String pwd = (String)deleteForm.get("pwd");
        if (dao.CheckPwd(id, pwd)) {
            dao.Delete(id);
            response.setContentType("text/html; charset=euc-kr");
            PrintWriter out = response.getWriter();
            out.println("<script language='javascript'>"); 
            out.println("alert('글이 삭제되었습니다.');");
            out.println("location.href = \"list.do\";");
            out.println("</script>");
            return null;
        }
        else {
            errors.add("invalidPwd",new ActionMessage("error.pwd.invalid"));
            saveErrors(request,errors);
            return mapping.getInputForward();
        }  
    }
}
[/code]
id와 pwd를 받고, CheckPwd를 통해서 비밀번호를 체크후에 맞으면 dao의 Delete메소드를 수행한뒤 자바스크립트로 삭제되었다는 메시지를 띄운뒤 list.do로 이동합니다.
비밀번호가 틀리면 에러메시지를 추가해서 input으로 포워드합니다.

자 이제 끝났습니다.
혼자서 삽질한 느낌이 드는군요.
단 한분이라도 도움이 되었으면 좋겠습니다.

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

댓글을 달아 주세요

  1. 초보 2008.04.10 19:05  댓글주소  수정/삭제  댓글쓰기

    머드초보님홈피에서 소스코드의 표시효과에 관하여 질문드립니다.
    어덯게 하면 홈페지에 EDIT Tools처럼 번호달린 소스표시가 되는지요.

    그럼 잘 부탁드립니다.

    • 머드초보 2008.04.11 08:29  댓글주소  수정/삭제

      아네 안녕하세요 ^^
      텍스트큐브 플러그인인데요 ^^
      코드하이라이트라는 플러그인을 설치하시면 돼요 ^^
      http://gendoh.tistory.com/2510954

  2. 초보 2008.04.11 16:49  댓글주소  수정/삭제  댓글쓰기

    답변 감사합니다. ^^

  3. 유리망치 2009.04.02 16:17  댓글주소  수정/삭제  댓글쓰기

    플렉스가 아직 먼지도 모르는 초보입니다.
    참고 많이 할게요
    퍼가여

    • 머드초보 2009.04.03 23:11  댓글주소  수정/삭제

      반갑습니다^^
      저도 아직은 플렉스초보라 ^^
      근데 이 글은 Struts자료군요-_-;

 


글 수정하는 부분이 가장 구현하기 힘들었던 것 같습니다-_-;

구조는 수정버튼을 클릭했을 때에 id를 리턴받습니다. 그다음에 비밀번호를 입력받는 페이지로 이동합니다. 그 비밀번호를 입력해서 그 해당글의 비밀번호와 일치한지를 확인합니다.
일치하게 되면 수정하는 폼으로 이동합니다. 그 후 수정해서 글수정을 클릭하면 modifyAction을 통해 글을 수정하는 식으로 구현했습니다.


우선 글수정을 클릭했을 때 modifyConfirm.do를 실행합니다. 이것은 단순히 modifyConfirm.jsp를 실행합니다.
modifyConfirm.jsp를 보도록 합시다.

modifyConfirm.jsp
[code]
<html:form action="modifyForm" method="POST" focus="pwd">
<table border="1" width="250">
    <tr bgcolor="#7eaee9">
        <td>게시물의 비밀번호를 입력하세요.</td>
    </tr>
    <tr>
        <td>
        <html:password property="pwd"/>
        <html:hidden property="id" value="<%= request.getParameter("id") %>"/>
        <html:submit value="확인"/>
        </td>
    </tr>
    <tr>
    <td>
    <html:messages id="msg" property="invalidPwd">
        <bean:write name="msg"/>
    </html:messages>
    </td>
    </tr>
</table>
[/code]
여기서 볼 것은 id값도 넘겨줘야하기 때문에 hidden으로 id값을 처리해서 넘겨줍니다.
저기서도 value값을 그냥 id로 쓰면 안되더라구요. 그래서 getParameter메소드를 통해 넘겨줬습니다.
html:messages태그는 비밀번호가 틀리면 보여지게 되어있습니다.
여기서 확인버튼을 클릭하게 되면 modifyForm.do를 실행하게 됩니다.
modifyForm의 액션을 살펴봅시다.

struts-config.xml
[code]
<action path="/modifyForm"
                type="simpleboard.actions.modifyformAction"
                name="DynaForm"
                scope="request"
                input="/modifyConfirm.jsp">
            <forward name="success" path="/modifyForm.jsp"/>
 </action>
[/code]
modifyformAction을 수행하고 input으로 포워드하면 다시 modifyConfirm.jsp를 수행합니다.
성공으로 매핑하게 되면 modifyForm.jsp 즉 수정창으로 가는 겁니다.

modifyformAction클래스를 보도록 합시다.

modifyformAction.java
[code]
public class modifyformAction extends Action {

    public ActionForward execute(   ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response) throws Exception{
       
        DynaActionForm modifyconfirmForm = (DynaActionForm)form;
        ActionMessages errors = new ActionMessages();
        Board board = new Board();
        BoardDAO dao = new BoardDAO();
        HttpSession session = request.getSession();
       
        int id = (Integer)modifyconfirmForm.get("id");
        String pwd = (String)modifyconfirmForm.get("pwd");
       
        if (dao.CheckPwd(id, pwd)) {
            board = dao.findBoard(id);
            session.setAttribute("board", board);
            return mapping.findForward("success");
        }
        else {
            errors.add("invalidPwd",new ActionMessage("error.pwd.invalid"));
            saveErrors(request,errors);
            return mapping.getInputForward();
        }
    }
}
[/code]
form에 있는 내용을 받아서 우선 dao의 CheckPwd를 이용해서 체크해서 비밀번호가 맞으면 현재보드내용을 찾아서 session에 저장 후 success로 포워드합니다.
비밀번호가 틀린경우에는 메시지를 추가해서 Input으로 포워드합니다.

성공했을 경우 modifyForm.jsp로 갑니다. 살펴봅시다.

modifyForm.jsp
[code]
<bean:define id="id" name="board" property="id" type="java.lang.Integer"/>
<bean:define id="name" name="board" property="name" type="java.lang.String"/>
<bean:define id="pwd" name="board" property="pwd" type="java.lang.String"/>
<bean:define id="title" name="board" property="title" type="java.lang.String"/>
<bean:define id="content" name="board" property="content" type="java.lang.String"/>

<html:form action="modify" method="POST" focus="name">
<html:hidden property="id" value="<%= id.toString() %>"/>
<table width="500" border="1">
    <tr>
        <td width="100" bgcolor="#7eaee9">등 록 자</td>
        <td width="180" align="left">&nbsp;
        <html:text property="name" size="10"
                    maxlength="10" value="<%= name %>"/>
        </td>
        <td width="100" bgcolor="#7eaee9">비밀번호</td>
        <td width="120" align="left">&nbsp;
        <html:password property="pwd" size="10"
                        maxlength="10" value="<%= pwd %>"/>
        </td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">제 목</td>
        <td colspan="4" align="left">&nbsp;
        <html:text property="title" size="30"
                    maxlength="30" value="<%= title %>"/>
        </td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">내 용</td>
        <td colspan="4" align="left">&nbsp;
        <html:textarea property="content"
                        cols="53" rows="10" value="<%= content %>"/>
        </td>
    </tr>
    <tr>
        <td colspan="4"><font color="red"><b>
            <html:messages id="msg" property="requiredName">
                <bean:write name="msg"/><br>
            </html:messages>
            <html:messages id="msg" property="requiredPwd">
                <bean:write name="msg"/><br>
            </html:messages>
            <html:messages id="msg" property="requiredTitle">
                <bean:write name="msg"/><br>
            </html:messages>
            <html:messages id="msg" property="requiredContent">
                <bean:write name="msg"/><br>
            </html:messages></b></font>
        </td>
    </tr>
    <tr>
        <td colspan="4"><html:submit value="내용수정"/></td>
    </tr>
</table>
</html:form>
[/code]
value에다가 값을 넣으려면 bean:define을 통해서 값을 정의해야합니다. 그 후에 jsp코드를 이용해서 value에 값을 넣어야지 값이 들어갑니다. 다른방법이 있을 것 같은데 이렇게 밖에 못하겠군요-_-;
form은 modify.do를 실행합니다. modifyAction을 실행합니다.
modifyAction은 writeAction과 거의 동일합니다. 그냥 글을 써서 등록하는 형식으로 하고 다른 점이 있다면 dao의 modify를 호출해서 update를 이용하고, insert는 insert sql문을 이용해서 합니다.

이렇게하면 수정하기가 끝이납니다.

오늘도 여기까지-_-;

 
Posted by 머드초보

댓글을 달아 주세요

 


이번에는 글쓰기 부분을 설명해보겠습니다.

글쓰기를 실행할 때에는 writeForm.do를 실행하게 됩니다. writeForm.jsp로 포워드합니다.
<action path="/writeForm" forward="/writeForm.jsp"/>







writeForm.jsp를 보도록 합시다.
writeForm.jsp
[code]
<table width="500" border="1">
    <tr>
        <td width="100" bgcolor="#7eaee9">등 록 자</td>
        <td width="180" align="left">&nbsp;
        <html:text property="name" size="10" maxlength="10"/></td>
        <td width="100" bgcolor="#7eaee9">비밀번호</td>
        <td width="120" align="left">&nbsp;
        <html:password property="pwd" size="10" maxlength="10"/></td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">제 목</td>
        <td colspan="4" align="left">&nbsp;
        <html:text property="title" size="30" maxlength="30"/></td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">내 용</td>
        <td colspan="4" align="left">&nbsp;
        <html:textarea property="content" cols="53" rows="10"/></td>
    </tr>
    <tr>
        <td colspan="4"><font color="red"><b>
            <html:messages id="msg" property="requiredName">
                <bean:write name="msg"/><br>
            </html:messages>
            <html:messages id="msg" property="requiredPwd">
                <bean:write name="msg"/><br>
            </html:messages>
            <html:messages id="msg" property="requiredTitle">
                <bean:write name="msg"/><br>
            </html:messages>
            <html:messages id="msg" property="requiredContent">
                <bean:write name="msg"/><br>
            </html:messages></b></font>
        </td>
    </tr>
    <tr>
        <td colspan="4"><html:submit value="글쓰기"/></td>
    </tr>
</table>
[/code]
html:form은 그냥 html태그에 있는 것과 거의 비슷한 역할을 합니다.
마지막 부분에 html:messages는 메시지중에 property값과 같은 메세지가 있으면 출력하라는 뜻입니다.
form의 action은 write.do를 수행하게 됩니다.
[code]
<action path="/write"
    type="simpleboard.actions.writeAction"
    name="DynaForm"
    scope="request"
    validate="true"
    input="/writeForm.jsp">
</action>
[/code]
write.do를 수행하면 writeAction클래스를 수행하고 만약 mapping.getInputForward();을 리턴받게 되면 writeForm.jsp를 다시 수행하라는 뜻입니다. 여기서 저 메시지를 리턴받게 되는 경우는 이름, 제목, 내용, 비번을 쓰지 않은 경우가 됩니다.

writeAction을 보도록 합시다.

writeAction.java
[code]
public class writeAction extends Action {

    public ActionForward execute(   ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception{
       
        DynaActionForm writeForm = (DynaActionForm)form;
        ActionMessages errors = new ActionMessages();
        Board board = new Board();
        BoardDAO dao = new BoardDAO();
        int errorCount = 0;
       
        board.setName((String)writeForm.get("name"));
        board.setPwd((String)writeForm.get("pwd"));
        board.setTitle((String)writeForm.get("title"));
        board.setContent((String)writeForm.get("content"));
       
        if (board.getName().equals("")){
            errors.add("requiredName",new ActionMessage("error.name.required"));
            errorCount++;
        }
       
        if (board.getPwd().equals("")){
            errors.add(
                "requiredPwd",new ActionMessage("error.pwd.required"));
            errorCount++;
        }
       
        if (board.getTitle().equals("")){
            errors.add(
                 "requiredTitle",new ActionMessage("error.title.required"));
            errorCount++;
        }
        if (board.getContent().equals("")){
            errors.add(
                 "requiredContent",new ActionMessage("error.content.required"));
            errorCount++;
        }
       
        if (errorCount > 0){
            saveErrors(request,errors);
            return mapping.getInputForward();
        }
        dao.Insert(board);
       
        response.setContentType("text/html; charset=euc-kr"); 
        PrintWriter out = response.getWriter(); 
        out.println("<script language='javascript'>"); 
        out.println("alert('글쓰기에 성공했습니다.');"); 
        out.println("location.href = \"list.do\";"); 
        out.println("</script>");  

        return null;
    }
}
[/code]
폼으로부터 값을 받고 값이 비었으면 에러메시지를 추가하여 에러메시지가 한개라도 있으면 다시 writeForm.jsp를 실행하도록 input으로 포워드합니다.
제대로 입력이 되었으면 dao의 Insert메소드를 실행해서 삽입후에 자바스크립트코드를 보여주기 위해서 out객체를 이용해서 확인창 하나띄운뒤 list.do로 가도록 합니다. 이 때 액션으로 이동하는것이 아니라 자바스크립트 코드로 이동하도록 했습니다.
out객체를 이용해서 자바스크립트코드를 적었는데 return을 forward값으로 리턴해버리면 자바스크립트가 그냥 씹혀버립니다-_-;(이유는 모르겠습니다-_-;)

오늘도 여기까지-_-;

스트럿츠로 제작한 게시판 소스입니다.

 
Posted by 머드초보

댓글을 달아 주세요

  1. 김성운 2008.02.01 14:20  댓글주소  수정/삭제  댓글쓰기

    return을 forward값으로 리턴 하면 자바스크립트가 안먹히는 이유가요..

    out.flush(); <-- 이부분이 없어서 그런거 같아요..

    직접적으로 HTML에 자바스크립트를 쓰는 부분이 없어서.

    다른분들이 보시고 참고 하셨으면 하네욤 ㅋ

  2. 지멋대루 2008.02.12 18:26  댓글주소  수정/삭제  댓글쓰기

    와우!!!!!!!!!!!!!!!!!!

    엉뚱한키워드로 들어오게됬는데 제가 원하던게 딱!!!있군요~ 오호!!

    감사히 봤습니다^^

 

이번에는 show, 글을 클릭했을 때에 글을 보여주는 부분을 설명하겠습니다.

우선 list.do를 실행하게 되면 글목록이 나오는데 여기서 글을 클릭하는 링크는 "show.do?id=숫자" 입니다.
해당 글의 id를 요청하게 됩니다.

show의 액션매핑의 액션을 보도록합시다.
<action path="/show"
    type="simpleboard.actions.showAction"
    scope="request">
   <forward name="success" path="/show.jsp"/>
  </action>

showAction클래스를 실행하게 됩니다.
showAction클래스를 보도록 합시다.

showAction.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 simpleboard.model.Board;
import simpleboard.model.BoardDAO;

public class showAction extends Action{
    public ActionForward execute(   ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception{
       
        BoardDAO dao = new BoardDAO();
        Board board = new Board();
        HttpSession session = request.getSession();
       
        int id = Integer.parseInt(request.getParameter("id"));
        board = dao.findBoard(id);
        board.setContent(dao.convertHtmlBr(board.getContent()));
       
        session.setAttribute("board", board);
       
        return mapping.findForward("success");
    }
}
[/code]
id를 파라메터로 받고 그것을 dao에 있는 findBoard메소드에 넘겨줍니다. 이 메소드는 해당 id에 있는 글, 제목 등을 리턴시켜줍니다.

그리고 중요한 것이 converHtmlBr이라는 메소드를 실행하게 되는데 이것은 content에 있는 내용에 "\n"을 모두 <br>로 바꿔주는 메소드입니다. 이것을 안해주면 html에서는 \n을 인식못하므로 <br>로 바꿔줘야합니다.

바꾼다음에 현재글을 세션에 저장합니다.

이제 show.jsp소스코드를 보도록 합시다.

show.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>
        <td width="100" bgcolor="#7eaee9">등록자</td>
        <td width="400" align="left">
        <bean:write name="board" property="name"/>
        </td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">제 목</td>
        <td align="left">
        <bean:write name="board" property="title"/>
        </td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">내용</td>
        <td align="left">
        <bean:define id="content" name="board" property="content"/>
        <%= content %>
        </td>
    </tr>
    <tr>
        <td colspan="2" align="right">
        <html:link page="/modifyConfirm.do" paramId="id"
                        paramName="board" paramProperty="id">
        수정</html:link>
        <html:link page="/deleteForm.do" paramId="id"
                        paramName="board" paramProperty="id">
        삭제</html:link> 
        <html:link page="/list.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]
여기서 board에 있는 값을 bean:write태그를 통해서 출력을 합니다.
중간쯤 보면 <bean:define id="content" name="board" property="content"/><%= content %>
content부분은 define으로 정의를 해서 jsp코드를 사용합니다. 이것은 왜그런지는 잘 모르겠지만 그냥 bean:write해버리면 <br>이 그냥 나타나버립니다-_-;
그래서 저렇게 정의를 한 뒤 jsp코드로 사용해야 합니다.

그리고 수정이나 링크부분은 param으로 id번호를 넘겨줘서 링크를 시킵니다.

오늘은 여기까지!-_-;

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

댓글을 달아 주세요