Cute Apple
본문 바로가기
개발/jsp

jsp 댓글 게시판(MyBatis / Ajax / Maven / Lombok) & 세션관리

by 미댕댕 2021. 6. 25.

MyBatis란❓

정의: 퍼스시턴스 계층의 프레임워크

       (퍼시스선트 계층 : MVC패턴의 5가지 계층 중에서 데이터 처리를 담당한느 계층)
이유: DAO작성시 SQL문을 수행하기 위해 너무 많은 상투적 코드가 사용됨
       (효율적이지 못한 부분이 있다)
장점: mybatis  프레임워크를 이용하면 개발자가 감당할 많은 처리 부분을
       프레임워크가 대신 처리해주므로, 개발자는 오직 쿼리에 집중할 수 있다.
역사: 원래 ibatis 였으나 ibatis 프로젝트가 종료되어, mybatis 프로젝트로 전환됨

 

 

Ajax란

정의 : xml에 기반한 종합기술로 비동기 자바스크립트 xml을 줄인말로 자바스크립트로

        http 요청을 보내서 xml 응답을 받아 사용하는 기술

이유 : 웹에서 액티브X, 플래시 또는 자바애플릿등에 의존했던 사용성 및 접근성, 응답성의 향상이다.

 

Maven이란

정의 : Apache 사에서 만든 빌드 Tool

        pom.xml 파일을 통해 정형화된 빌드 시스템으로 프로젝트를 관리해준다.

 

빌드란?

-프로젝트를 이한 작성한 java 코드나 여러 자원들(.xml, .jar, .properties)를 JVM 이나 Tomcat같은 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물

 

Lombok

정의 : Java의 라이브러리로 반복되는 메소드를 Annotation 을 사용해서 자동으로 작성해주는 라이브러리

(@Data / @Getter / @Setter / @AllArgsConstructor 등..)

 

 

 


Maven 사용

- Eclipse에서 projcet 를 Maven 으로 전환시 아래와 같이 전환가능

 

- maven 전환 시 pom.xml 파일이 생성되는데 빌드를 위하여 <dependencies>안에 자원을 등록함

>> https://mvnrepository.com/ 에서 필요한 자원 검색가능

- 자원 등록이 되면 아래오 같이 생성이 됨

 

 

Maven 은 WEB-INF의 lib에서 .jar파일을 build path 로 등록한 것과 같다.

 

 

 


Lombok 사용

- Maven에서 lombok 자원을 등록후 Annotation 을 사용하면 자동으로 Getter/Setter가 생성이 된다.

 

 


Mybatis 사용

 

-Mybatis 사용을 위한 package

 

 

<Config.xml>

- https://mybatis.org/mybatis-3/ko/getting-started.html 참고하여 config를 설정하자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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>
    <typeAliases>
        <typeAlias type="com.koreait.site0622.model.domain.Board"         alias="Board"/>
        <typeAlias type="com.koreait.site0622.model.domain.Member"     alias="Member"/>
        <typeAlias type="com.koreait.site0622.model.domain.Dept"             alias="Dept"/>
        <typeAlias type="com.koreait.site0622.model.domain.Emp"             alias="Emp"/>
        <typeAlias type="com.koreait.site0622.model.domain.News"             alias="News"/>
        <typeAlias type="com.koreait.site0622.model.domain.Comments"             alias="Comments"/>
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="JNDI">
                <property name="data_source" value="java:comp/env/jndi/mysql"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/koreait/site0622/model/mybatis/BoardMapper.xml" />
        <mapper resource="com/koreait/site0622/model/mybatis/MemberMapper.xml" />
        <mapper resource="com/koreait/site0622/model/mybatis/DeptMapper.xml" />
        <mapper resource="com/koreait/site0622/model/mybatis/EmpMapper.xml" />
        <mapper resource="com/koreait/site0622/model/mybatis/NewsMapper.xml" />
        <mapper resource="com/koreait/site0622/model/mybatis/CommentsMapper.xml" />
    </mappers>
</configuration>
cs

 

 

 

 

<MybatisConfigManager.java>

- https://mybatis.org/mybatis-3/ko/getting-started.html 참고하여 SqlSessionFactory를 빌드하자

- singleton으로  SqlSessionFactory 객체안의 SqlSession을 가져다 쓰자(Factory 안에 session들이 모여살기 때문에)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.koreait.site0622.model.mybatis;
 
