<< 액션클래스에서 세션 얻어오기 >>
 1) SessionAware인터페이스를 상속받는다.
 2) setSession메소드를 오버라이딩한다.(파라미터에 세션객체가 저장되어 온다)



1) login.jsp
2) main.jsp
3) LoginAction.java
4) LogoutAction.java
5) MembersDao.java
6) MembersVo.java
7) Mybatis 관련 orm파일들
  7-1) SqlSessionFactoryService.java
  7-2) MembersMapper.xml
  7-3) mybatis-config.xml
8) example.xml ( Action 매핑 xml )

-------------------------------------------------------------------------

1) login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
<style type="text/css">
    span{
        color:red;
        font-size: 10pt;
    }
</style>
</head>
<body>
<h2>로그인하기</h2>
<form method="post"action="login.action">
    아이디 <input type="text" name="id"/><span>${fieldErrors.errId }</span><br/>
    비밀번호 <input type="password" name="pwd"/><span>${fieldErrors.errPwd }</span><br/>
    <span>${errMsg }</span><br/>
    <input type="submit" value="로그인"/>
</form>
</body>
</html>














2) main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>
<c:choose>
    <c:when test="${empty sessionScope.id }">
        <a href="loginForm.action">로그인하기</a><br/>
    </c:when>
    <c:otherwise>
        <div>
            ${sessionScope.id }님 환영합니다.<br/>
            <a href="logout.action">로그아웃</a>
        </div>
    </c:otherwise>
</c:choose>

<p>
여기는 main.jsp입니다.....
</p>
</body>
</html>











3) LoginAction.java

package test.action;

import java.util.HashMap;
import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

import test.dao.MembersDao;
import test.vo.MembersVo;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupportimplements SessionAware{
    private String id;
    private String pwd;
    private String errMsg;//오류메시지를 담을 변수
    //스트럿츠에서는 SessionMap으로 세션처리를 한다.
    private SessionMap<String,Object> session;
    public void setId(String id) {
        this.id = id;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getErrMsg() {
        return errMsg;
    }
   //파라미터 session에 세션객체가 자동으로 담겨져 있다.
    @Override
    public void setSession(Map<String, Object> session) {
        //멤버변수 session에 옮겨 담기
        this.session=(SessionMap<String,Object>)session;
    }

   //execute메소드가 호출되기 전에 미리 호출되며 유효성체크를 하는 기능
    //에러가 하나라도 추가되면 리절트의 input으로 설정된 페이지로 자동이동된다.
    @Override
    public void validate() {
        //사용자가 아이디를 입력하지 않은경우
        if(id==null || id.length()==0){
            //에러를 추가한다.
            addFieldError("errId","아이디를 입력하세요!");
        }
        if(pwd==null || pwd.length()==0){
            addFieldError("errPwd","비밀번호를 입력하세요!");
        }
    }

    @Override
    public String execute() throws Exception {
        //싱글톤객체인 dao얻어오기
        MembersDao dao=MembersDao.getInstance();

        //검색조건인 아이디와 비밀번호를 담긴위한 Map객체
       HashMap<String,String> map=new HashMap<>();
        map.put("id",id);
        map.put("pwd",pwd);

        MembersVo vo=dao.isMember(map);
        if(vo!=null){
            //세션에 로그인정보(id) 담기
           session.put("id",id);
            return SUCCESS;
        }else{
            errMsg="아이디 또는 비밀번호가 맞지 않아요!";
            return LOGIN;//로그인페이지로 이동
        }
    }
}


4) LogoutAction.java

package test.action;

import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class LogoutAction extends ActionSupport implements SessionAware{
    private SessionMap<String, Object> session;

    @Override
    public void setSession(Map<String, Object> session) {
        this.session = ( SessionMap<String,Object>)session;
    }
    public String logout(){
        //로그인 할때 담은 id제거
       session.remove("id");
        return SUCCESS;
    }   
}


5) MembersDao.java

package test.dao;

import java.util.HashMap;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import test.orm.SqlSessionFactoryService;
import test.vo.MembersVo;

//MembersDao dao=MembersDao.getInstance();
//싱글톤패턴의 DAO
public class MembersDao {
    private static MembersDao instance=new MembersDao();
    public static MembersDao getInstance() {
        return instance;
    }
    private SqlSessionFactory sqlSessionFactory;
    private MembersDao() {
        sqlSessionFactory=SqlSessionFactoryService.getSqlSessionFactory();
    }
    public MembersVo isMember(HashMap<String,String> map){
        SqlSession sqlSession=null;
        try{
            sqlSession=sqlSessionFactory.openSession();
            return sqlSession.selectOne("ismember",map);
        }finally{
            if(sqlSession!=null) sqlSession.close();
        }
    }
}

6) MembersVo.java

