본문 바로가기

Program/JSP

웹 서버 VS 웹 컨테이너, 게시판 만들기

22.08.09- 웹 서버 VS 웹 컨테이너, 게시판 만들기

정적 자원


JSP나 서블릿을 제외한 html파일이나, 이미지 등 같은 파일들

문제

4.서블릿의 사본

4.서블릿의 사본.pdf

  • 문제풀이
    1. 맞는것 : 1, 4 틀린것 2:톰캣이 실행함 3: 최초의 요청만
    2. 맞는것 1, 2, 4, 5 틀린것 : 3
    3. 맞는것 : 3 4 틀린것: 1,2:최초의 클라이언트에 의해서
    4. 맞는것 : 1 2 틀린것 : 3:JBoss에서도 같은 객체를 사용 4: 개발자는 코드 올리고 끝
    5. 맞는것 : 3 4 틀린것 1: service→init() 2: init()→service() 5:service가 doGet
    6. 맞는것 : 1 2 4 5(doXXX메서드를 재정의) 틀린것 3: TomCat에 의해 호출
    7. 맞는것 : 3 틀린것 :1:요청이 있을때마다 2:생성자는 따로 있음
    8. 맞는것 : 1 틀린것

웹 서버 VS 웹 컨테이너


웹 서버

  • HTTP서버 : 정적자원을 사용하는 서버
  • FTP 서버
  • 메일 서버
  • DNS

Apache 서버 (친함 Linux+mySQL) ⇒ APM(Apache PHP MySQL)

IISC (Windows용)

웹 컨테이너

  • HTTP 서버
  • JSP, 서블릿 해석

TomCat ⇒ Apache에서 HTTP 서버 기능을 조금 떼고, JSP나 서블릿을 해석하는 기능을 추가

Resin

WAS

웹 서버 + 웹 컨테이너

JBoss

JEUS

WebLogic

게시판 생성


summernote 가져온곳

summernote 가져온곳

코드

<%@ page contentType="text/html;charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>list</title>
<script>

</script>
<style>

</style>
</head>
<body>
    <table width="100%" border="1px" align="center">
        <tr>
            <td>No</td>
            <td>제목</td>
            <td>작성자</td>
            <td>작성일</td>
            <td>조회수</td>
        </tr>
        <%for(int i=1; i<=10; i++){ %>
        <tr>
            <td>No</td>
            <td>제목</td>
            <td>작성자</td>
            <td>작성일</td>
            <td>조회수</td>
        </tr>
        <%} %>
        <tr>
            <td colspan="5" align="right">
            <!-- 하나의 문서 내에서 생성되는 객체를 DOM(Document Object Model)이라 하고, 문서영역에서 브라우저를 위해
             생성되는 객체들을 가리켜 비공식적으로 BOM(Browser Object Model) 이라고 한다. -->
                <button onClick="location.href='/board/regist.jsp'">글 등록</button>
            </td>
        </tr>
    </table>    
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글등록</title>
<style type="text/css">

</style>
<!-- include libraries(jQuery, bootstrap) -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<!-- include summernote css/js -->
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.js"></script>
<script>
/*jQuery는 자바스크립트를 잘 모르거나 혹은 자바스크립트를 이용하여 복잡한 로직을 작성하지 않고도 쉽게 결과를 내고 싶을때 사용
 * 주 형식 : (CSS 선택자).메서드()
 */


//addEventListener("load",function(){})과 같음
 $(document).ready(function() {
         $('#summernote').summernote();


         $("#bt_regist").click(function(){
            //폼양식으로 이용하여 서버에 전송
            $("form").attr("action","/board/regist");
            $("form").attr("method","post");
            $("form").submit();

         });
    });
 /*js버전
    var bt_regist = document.getElementById("bt_regist");
    bt_regist.addEventListener("click",function(){
        document.form.action="/board/regist".jsp;
         document.form.method="post";
         document.form.submit();
    });
*/