import java.io.IOException;
import java.io.InputStream;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
//Mybatis의 설정파일 xml을 읽어들이는 클래스
public class MybatisConfigManager {
    SqlSessionFactory sqlSessionFactory;
    private static MybatisConfigManager instance;
    
    private MybatisConfigManager() {
        //mybatis의 설정파일의 위치
        //xml은 .java 즉 클래스가 아니다. 따라서 패키지에 들어있는 xml은 일반리소스로 취급하자. 
        //따라서 접근 경로는 일반 디렉토리 취급하면 된다!!
        String resource = "com/koreait/site0622/model/mybatis/config.xml";
        
        try {
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //SqlSession 객체로 개발자는 쿼리문을 수행할 수 있고, 이 이 SqlSession객체를 모아놓은 
            //객체를 SqlSessionFactory라 한다.
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    //누구든지 이 객체의 인스턴스를 가져가려면, new할수 없고, 오직 아래의 getInstance() 메서드를 통해서만 
    //가져갈수 있도록 제한하자
    public static MybatisConfigManager getInstance() {
        if(instance==null) {
            instance = new MybatisConfigManager();
        }
        return instance;
    }
    
    //쿼리수행용 SqlSession을 반환받아갈수 있는 메서드 정의 
    public SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
    
    //다 사용된 SqlSession 반납 
    public void closeSession(SqlSession sqlSession) {
        sqlSession.close();
    }
    
}
 
 
 
 

 


 

MyBatis를 이용하여 쿼리를 날리기 전에 필요한 준비

- Mapper.xml 생성

- VO 생성

- DAO 생성(JDBC 및 MyBatis 모두 사용할 수 있도록 interface로 정의하여 상속받는다)

 

MyBatis를 이용한 웹 기능 구현 순서

1) Mapper.xml에서 쿼리문 작성

2) 작성한 쿼리를 가지고 DAO 에서 기능 구현

3) jsp/servlet 에서 DAO를 사용하여 값을 적용

  - 디자인이 있는경우 jsp를 사용하고 디자인이 없는경우는 servlet 을 사용

 


게시판의 구현 예시

 

Step 1 : Mapper.xml에서 쿼리문 작성

 

<NewsMapper.xml>

- sql 이라는 태그로 공통쿼리를 작성한 뒤 <include refid="?">로 해당 쿼리를 추가할 수 있다(유지보수에 용이하다)

- 목록의 경우 댓글의 수도 가져오기 위하여 outer join을 사용한다. 