package test.vo;

import java.sql.Timestamp;
public class MembersVo {
    private String id;
    private String pwd;
    private String email;
    private String phone;
    private Timestamp regdate;   
    public MembersVo() {}
    public MembersVo(String id, String pwd, String email, String phone,
            Timestamp regdate) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.email = email;
        this.phone = phone;
        this.regdate = regdate;
    }
    public Timestamp getRegdate() {
        return regdate;
    }
    public void setRegdate(Timestamp regdate) {
        this.regdate = regdate;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }   
    @Override
    public String toString() {
        return "MembersVo [id=" + id + ", pwd=" + pwd + ", email=" + email
                + ", phone=" + phone + ", regdate=" + regdate + "]";
    }
}




7) Mybatis 관련 orm파일들

7-1) SqlSessionFactoryService.java


package test.orm;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionFactoryService {
    private static SqlSessionFactory sqlSessionFactory;   
    //static멤버변수를 초기화할때는 static블록을 사용한다.(생성자x)
    static{
        try{
            InputStream is=
                    Resources.getResourceAsStream("test/orm/mybatis-config.xml");
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        }catch(IOException ie){
            System.out.println(ie.getMessage());
        }
    }   
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}


7-2) MembersMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test.orm.MembersMapper">
    <select id="ismember" parameterType="hashmap"
                                        resultType="test.vo.MembersVo">
        select * from members
        where id=#{id} and pwd=#{pwd}
    </select>
</mapper>



7-3) mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   
    <!--////////   접속할 DB서버에 대한 정보 설정  /////////////-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
                <property name="username" value="scott" />
                <property name="password" value="tiger" />
            </dataSource>
        </environment>
    </environments>
    <!--///////  sql구문이 들어있는 SQL Mapper파일 포함 ////////// -->
    <mappers>
        <mapper resource="test/orm/MembersMapper.xml" />
    </mappers>
</configuration>



8) example.xml ( Action 매핑 xml )

<?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="example" namespace="/" extends="default">
        <!-- 로그인페이지로 이동하는 액션 -->
        <action name="loginForm">
            <result>/login/login.jsp</result>
        </action>
        <action name="login" class="test.action.LoginAction">
             <result name="input">/login/login.jsp</result>
             <result name="login">/login/login.jsp</result>
            <result name="success">/main.jsp</result>
        </action>

        <!--
            method를 지정하지 않으면 기본으로 설정된 execute메소드가
            호출되고 다른 이름의 메소드를 호출하려면 호출할 메소드 이름을 적는다.
         -->
        <action name="logout" class="test.action.LogoutAction" method="logout">
            <!-- 리다이렉트방식으로 페이지 이동하기 -->
            <result name="success" type="redirect">/main.jsp</result>
        </action>
    </package>
</struts>













; action클래스에서 validate를 사용하면 유효성검증 후 다시 페이지로 메시지를 보내 화면에 뿌린다.
; 자바스크립트로 검증할수 없을 경우 위와 같이 검증이 가능하다.




클라이언트에서 submit된 파라미터를 vo객체에 한번에 setter하기.
; 하나씩 setter메소드를 호출해도 되지만 vo객체를 선언하고 담으면 편리하다.
; action클래스에서 인터페이스 Preparable, ModelDriven을 구현한다.


1) insert.html / success.jsp / error.jsp
2) MemberAction.java ( test.action 패키지 )
3) MembersDao.java ( test.dao )
4) MembersVo.java ( test.vo )
5) Mybatis 관련 orm파일
    5-1) SqlsessionFactoryService.java
    5-2) MembersMapper.xml
    5-3) mybatis-config.xml
6) example.xml ( struts action매핑 xml )

-----------------------------------------------------------------------------------

1) insert.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>
<h1>회원가입</h1>
<form method="post" action="member.action">
    아이디<input type="text" name="id"/><br/>
    비밀번호<input type="text" name="pwd"/><br/>
    이메일<input type="text" name="email"/><br/>
    전화번호<input type="text" name="phone"/><br/>
    <input type="submit" value="가입"/>
</form>
</body>
</html>















success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
회원가입에 성공하셨습니다.<br/>
<a href="main.jsp">메인으로 이동</a>
</body>
</html>






error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
<h1>회원가입에 실패했습니다.</h1>
<a href="main.jsp">메인페이지로 이동</a>
</body>
</html>




2) MemberAction.java ( test.action 패키지 )

package test.action;

