웹개발 공부/struts

스트럿츠2 동작원리

붉은아네모네 2017. 4. 3. 18:20

스트럿츠2 동작원리 이다.

웹페이지에서 액션 요청  (HelloWorld.action)

-> 액션 name="HelloWorld" 인 것을 찾음

-> name="HelloWorld" 이 있는 파일에서 result name="success"></result  의 사이( > </) 에 있는 파일명 jsp   (예. helloworld.jsp) 에 리절트 코드를 표출해줌

--> 리절트 코드는 result name="success" 와 return 반환값 을 찾아서 그 코드값을 불러와서 jsp에 표출




2017. 04. 04. 화 추가내용

강사님의 1:1 도움으로 배운것은

프로젝트 실행시 가장 먼저 실행되는것은 WEB-INF 폴더에 web.xml 이며

여기에 웰컴파일 이라는 태그로 지정되어있는 파일은 url 에 파일명이 없어도 자동으로 읽어와 실행한다고 한다.

만약 404 에러가 뜨면 여기를 한번 참고해 보자.

스트러츠2 의 구동 방식에 대해서 배웠다

스트러츠2 의 구동방식은

struts 를 쓰기위해 라이브러리 가 필요하고

만약 struts.xml 스트러츠 파일을 생성해 작성할 땐

(src 우클릭후 other 에서 xml 을 검색해 파일을 생성하자 file Name 에다가 struts 입력후 피니시)


<?xml version="1.0" encoding="UTF-8" ?> ----------------------------------------기본설정

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">-------------------------라이브러리에 struts-2.3.dtd 에서 퍼옴.


<struts>

<constant name="struts.action.extension" value="kmj"/>---------url 에 .action 이라고 하는것을 .kmj 라고 바꾼다.

<!--위의 contanturl에 붙이는 ~~.action 을 ~~.kmj 로 바꿔주는 것 이다.-->

<!-- <constant name="struts.multipart.saveDir" value="E:/Project/workspase/Exam0331/WebContent/files/"/> -->

<constant name="struts.multipart.maxSize" value="10485760"/>

    <package name="default" namespace="/" extends="struts-default, json-default">

---------namespace="/"는 절대경로인 "WEB-INF/~" 를  "/~" 로 만든다는 의미이다.

---------struts 에서 자주 사용하는 인터셉터들을 사용할때마다 선언하지 않게끔 extends를 통해 상속(extends) 받는다.

        <action name="index">---------여기서 name 은 url 이고 실제 사용할 때 (http://localhost:8090/Exam0331/index.kmj) 처럼 쓴다.

--------- 여기서 아래 주석처리된 것과 다르게 클래스나 메소드를 안쓰는 이유는 단순히 result에 있는 경로의 파일을 실행하기만 하기 때문.

            <result>/WEB-INF/jsp/index.jsp</result>---------위 경로로 이동되면 사용할 파일경로 이다

        </action>

        

<!--          <action name="test4" class="com.java.TestAction" method="execute5"> -->

---------class=""는 클래스파일의 위치를 말하며 method=""는 해당 파일중 이 메소드명과 일치하는 메소드를 읽겠다는 의미이다.

<!--          <result>/WEB-INF/jsp/test.jsp</result> -->

<!--          </action> -->

        

        <action name="view">

        <result name="success">/WEB-INF/jsp/test2.jsp</result>

---------여기서 name은 쓸필요없고 이유는 단지 test2.jsp를 불러서 화면을 보여주려고 하는 것이기 때문이다.

        </action>

        <action name="*!*" class="com.java.{1}" method="{2}">

---------*!* 는 {1}!{2} 를 의미하면서도 url이다. 또한 1은 클래스명, 2는 메소드명 이다.

<result name="success" type="json"/>

---------success는 선택된 {2} 메소드의 return 값을 받기위해 있는 것이다.

        </action>

        <action name="json" class="com.java.JsonAction">

---------class="" 는 해당 클래스를 읽는것이다. name은 위에서 언급한 url이다.

        <result type="json"/>

---------type="json"은 불러온 클래스의 return 을 json 타입으로 받겠다는 의미이다.

        </action>

    </package>

    <include file="struts2.xml"/>

---------struts2.xml 을 그대로 퍼와서 포함시키겠다는 의미이다.

</struts>