- resultMap 을 이용하여 수동으로 매핑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="News">
    <insert id="insert" parameterType="News">
        insert into news(title,writer,content) values(#{title},#{writer},#{content})
    </insert>
 
    <resultMap type="News" id="newsComments">
        <id column="news_id"         property="news_id" />
        <result column="title"             property="title" />
        <result column="cnt"            property="cnt" />
        <result column="writer"         property="writer" />
        <result column="content"     property="content" />
        <result column="regdate"     property="regdate" />
        <result column="hit"             property="hit" />
    </resultMap>     
    
    
    <!-- 공통 select -->
    <sql id="selectCommon">
        select news_id, title, writer, content, regdate, hit 
        from news
    </sql>
 
 
    <!-- 목록 가져오기 -->
    <select id="selectAll" resultMap="newsComments">
        select n.news_id as news_id, count(c.comments_id) as cnt, title, writer, regdate, hit 
        from news n left outer join  comments c
        on n.news_id=c.news_id
        group by n.news_id, title, writer, regdate, hit;
    </select>
    
    
    <!-- 상세보기 -->
    <select id="select" parameterType="int" resultType="News">
        <include refid="selectCommon"/>where news_id=#{news_id}
    </select>
 
</mapper>
cs

 

 

Step 2 : 작성한 쿼리를 가지고 DAO 에서 기능 구현

 

<MybatisNewsDAO.java>

- SqlSession의 내장 메서드를 이용하여 Mapper.xml의 쿼리문을 실행하여 VO에 값을 매핑하여준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.koreait.site0622.model.news.dao;
 
import java.util.List;
 
import org.apache.ibatis.session.SqlSession;
 
import com.koreait.site0622.model.domain.News;
import com.koreait.site0622.model.mybatis.MybatisConfigManager;
 
public class MybatisNewsDAO implements NewsDAO{
    MybatisConfigManager configManager=MybatisConfigManager.getInstance();
 
    public int insert(News news) {
        SqlSession sqlSession=configManager.getSession();
        int result=sqlSession.insert("News.insert", news);
        sqlSession.commit();
        configManager.closeSession(sqlSession);
        return result;
    }
 
    public List selectAll() {
        SqlSession sqlSession=configManager.getSession();
        List list=sqlSession.selectList("News.selectAll");
        configManager.closeSession(sqlSession);
        return list;
    }
 
    public News select(int news_id) {
        SqlSession sqlSession=configManager.getSession();
        News news=sqlSession.selectOne("News.select", news_id);
        configManager.closeSession(sqlSession);
        return news;
    }
 
    public int update(News news) {
        return 0;
    }
 
    public int delete(int news_id) {
        return 0;
    }
 
}
 
cs

 

 

 

 

Step 3 : jsp/servlet 에서 DAO를 사용하여 값을 적용

 

<list.jsp>

- jsp를 이용한 리스트 구현

- new DAO로 생성하여준 뒤 필요한 메서드를 호출하여 값을 불러와 사용한다.

- 매개변수가 있을 경우에는 request.getParameter()를 사용하여 값을 가져온다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<%@page import="com.koreait.site0622.model.domain.News"%>
<%@page import="java.util.List"%>
<%@page import="com.koreait.site0622.model.news.dao.MybatisNewsDAO"%>
<%@page import="com.koreait.site0622.model.news.dao.NewsDAO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%! NewsDAO newsDAO=new MybatisNewsDAO(); %>
<%
    List<News> newsList = newsDAO.selectAll();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <table width="100%" border="1px">
        <tr>
            <th>No</th>
            <th>제목</th>
            <th>작성자</th>
            <th>등록일</th>
            <th>조회수</th>
        </tr>
        <%for(News news : newsList) {%>
        <tr>
            <td><%=0%></td>
            <td>
                <a href="/news/detail.jsp?news_id=<%=news.getNews_id() %>"><%=news.getTitle()%></a>
                <%if(news.getCnt()>0){ %>
                [<%=news.getCnt() %>]
                <%} %>
            </td>
            <td><%=news.getWriter()%></td>
            <td><%=news.getRegdate()%></td>
            <td><%=news.getHit()%></td>
        </tr>
        <%} %>
        <tr>
            <td colspan="5">
                <button onclick="location.href='/news/regist.jsp';">글등록</button>
            </td>
        
        </tr>
        
    </table>
</body>
</html>
 
 
cs

 

 

 

<RegistServlet.java>

- servlet을 이용한 게시들 등록 구현

- servelt의 경우 자동으로 매핑이 되지 않기 때문에 web.xml에서 매핑하여 주어야 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.koreait.site0622.controller.news;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.koreait.site0622.model.domain.News;
import com.koreait.site0622.model.news.dao.MybatisNewsDAO;
import com.koreait.site0622.model.news.dao.NewsDAO;
import com.koreait.site0622.util.message.MessageObject;
 
//뉴스기사 등록요청 처리 서블릿
public class RegistServlet extends HttpServlet {
    NewsDAO newsDAO;
    MessageObject messageObject;
    
    public void init() throws ServletException {
        newsDAO=new MybatisNewsDAO();
        messageObject=new MessageObject();
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String title=request.getParameter("title");
        String writer=request.getParameter("writer");
        String content=request.getParameter("content");
        
        //VO담기
        News news=new News();
        news.setTitle(title);
        news.setWriter(writer);
        news.setContent(content);
        
        //DAO에게 일시키기
        int result=newsDAO.insert(news);//다형성!! NewsDAO 인줄 알았는데.. 막상 동작하니까 MybatisNewsDAO로 동작한다!!
        
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        
        if(result==0) {
            out.print(messageObject.getMsgBack("등록실패"));
        }else {
            out.print(messageObject.getMsgURL("등록성공""/news/list.jsp"));
        }
        
        
        
        
    }
}
 
cs

 

 

 


 

게시판 댓글의 구현 예시

 

Step 0 : 비동기로 댓글 등록 및 리스트를 전송

- 비동기 전송시 post 방식은 값을 문자열로 변환하여 전송한다 (json으로 변경하여 전송)

 

<detail.jsp 안의 댓글등록 버튼 메서드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//댓글등록(새로고침 없이!! 즉 비동기로)
function registComments(){
    var formdata=$("#form2").serialize();//폼양식을 전송할 수 있는 문자열로 변환
    $.ajax({
        url:"/comments/regist",
        type:"post",
        data:formdata,//폼을 전송할 수 있는 데이터화 시킨후, 자체를 전체 전송
        success:function(result,status,xhr){
            //댓글 목록 가져와서 동적으로 늘력나가기
            if(result==1){
                //댓글 목록가져와서 동적으로 늘려나가기
                getCommentsList();//현재 뉴스기사에 딸린, 댓글 가져오기
            }
        }
    });
    
}
 
function getCommentsList(){
    //비동기방식으로 댓글 리스트 요청하자
    $.ajax({
        url:"/comments/list?news_id=<%=news.getNews_id()%>",
            type : "get",
            success : function(result, status, xhr) {
                //넘겨받은 데이터가 string 이므로, json 으로 파싱하자
                //var json=JSON.parse(result);
                //console.log(json.commentsList.length);
 
                //넘겨받은 데이터가 json 자체일경우 
                console.log(result);
           
               printCommentList(result);
 
            }
        });
    }
cs

 

 

 

 

Step 1 : Mapper.xml에서 쿼리문 작성

 

<CommentsMapper.xml>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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="Comments">
 
   <!-- 댓글등록 -->
   <insert id="insert" parameterType="Comments">
           insert into comments(msg, cwriter, news_id) values(#{msg}, #{cwriter},#{news_id})
   </insert>
   
   <!-- 해당 뉴스에 등록된 댓글 가져오기 -->
      <select id="selectByNewsId" resultType="Comments" parameterType="int">
          select * from comments where news_id=#{news_id}
      </select>
   
</mapper>
cs

 

 

 

Step 2 : 작성한 쿼리를 가지고 DAO 에서 기능 구현

 

<MybatisCommentsDAO.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.koreait.site0622.model.comments.dao;
 
import java.util.List;
 
import org.apache.ibatis.session.SqlSession;
 
import com.koreait.site0622.model.domain.Comments;
import com.koreait.site0622.model.mybatis.MybatisConfigManager;
 
public class MybatisCommentsDAO implements CommentsDAO{
    MybatisConfigManager configManager=MybatisConfigManager.getInstance();
    
    public int insert(Comments comments) {
        SqlSession sqlSession=configManager.getSession();
        int result=sqlSession.insert("Comments.insert", comments);
        sqlSession.commit();
        configManager.closeSession(sqlSession);
        return result;
    }
 
    public List selectAll() {
        return null;
    }
 
    public Comments select(int comments_id) {
        return null;
    }
 
    public int update(Comments comments) {
        return 0;
    }
 
    public int delete(int comments_id) {
        return 0;
    }
 
    @Override
    public List selectByNewsId(int news_id) {
        SqlSession sqlSession=configManager.getSession();
        List list=sqlSession.selectList("Comments.selectByNewsId", news_id);
        configManager.closeSession(sqlSession);
        return list;
    }
 
}
 
cs

 

 

 

Step 3 : jsp/servlet 에서 DAO를 사용하여 값을 적용

 

<RegistServlet.java>

- out.print로 비동기 방식으로 보낸 곳에 결과값을 보낸다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.koreait.site0622.controller.comments;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.koreait.site0622.model.comments.dao.CommentsDAO;
import com.koreait.site0622.model.comments.dao.JdbcCommentsDAO;
import com.koreait.site0622.model.comments.dao.MybatisCommentsDAO;
import com.koreait.site0622.model.domain.Comments;
import com.koreait.site0622.model.news.dao.MybatisNewsDAO;
import com.koreait.site0622.model.news.dao.NewsDAO;
 
//댓글 등록 요청 처리 서블릿(클라이언트 요청이 비동기방식이므로, 디자인을 결과로 보내서는 안됨!! 처리 결과만..
//왜? 전체 새로고침이 일어나지 않는 방식이라 디자인을 보낼 의미가 없음, 즉 전체 페이지 변환이 목적이 아니라,
//페이지의 일부의 변경이 목적임)
public class RegistServlet extends HttpServlet {
    CommentsDAO commentsDAO;
    
    public void init() throws ServletException {
//        commentsDAO=new JdbcCommentsDAO();
        commentsDAO=new MybatisCommentsDAO();
    }
    
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String msg=request.getParameter("msg");
        String cwriter=request.getParameter("cwriter");
        int news_id=Integer.parseInt(request.getParameter("news_id"));
        
        //VO에 담기
        Comments comments=new Comments();
        comments.setMsg(msg);
        comments.setCwriter(cwriter);
        comments.setNews_id(news_id);
        
        //DAO에게 일 시키기
        int result=commentsDAO.insert(comments);//JdbcCommentsDAO로서 일을 한다 (다형성)polymorphism
        
        
        
        //응답객체로부터 출력스트림 얻기
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        out.print(result);
        
        
    }
}
 
cs

 

<ListServlet.java>

- DAO를 이용하여 구한 결과값을 다시 json화 하여 전송하자 (비동기 방식이기 때문에)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.koreait.site0622.controller.comments;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.koreait.site0622.model.comments.dao.CommentsDAO;
import com.koreait.site0622.model.comments.dao.JdbcCommentsDAO;
import com.koreait.site0622.model.comments.dao.MybatisCommentsDAO;
import com.koreait.site0622.model.domain.Comments;
import com.sun.source.doctree.CommentTree;
 
//댓글 목록 요청을 처리하는 서블릿
public class ListServlet extends HttpServlet{
    CommentsDAO commentsDAO;
    
    public void init() throws ServletException {
//        commentsDAO=new MybatisCommentsDAO();
        commentsDAO=new JdbcCommentsDAO();
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //파라미터 받기
        int news_id=Integer.parseInt(request.getParameter("news_id"));
        
        List<Comments> commentsList=commentsDAO.selectByNewsId(news_id);
        
        //VO를 클라이언트에 보내기 위해 문자열화 시키자
        //이때 이 문자열화 된 데이터는 구조화시키기 위해
        //json 으로 구성하자!!
        //이렇게 하면, 이 데이터를 받는자는 json파싱을
        //하면된다.. 단 보낼때 contentType json 형식으로 보내면
        //클라이언트는 파싱할 필요조차 없다
        
        response.setContentType("text/json;charset=utf-8");
        PrintWriter out=response.getWriter();
        
        StringBuilder sb=new StringBuilder();
        
        sb.append("{");
        sb.append("\"commentsList\":[");
        for (int i = 0; i < commentsList.size(); i++) {
            Comments comments=commentsList.get(i);
            sb.append("{");
            sb.append("\"comments_id\":"+comments.getComments_id()+",");
            sb.append("\"msg\":\""+comments.getMsg()+"\",");
            sb.append("\"cwriter\":\""+comments.getCwriter()+"\",");
            sb.append("\"cdate\":\""+comments.getCdate()+"\",");
            sb.append("\"news_id\":"+comments.getNews_id()+"");
            if(i<commentsList.size()-1) {
                sb.append("},");
            }else {
                sb.append("}");
            }
        }
        
        sb.append("]");
        sb.append("}");
          
        out.print(sb.toString()); //클라이언트에 보낼 응답컨첸트 정보 구성
 
 
        
        
    }
}
 
cs

 

 

 


 

로그인 시 Session 관리

 

 

1. 로그인 성공시  session을 얻어온다

- 여기서 request.getSession()으로 얻어온 세션은 session 변수가 죽더라도 살아있다.(브라우저에서 닫기전까지)

- session은 map 이기 때문에 여러 값들을 넣을 수 있다.

- session.getId()를 사용하면 session 의 id 값을 확인 할 수 있다.

<LoginServlet.java>

 

 

2. session 의 VO를 끄집어내어서 사용 가능하다 

<main.jsp>

 

 

3. 로그아웃시 기존 세션을 사용하지 못하게 한다.

<logout.jsp>

 

4. 로그인 하지 않으면 접근하지 못하게 한다

<list.jsp>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'개발 > jsp' 카테고리의 다른 글

jsp Google Map api 사용  (0) 2021.06.28
jsp javaBean  (0) 2021.06.28
jsp 파일업로드 (oreilly / apache)  (0) 2021.06.23
jsp Singleton(DAO / Connection Pool)  (0) 2021.06.17
jsp Servlet / Tomcat / JNDI  (0) 2021.06.17

댓글