import test.dao.MembersDao;
import test.vo.MembersVo;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public class MemberAction extends ActionSupport
                         implements Preparable, ModelDriven<MembersVo>{
    private MembersVo vo;
    // execute메소드가 호출되기 전에 호출되면
    // execute메소드가 실행되기 위한 준비작업을 한다.
    @Override
   public void prepare() throws Exception {
        vo = new MembersVo();
   }
    //
    @Override
    public MembersVo getModel() {
       return vo;
   }

    @Override
    public String execute() throws Exception {
        System.out.println("vo:" + vo);
        MembersDao dao=new MembersDao();
        int n = dao.insert(vo);
        if(n>0){
            return SUCCESS;
        }else{
            return ERROR;
        }
    }
}



3) MembersDao.java ( test.dao )

package test.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import test.orm.SqlSessionFactoryService;
import test.vo.MembersVo;

public class MembersDao {
    private SqlSessionFactory sqlSessionFactory;
   
    public MembersDao(){
        sqlSessionFactory=SqlSessionFactoryService.getSqlSessionFactory();
    }
   
    public int insert(MembersVo vo){
        SqlSession sqlSession = null;
        try{
            sqlSession = sqlSessionFactory.openSession();
            int n = sqlSession.insert("insert", vo);
            if(n>0){
                sqlSession.commit();
            }
            return n;
        }finally{
            if(sqlSession!=null) sqlSession.close();
        }
    }
    public List<MembersVo> getList(){
        SqlSession sqlSession = null;
        try{
            sqlSession = sqlSessionFactory.openSession();
            return sqlSession.selectList("list");
        }finally{
            if(sqlSession!=null) sqlSession.close();
        }
    }
}



4) MembersVo.java ( test.vo )

package test.vo;

import java.sql.Date;
public class MembersVo {
    private String id;
    private String pwd;
    private String email;
    private String phone;
    private Date regdate;
   
    public MembersVo() {}

    public MembersVo(String id, String pwd, String email, String phone,
            Date regdate) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.email = email;
        this.phone = phone;
        this.regdate = regdate;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Date getRegdate() {
        return regdate;
    }
    public void setRegdate(Date regdate) {
        this.regdate = regdate;
    }
    @Override
    public String toString() {
        return "MembersVo [id=" + id + ", pwd=" + pwd + ", email=" + email
                + ", phone=" + phone + ", regdate=" + regdate + "]";
    }
}



5) Mybatis 관련 orm파일

5-1) SqlsessionFactoryService.java

package test.orm;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionFactoryService {
    private static SqlSessionFactory sqlSessionFactory;   
    //static멤버변수를 초기화할때는 static블록을 사용한다.(생성자x)
    static{
        try{
            InputStream is=
                    Resources.getResourceAsStream("test/orm/mybatis-config.xml");
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        }catch(IOException ie){
            System.out.println(ie.getMessage());
        }
    }   
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}



5-2) MembersMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test.orm.MembersMapper">
    <insert id="insert" parameterType="test.vo.MembersVo">
        insert into members
        values(#{id}, #{pwd}, #{email},#{phone}, sysdate )
    </insert>
    <select id="list" resultType="test.vo.MembersVo">
        select * from members
    </select>

</mapper>



5-3) mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   
    <!--////////   접속할 DB서버에 대한 정보 설정  /////////////-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
                <property name="username" value="scott" />
                <property name="password" value="tiger" />
            </dataSource>
        </environment>
    </environments>
    <!--///////  sql구문이 들어있는 SQL Mapper파일 포함 ////////// -->
    <mappers>
        <mapper resource="test/orm/MembersMapper.xml" />
    </mappers>
</configuration>

 

 



6) example.xml ( struts action매핑 xml )

<?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="example" namespace="/" extends="default">
        <!-- 액션매핑하기 -->
        <action name="member" class="test.action.MemberAction">
            <result name="success">/view/success.jsp</result>
            <result name="error">/view/error.jsp</result>
        </action>
    </package>
</struts>

방법2) ActionSupport클래스를 상속받아 만들기


1) insert.html
2) insertOk.jsp
3) InsertAction.java
4) struts.xml
5) example.xml (action 매핑. struts.xml에 include됨 )

환경설정은 Struts2 #01과 동일.

------------------------------------------------------------------------------

1) insert.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="insert.action" >
        이름<input type="text" name="name" /><br/>
        나이<input type="text" name="age" /><br/>
        전화<input type="text" name="phone" /><br/>
        <input type="submit" value="가입" /><br/>
    </form>
</body>
</html>










; 이름,나이,전화번호를 입력하고 가입버튼(submit)하면 insertOk로 결과 응답.



2) insertOk.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
<h1>회원 정보</h1>
${ result }
</body>
</html>









; action클래스를 통해 받은 내용.


3) InsertAction.java
;방법 2) ActionSupport 이용
; 파라미터 받을 때는 setter
; 값을 응답할때는 getter 만들어 사용한다.


package test.action;

import com.opensymphony.xwork2.ActionSupport;

public class InsertAction extends ActionSupport{
    private String name;
    private int age;
    private String phone;
    private String result;
   
