22.08.09- 웹 서버 VS 웹 컨테이너, 게시판 만들기
정적 자원
JSP나 서블릿을 제외한 html파일이나, 이미지 등 같은 파일들
문제
- 문제풀이
- 맞는것 : 1, 4 틀린것 2:톰캣이 실행함 3: 최초의 요청만
- 맞는것 1, 2, 4, 5 틀린것 : 3
- 맞는것 : 3 4 틀린것: 1,2:최초의 클라이언트에 의해서
- 맞는것 : 1 2 틀린것 : 3:JBoss에서도 같은 객체를 사용 4: 개발자는 코드 올리고 끝
- 맞는것 : 3 4 틀린것 1: service→init() 2: init()→service() 5:service가 doGet
- 맞는것 : 1 2 4 5(doXXX메서드를 재정의) 틀린것 3: TomCat에 의해 호출
- 맞는것 : 3 틀린것 :1:요청이 있을때마다 2:생성자는 따로 있음
- 맞는것 : 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 가져온곳
코드
<%@ 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'Program > JSP' 카테고리의 다른 글
| DTO, DAO, 게시판 만들기 (0) | 2022.12.25 |
|---|---|
| Cookie, Connection Pooling, EE → SE 재사용 (0) | 2022.12.25 |
| Tomcat, JSP문법 구성, 서블릿 정의, 서블릿 접근 방법, JSP VS 서블릿, 서블릿 생명 주기 (0) | 2022.12.25 |
| 파일 업로드 (0) | 2022.12.25 |
| HTML 연동 (0) | 2022.12.25 |