</script>
</head>
<body>
    <form>
    <table width="60%" border="1px" align="center">
        <tr>
            <td>제목</td>
            <td><input type ="text" name ="title"></td>
        </tr>
        <tr>
            <td>작성자</td>
            <td><input type ="text" name ="writer"></td>
        </tr>
        <tr>
            <td>내용</td>
            <td><textarea id="summernote" name="content"></textarea></td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="button" value="글등록" id="bt_regist">
                <input type="button" value="목록보기" onClick="location.href='/board/list.jsp'">
            </td>
        </tr>
    </table>
    </form>
</body>
</html>
package web0809.board;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*클라이언트의 브라우저에서 젅송되 파라미터를 넘겨받아 오라클에 insert
 * jsp에서 해도 되지만, 주 용도는 디자인이 포함된 경우에 많이 쓰이므로 이번 실습에서는 서블릿으로 한다.*/
public class RegistServlet extends HttpServlet {
    String url = "jdbc:oracle:thin:@localhost:1521:XE";
    String user = "java";
    String password = "1234";

    // 게시판 폼 양식 중 글 내용이 textarea이므로 상당한 양의 데이터가 전송되어 지므로 post 방식으로 전송되어진다.
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 이 메소드는 서블릿에 Service 메소드에 의해 호출되어지는 메소드이다.
        request.setCharacterEncoding("utf-8");// 파라미터에 대한 인코딩
        String title = request.getParameter("title");
        String writer = request.getParameter("writer");
        String content = request.getParameter("content");

        // 클라이언트가 받게될 응답정보 문자열은, response객체가 가진 스트림에 적재시켜야한다.
        response.setContentType("text/html;charset=utf-8");// 응답정보에 대한 인코딩

        PrintWriter out = response.getWriter();
        out.print("title is " + title + "<br>");
        out.print("writer is " + writer + "<br>");
        out.print("내용 is " + content + "<br>");/* 클라이언트로 보내는게 아니라 response에 적재하는 것 */

        // db연결순서 드라이버 로드, 접속, 쿼리 수행, db해제
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            out.print("드라이버 로드 성공");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        Connection con = null;
        try {
            con = DriverManager.getConnection(url, user, password);
            if(con==null) {
                out.print("접속실패");
            }else {
                out.print("접속성공");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        String sql = "INSERT INTO board(board_id,title,writer,content)VALUES(seq_board.nextval,?,?,?)";
        PreparedStatement pstmt =null; 

        try {
            pstmt = con.prepareStatement(sql);
            pstmt.setString(1, title);
            pstmt.setString(2, writer);
            pstmt.setString(3, content);

            int result =pstmt.executeUpdate();//
            if(result<1) {
                out.print("등록실패<br>");
            }else {
                out.print("등록성공 <br>");
            }
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        if(pstmt!=null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(con!=null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
package web0809.board;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DeleteServlet extends HttpServlet {
    String url = "jdbc:oracle:thin:@localhost:1521:XE";
    String user = "java";
    String password = "1234";

    // 클러아이언트가 board_id 파라미터를 get방식으로 보낼 예정
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // DELETE board WHERE board_id=?
        String board_id = request.getParameter("board_id");

        PrintWriter out = response.getWriter();
        out.print("DELETE board WHERE board_id=" + board_id);

        Connection con = null;
        PreparedStatement pstmt = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            con = DriverManager.getConnection(url, user, password);
            String sql = "DELETE board WHERE board_id=" + board_id;
            pstmt = con.prepareStatement(sql);
            int result = pstmt.executeUpdate();
            if (result < 1) {
                out.print("삭제실패");
            } else {
                response.sendRedirect("/board/list.jsp");
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }
}

JSP_SL/web0809/src/main/java/web0809/board at master · dltmdcks98/JSP_SL

SQL

CREATE TABLE board(
  board_id NUMBER PRIMARY KEY,
  title VARCHAR(100),
  writer VARCHAR(20),
  content CLOB,
  regdate DATE DEFAULT SYSDATE,
  hit NUMBER DEFAULT 0 
)
CREATE SEQUENCE seq_board INCREMENT BY 1 START WITH 1