    //setter 메소드가 존재하면 파라미터값들이 자동 지정
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getResult() {
        return result;
    }
    @Override
    public String execute() throws Exception {
        result="이름:" + name +
               "나이:" + age +
               "전화:" + phone;
        return SUCCESS;
    }
}



4)  struts.xml

<?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>
    <package name="default" namespace="/" extends="struts-default">
    </package>

    <include file="example.xml"/>
</struts>


5) example.xml

<?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="example" namespace="/" extends="default">
        <!-- 액션매핑하기 -->
        <action name="test" class="test.action.MyTestAction">
            <result name="success">/view/result.jsp</result>
        </action>
        <action name="insert" class="test.action.InsertAction">
            <result name="success">/view/insertOk.jsp</result>
        </action>
    </package>
</struts>



<< 액션클래스 만들기(컨트롤러 역할) >>

방법1) Action인터페이스를 상속받아 만들기

방법2) ActionSupport클래스를 상속받아 만들기

방법3) POJO(Plain Old Java Object)기반으로 만들기-어떠한 컨테이너나 프레임워크에 종속적이지 않은 평범한 자바객체

class TestAction{ //POJO기반(O)
..
}
class TestAction extends HttpServlet{ //POJO기반(X)
..
}


 

struts 예제 설정 >>
1. WEB-INF 밑에 
     1) classes 폴더 생성
            --> xml파일 생성. 
                - struts.xml 
                - example.xml  (action )
     2) web.xml 설정. ( struts )
     3) lib에 관련 라이브러리 복사




2. 간단한 데이터 요청 예제
1) main.html ( 1,2 값을 action으로 넘겨서 결과를 result.jsp로 받는다. )
2) result.jsp
3) MyTestAction.java ( test.action 패키지 )
4) struts.xml
5) example.xml (action 매핑. struts.xml에 include됨 )



1) main.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>
<a href="test.action?data=1">오늘의 운세보기</a><br/>
<a href="test.action?data=2">오늘의 뉴스보기</a><br/>
</body>
</html>








2) result.jsp
: 결과

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
${ result }
</body>
</html>












3) MyTestAction.java
:  방법 1)  Action인터페이스를 상속받아 만들기

package test.action;

import com.opensymphony.xwork2.Action;
public class MyTestAction implements Action {
    private String data;
    private String result;

   //setter메소드가 존재하면 파라미터로 전송된 값이 멤버변수에 저장된다.
    public void setData(String data) {
        this.data = data;
    }

    //getter메소드가 존재하면 뷰페이지에서 출력이 가능하다.
    public String getResult() {
        return result;
    }

    @Override
    public String execute() throws Exception {
        if(data.equals("1")){
            result="오늘의 운세:하루죙일 졸림~~~~";
        }else if(data.equals("2")){
            result="뉴스:밤되면 잠이 깸~~~";
        }
        return SUCCESS;
    }
}


4)  struts.xml

<?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>
    <package name="default" namespace="/" extends="struts-default">
    </package>

    <include file="example.xml"/>
</struts>


5) example.xml


<?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="example" namespace="/" extends="default">
        <!-- 액션매핑하기 -->
       <action name="test" class="test.action.MyTestAction">
           <result name="success">/view/result.jsp</result>
        </action>
        <action name="insert" class="test.action.InsertAction">
            <result name="success">/view/insertOk.jsp</result>
        </action>
    </package>
</struts>

* controller 부분이 바뀐다.


환경설정 >

1. 사이트 접속  - 다운로드

http://www.apache.org/

  • Struts


  • Apache Struts 2.3.8 GA  다운로드/압축해제


    2. 라이브러리 복사

    압축해제 후 \struts-2.3.4\apps 밑에 struts2-blank.war 압축풀고
    그밑에 \WEB-INF\lib의 라이브러리 복사해서 사용해도 된다.( 이예제 사용을 위해 ) 

    3. WEB-INF 밑에





















    ; classes폴더밑에 xml2개 복사. ( struts2-blank.war에서 )

    ; web.xml은 filter역할. 내용은 struts2-blank.war에서 web.xml내용 복사.

    ; 구성완료.



    (1) web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

        <display-name>Struts Blank</display-name>

        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>

        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/-</url-pattern>
        </filter-mapping>

        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
        </welcome-file-list>

    </web-app>


    (2) struts.xml

    <?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>
        <package name="default" namespace="/" extends="struts-default">
        </package>

       <include file="example.xml"/>
    </struts>

    (3) example.xml
    <?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="example" namespace="/" extends="default">
            <!-- 액션매핑하기 -->
            <action name="test" class="test.action.MyTestAction">
                <result name="success">/view/result.jsp</result>
            </action>
           
        </package>
    </struts>

    + Recent posts