자바스크립트 최근 함수 선언방식
'Web > JavaScript' 카테고리의 다른 글
ajax 에이작스 get post 요약 (0) | 2020.06.26 |
---|---|
const 란 // const 값을 변경하려고하면? (0) | 2020.06.15 |
자바스크립트 백틱 (0) | 2020.06.04 |
자바스크립트 객체 프로퍼티(필드, 변수) 작성 따옴표 (0) | 2020.06.02 |
자바스크립트 람다식 this (0) | 2020.06.02 |
자바스크립트 최근 함수 선언방식
ajax 에이작스 get post 요약 (0) | 2020.06.26 |
---|---|
const 란 // const 값을 변경하려고하면? (0) | 2020.06.15 |
자바스크립트 백틱 (0) | 2020.06.04 |
자바스크립트 객체 프로퍼티(필드, 변수) 작성 따옴표 (0) | 2020.06.02 |
자바스크립트 람다식 this (0) | 2020.06.02 |
백틱 : 숫자 1번 옆에 있는 것 = `
백틱안에 있는 것 중 달러표시를 이용해서 변수를 넣을 수 있다
파싱하지 않아도 바로 스트링 안에 ${ } 를 이용해서 넣을 수 있다
=
const 란 // const 값을 변경하려고하면? (0) | 2020.06.15 |
---|---|
자바스크립트 최근 함수 선언방식 (0) | 2020.06.04 |
자바스크립트 객체 프로퍼티(필드, 변수) 작성 따옴표 (0) | 2020.06.02 |
자바스크립트 람다식 this (0) | 2020.06.02 |
자바스크립트 객체를 JSON으로 바꾸기 (0) | 2020.06.02 |
자동 import
ctrl - alt - o
----------------------------------
200609 (0) | 2020.06.09 |
---|---|
부트스트랩과 비슷한 사이트 (0) | 2020.06.04 |
200604 // 블로그 blog 만들기 6 / 백틱 / 게시판 / 섬머노트 (0) | 2020.06.04 |
이클립스 JSP 키세팅 변경하기 // 정렬 // 주석 // 단축키 //키맵 // 자동완성 (0) | 2020.06.02 |
크롬 F12 network (0) | 2020.06.01 |
캐싱
브라우저는 캐싱을 한다
톰캣은 캐싱을 하지 않는다
------------------------------
보통 데이터베이스 테이블에는
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);
}
}
부트스트랩과 비슷한 사이트 (0) | 2020.06.04 |
---|---|
이클립스 자동 import (0) | 2020.06.04 |
이클립스 JSP 키세팅 변경하기 // 정렬 // 주석 // 단축키 //키맵 // 자동완성 (0) | 2020.06.02 |
크롬 F12 network (0) | 2020.06.01 |
I/O를 줄이는 법 // 서버와 DB이용 // 암호화 (0) | 2020.06.01 |
join.jsp 중복확인 버튼을 추가
onsubmit을 사용하면 변수를 이용해서 true가 될때에만 전송 가능하다
join.jsp 확인용 자바스크립트 추가
UsersController
UsersRepository
UsersUsernameCheckAction
유저이름이 공백일 때를 대비하여 2도 넣어준다
결과
JSP 서블릿 web.xml로 파일접근을 막는 방법 (0) | 2020.06.04 |
---|---|
JSP 서블릿 프로젝트 이름을 갑자기 수정해야 할 경우 수정법 (0) | 2020.06.04 |
서블릿 JSP 쿠키 만들기 (0) | 2020.06.03 |
EL 표현식 기초 (0) | 2020.06.03 |
서블릿 JSP 쿠키 삭제하는 방법 (0) | 2020.06.03 |
response.addCookie("remember", "ssar")를 사용하면
response의 헤더에 쿠키가 들어가서 전송된다
response.setHeader("Set-Cookie", "remember=ssar")를 이용해서 보낼 수도 있다
request로 받을 때에는 Cookie[] cookies = request.getCookies()로 받을 수 있다
-
JSP 서블릿 프로젝트 이름을 갑자기 수정해야 할 경우 수정법 (0) | 2020.06.04 |
---|---|
JSP 서블릿 아이디 중복확인 체크 (0) | 2020.06.03 |
EL 표현식 기초 (0) | 2020.06.03 |
서블릿 JSP 쿠키 삭제하는 방법 (0) | 2020.06.03 |
200603 // 블로그 blog 만들기 5 / get, post 받는 방식 / JSTL (0) | 2020.06.03 |
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
----------------------------------
스코프 별 출력
request와 session에 각각 같은이름의 변수를 추가 한다.
elTest2에서 데이터를 받게 되면, 아래와 같이
request의 값을 받아오게 된다.
---------------------------
post 방식으로 데이터를 전송하면,
버퍼로 받을 수 있다. (getParameter로도 받을 수 있음)
콘솔창에는 파싱되지 않은 내용이 출력된다.
JSP 서블릿 아이디 중복확인 체크 (0) | 2020.06.03 |
---|---|
서블릿 JSP 쿠키 만들기 (0) | 2020.06.03 |
서블릿 JSP 쿠키 삭제하는 방법 (0) | 2020.06.03 |
200603 // 블로그 blog 만들기 5 / get, post 받는 방식 / JSTL (0) | 2020.06.03 |
JSTL 다운로드 (0) | 2020.06.03 |
Cookie cookie = new Cookie("remember", null);
쿠키 객체를 생성할 때 원래 쓰던 쿠키명과 null을 넣는다
cookie.setMaxAge(0);
해당 쿠키의 만료기간을 0초로 설정하여 바로 없어지도록 함
response.addCookie(cookie);
쿠키객체를 add해준다. (해당쿠키는 사라진다)
아이디 저장 버튼의 required를 지워주고 div를 주석처리한다.
EL표현식을 사용해본다
null일 경우 값은 들어가지 않는다.
테스트
아이디 저장을 클릭하지 않고 로그인시 remember가 사라지는 것을 확인 할 수 있다
서블릿 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 |