개발자 미니민의 개발스터디

[JSP] Servlet 서블릿 작성 + 글쓰기 Servlet 서블릿/DAO

by mini_min

JSP

[JSP] Servlet 서블릿 작성 + 글쓰기 Servlet 서블릿/DAO

✔️ 서블릿 작성하기

게시판을 만들기 위해, 서블릿과 JSP 파일이 필요하다.

가장 먼저 알아둬야할 것은, 서블릿은 JSP 보다 최상위 우선순위를 가진다는 것이다.

 

 

👩‍💻 게시판을 만들 BoardServlet 은 HttpServlet 을 상속받으며, 시리얼UID 가 필요하다.

- doGet 방식과 doPost 방식을 재정의한다.

- 포워딩 처리, 그리고 JSP 을 실행할 메소드를 작성한다.

- doGet, doPost 모두 execute 메소드로 넘어간다.

@WebServlet("/bbs/*")
public class BoardServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		execute(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		execute(req, resp);
	}
	
	protected void forward(HttpServletRequest req, HttpServletResponse resp, String path) throws ServletException, IOException {
		// 포워딩 
		RequestDispatcher rd = req.getRequestDispatcher(path);
		rd.forward(req, resp);
		
	}
	
	protected void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}

 

 

👩‍💻 execute 메소드

req.getRequestURI() 했을 때 뜨는 uri : /study3/bbs/list.do

uri 에 표시되는 값을 기준으로 필요한 메소드가 실행되고 그에 맞는 JSP 파일들이 화면에 보일 것이다.

 

처음에 실행하면 숑~ execute  로 넘어가는 것이다.

uri 처음이 list.do 이기 때문에 글 리스트 메소드로 다시 넘어간다.

protected void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf-8");

    //uri : /study3/bbs/list.do
    //cp 부터 끝까지 주소(QueryString 제외)
    String uri = req.getRequestURI();

    if(uri.indexOf("list.do")!= -1) {
        list(req, resp);
    }else if(uri.indexOf("write.do")!= -1) {
        writeForm(req, resp);
    }else if(uri.indexOf("write_ok.do")!= -1) {
        writeSubmit(req, resp);
    }else if(uri.indexOf("article.do")!= -1) {
        article(req, resp);
    }else if(uri.indexOf("update.do")!= -1) {
        updateForm(req, resp);
    }else if(uri.indexOf("update_ok.do")!= -1) {
        updateSubmit(req, resp);
    }else if(uri.indexOf("delete.do")!= -1) {
        delete(req, resp);
    }

}

 


 

✔️ 글쓰기 등록

📓 writeForm / writeSubmit

👩‍💻 글쓰기 폼 (write.jsp) 로 포워딩해준다.

👩‍💻 글쓰기 등록해서 글 등록하기

protected void writeForm(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //글쓰기 

    forward(req, resp, "/WEB-INF/views/bbs/write.jsp");
}

 

클라이언트에게 파라미터를 받고, DAO 를 실행하여 DB에 내용을 저장한다. 이후 다시 list.do 로 리다이렉트한다.

protected void writeSubmit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //글 저장 

    BoardDAO dao = new BoardDAO();
    String cp = req.getContextPath();

    try {
        //폼 데이터 : 이름, 제목, 패스, 내용
        //번호:시퀀스, 등록일:SYSDATE, 조회수:0, ip는 클라이언트 ip
        BoardDTO dto = new BoardDTO();

        dto.setName(req.getParameter("name"));
        dto.setSubject(req.getParameter("subject"));
        dto.setContent(req.getParameter("content"));
        dto.setPwd(req.getParameter("pwd"));

        //클라이언트 ip
        dto.setIpAddr(req.getRemoteAddr());

        dao.insertBoard(dto);

    } catch (Exception e) {
        e.printStackTrace();
    }

    //등록 후에는 list.do 로 리다이렉트한다.
    resp.sendRedirect(cp+ "/bbs/list.do");

}

 

📓 글쓰기 등록 - DAO

public void insertBoard(BoardDTO dto) throws SQLException{
    PreparedStatement pstmt = null;
    String sql;

    try {
        //insert into 테이블명(컬럼,컬럼) values (값,값)

        sql = " INSERT INTO bbs(num, name, pwd, subject, content, ipAddr, "
                + " reg_date, hitCount ) "
                + " VALUES(bbs_seq.NEXTVAL, ?, ?, ?, ?, ?, SYSDATE, 0 )";

        pstmt = conn.prepareStatement(sql);

        pstmt.setString(1, dto.getName());
        pstmt.setString(2, dto.getPwd());
        pstmt.setString(3, dto.getSubject());
        pstmt.setString(4, dto.getContent());
        pstmt.setString(5, dto.getIpAddr());

        pstmt.executeUpdate();


    } catch (SQLException e) {
        e.printStackTrace();
        throw e;
    } finally {
        if(pstmt != null) {
            try {
                pstmt.close();
            } catch (Exception e2) {
            }
        }
    }

}

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기