자바스크립트 최근 함수 선언방식

 

백틱 : 숫자 1번 옆에 있는 것  = `

백틱안에 있는 것 중 달러표시를 이용해서 변수를 넣을 수 있다

파싱하지 않아도 바로 스트링 안에 ${    } 를 이용해서 넣을 수 있다 

=

자동 import

ctrl - alt - o

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

캐싱

브라우저는 캐싱을 한다

톰캣은 캐싱을 하지 않는다

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

보통 데이터베이스 테이블에는

createDate와 updateDate가 있어야 한다!

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

join.js를 만들고 join.jsp 안의 자바스크립트를 넣기

 

 

백틱 사용

 

join.jsp 아래쪽에 자바스크립트주소를 넣는다.

 

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

 

글쓰기 기능

nav.jsp

 

BoardController.java

 

Script.java

메시지만 출력하는 기능추가

 

BoardWriteAction.java

 

write.jsp 만들기

 

nav와 footer를 포함해준다

 

부트스트랩에서 디자인 찾기

 

 

write.jsp

 

 

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

 

잘못된 접근 막기

authentication.jsp 생성

 

잘못된 접근을 막기 위함

 

write.jsp

authentication 추가

 

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

 

섬머노트 추가하기

BoardController

 

boardWriteProcAction

 

더보기
package com.cos.blog.action.board;

import java.io.IOException;

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

import com.cos.blog.action.Action;
import com.cos.blog.model.Board;
import com.cos.blog.model.Users;
import com.cos.blog.repository.BoardRepository;
import com.cos.blog.util.Script;

public class BoardWriteProcAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//		0번 인증 확인
		HttpSession session = request.getSession();
		if (session.getAttribute("principal") == null) {

			Script.getMessage("잘못된 접근입니다.", response);
			return;

		}
		;

//		1번 request에 title값과 content값 null인지 공백인지확인
		if (request.getParameter("title") == null || request.getParameter("title").equals("")) {

			Script.back("제목을 입력해주세요.", response);
			return;
			
		} else if (request.getParameter("content") == null || request.getParameter("content").equals("")) {

			Script.back("내용을 입력해주세요.", response);
			return;

		}

//		2번 request에 title값과 content, principal.getId()값 받기
		String title = request.getParameter("title");
		String content = request.getParameter("content") != null ? request.getParameter("content") : "";

		Users user = (Users) session.getAttribute("principal");

		int userId = user.getId();

		Board board = Board.builder().title(title).content(content).userId(userId).build();

//		3번 BoardRepository 연결해서 save(board객체) 함수 호출
		BoardRepository boardRepository = BoardRepository.getInstance();
		int result = boardRepository.save(board);

		if (result == 1) {
			Script.href("글 등록에 성공하였습니다.", "/blog/board?cmd=home", response);
		} else {
			Script.back("글 등록에 실패하였습니다. 제목과 내용을 확인하세요.", response);
		}

	}

}

 

nav.jsp

섬머노트 관련 스크립트 추가

 

writeSummer.jsp

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@include file="../include/nav.jsp"%>
<%@include file="../include/authentication.jsp"%>

<div class="container">
	<form action="/blog/board?cmd=writeProc" method="post"  onsubmit="return validate()">

		<div class="form-group">
			<label for="title">Title:</label> 
			<input type="text" class="form-control" placeholder="title" id="title" name="title" required>
		</div>

		<div class="form-group">
			<label for="content">Content:</label>
			<textarea class="form-control" rows="5" placeholder="내용을 입력하세요" id="content" name="content"></textarea>
		</div>

		<button type="submit" class="btn btn-primary">글쓰기</button>

	</form>
</div>

<script>
	$('#content').summernote({
		placeholder : 'Hello Bootstrap 4',
		tabsize : 2,
		height : 400
	});
</script>

<script>

	function validate() {
        
        var test = $("#title").val();
        var test1 = $("#content").text();
		
		if (test == null || test == "") {
			alert("제목을 입력해주세요.");
			return false;
		} else if (test1 == null || test1 == "") {
			alert("내용을 입력해주세요.");
			return false;
		}
		return true;
	}
	
</script>


<%@include file="../include/footer.jsp"%>

 

 

 

 

BoardRepository

더보기
package com.cos.blog.repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.cos.blog.db.DBConn;
import com.cos.blog.model.Board;
import com.cos.blog.model.Users;

public class BoardRepository {
	private static final String TAG = "BoardRepository : "; // TAG 생성 (오류 발견시 용이)
	private static BoardRepository instance = new BoardRepository();

	private BoardRepository() {
	}

	public static BoardRepository getInstance() {
		return instance;
	}

	private Connection conn = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;

	// 글쓰기
	public int save(Board board) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "INSERT INTO board(id, userid, title, content, createDate) "
				+ "VALUES(BOARD_SEQ.nextval,?,?,?,sysdate)";
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, board.getUserId());
			pstmt.setString(2, board.getTitle());
			pstmt.setString(3, board.getContent());
			// 물음표 완성하기
			return pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "save : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return -1; // 실패시
	}

	// 회원정보 수정
	public int update(Board board) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "";
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기
			return pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "Update : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return -1; // 실패시
	}

	// 회원정보 삭제
	public int deleteById(int id) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "";
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기
			return pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "Delete : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return -1; // 실패시
	}

	// 회원정보 다 찾기
	public List<Board> findAll() { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "";
		List<Board> boards = new ArrayList<>();
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기

			// while 돌려서 rs -> java오브젝트에 집어넣기
			return boards;
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "findAll : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return null; // 실패시
	}

	// 회원정보 한 건 찾기
	public Board findById(int id) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "";
		Board board = new Board();
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기

			// if 돌려서 rs -> java오브젝트에 집어넣기
			return board;
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "findById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return null; // 실패시
	}
	
}

 

결과

 

 

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

 

홈화면에 미리보기 출력하기

BoardRepository

더보기
package com.cos.blog.repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.cos.blog.db.DBConn;
import com.cos.blog.model.Board;
import com.cos.blog.model.Users;

public class BoardRepository {
	private static final String TAG = "BoardRepository : "; // TAG 생성 (오류 발견시 용이)
	private static BoardRepository instance = new BoardRepository();

	private BoardRepository() {
	}

	public static BoardRepository getInstance() {
		return instance;
	}

	private Connection conn = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;

	// 글쓰기
	public int save(Board board) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "INSERT INTO board(id, userid, title, content, createDate) "
				+ "VALUES(BOARD_SEQ.nextval,?,?,?,sysdate)";
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, board.getUserId());
			pstmt.setString(2, board.getTitle());
			pstmt.setString(3, board.getContent());
			// 물음표 완성하기
			return pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "save : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return -1; // 실패시
	}

	// 회원정보 수정
	public int update(Board board) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "";
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기
			return pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "Update : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return -1; // 실패시
	}

	// 회원정보 삭제
	public int deleteById(int id) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "";
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기
			return pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "Delete : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return -1; // 실패시
	}

	// 회원정보 다 찾기
	public List<Board> findAll() { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "SELECT id, userid, title, content, readcount, createdate FROM board ORDER BY id DESC";
		List<Board> boards = new ArrayList<>();
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			rs = pstmt.executeQuery();
			
			// while 돌려서 rs -> java오브젝트에 집어넣기
			while (rs.next()) {
				System.out.println(rs.getInt(1));
				Board board = Board.builder()
						.id(rs.getInt(1))
						.userId(rs.getInt(2))
						.title(rs.getString(3))
						.content(rs.getString(4))
						.readCount(rs.getInt(5))
						.createDate(rs.getTimestamp(6))
						.build();
				
				boards.add(board);		
			}
			
			return boards;
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "findAll : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return null; // 실패시
	}

	
	// 회원정보 한 건 찾기
	public Board findById(int id) { // object 받기(안에 내용 다 받아야 하니까)
		final String SQL = "";
		Board board = new Board();
		try {
			conn = DBConn.getConnection(); // DB에 연결
			pstmt = conn.prepareStatement(SQL);
			// 물음표 완성하기

			// if 돌려서 rs -> java오브젝트에 집어넣기
			return board;
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(TAG + "findById : " + e.getMessage());
		} finally {
			DBConn.close(conn, pstmt, rs);
		}
		return null; // 실패시
	}
	
}

 

home.jsp

더보기
<%@page import="com.cos.blog.model.Users"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@include file="include/nav.jsp"%>

<div class="container">

	<c:forEach var="board" items="${boards}">

		<div class="card m-2" style="width: 100%">
			<div class="card-body">
				<h4 class="card-title">${board.title}</h4>
				<p class="card-text">${board.content}</p>
				<a href="#" class="btn btn-primary">상세보기</a>
			</div>
		</div>

	</c:forEach>

</div>



<%@include file="include/footer.jsp"%>



 

BoardHomeAction.java

더보기
package com.cos.blog.action.board;

import java.io.IOException;
import java.util.List;

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

import com.cos.blog.action.Action;
import com.cos.blog.model.Board;
import com.cos.blog.repository.BoardRepository;

public class BoardHomeAction implements Action {
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		BoardRepository boardRepository = BoardRepository.getInstance();
		List<Board> boards = boardRepository.findAll();
		
		if(boards != null) {
			for (Board board : boards) {
				String preview = board.getContent();
				preview = preview.substring(0, preview.length())+"...";
				board.setContent(preview);
			}			
		}
		
		request.setAttribute("boards", boards);
		
		RequestDispatcher dis = request.getRequestDispatcher("home.jsp");
		dis.forward(request, response);

	}

}

 

 

join.jsp 중복확인 버튼을 추가

onsubmit을 사용하면 변수를 이용해서 true가 될때에만 전송 가능하다 

 

join.jsp 확인용 자바스크립트 추가

 

 

UsersController

 

UsersRepository

 

UsersUsernameCheckAction

유저이름이 공백일 때를 대비하여 2도 넣어준다

 

결과

 

 

response.addCookie("remember", "ssar")를 사용하면

response의 헤더에 쿠키가 들어가서 전송된다

response.setHeader("Set-Cookie", "remember=ssar")를 이용해서 보낼 수도 있다

request로 받을 때에는  Cookie[] cookies = request.getCookies()로 받을 수 있다

 

 

-

 

EL표현식

<%= %>를  ${ } 로 표현한다

request.getAttribute(변수명) 를 사용하지 않고

${requestScope.변수} 를 이용할 수 있다

변수명이 다르다면 requestScope를 생략 할 수도 있다

변수명이 같다면 

page(가장우선) -> request -> session -> application(가장나중) 순서로 찾는다

requestScope는 생략해도 되고

나머지 스코프는 생략하지말고 적어주자

파라미터로 넘어오는 것은 스코프로는 받아 지지 않음

${param.변수} 를 이용하자

${안에서 연산가능}

${empty param.변수} -> true false 리턴

 

EL표현식은 자동으로 getter를 불러온다.

즉 getter가 없다면 실행되지 않는다.

title 이라는 변수라면 getTitle() 이라는 getter가 무조건 있어야한다 ( getTitle2() 등 이름을 바꾸면 오류남)

 

 

https://blog.naver.com/getinthere/221988358848

 

EL 표현식

elTest1.jspelTest2.jspelTest3.jspelTest4.jspelTest5.jspelTest6.jsp​

blog.naver.com

 

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

스코프 별 출력

request와 session에 각각 같은이름의 변수를 추가 한다.

 

elTest2에서 데이터를 받게 되면, 아래와 같이

 

request의 값을 받아오게 된다.

 

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

 

post 방식으로 데이터를 전송하면,

 

버퍼로 받을 수 있다. (getParameter로도 받을 수 있음)

 

 

 

콘솔창에는 파싱되지 않은 내용이 출력된다.

 

 

 

 

 

Cookie cookie = new Cookie("remember", null);

쿠키 객체를 생성할 때 원래 쓰던 쿠키명과 null을 넣는다

cookie.setMaxAge(0);

해당 쿠키의 만료기간을 0초로 설정하여 바로 없어지도록 함

response.addCookie(cookie);

쿠키객체를 add해준다. (해당쿠키는 사라진다)

 

아이디 저장 버튼의 required를 지워주고 div를 주석처리한다.

 

EL표현식을 사용해본다

null일 경우 값은 들어가지 않는다.

 

테스트

아이디 저장을 클릭하지 않고 로그인시 remember가 사라지는 것을 확인 할 수 있다

'Web > Jsp' 카테고리의 다른 글

서블릿 JSP 쿠키 만들기  (0) 2020.06.03
EL 표현식 기초  (0) 2020.06.03
200603 // 블로그 blog 만들기 5 / get, post 받는 방식 / JSTL  (0) 2020.06.03
JSTL 다운로드  (0) 2020.06.03
jusoPopup.jsp 이해  (0) 2020.06.02

+ Recent posts