레이블이 web인 게시물을 표시합니다. 모든 게시물 표시
레이블이 web인 게시물을 표시합니다. 모든 게시물 표시

2018년 4월 21일 토요일

게시판 스크립트 방지 관련

포폴로 제출한 홈페이지를 잠깐 들어가봤는데 내가 설정하지 않은 alert창이 떠서 당황하였다.
인사담당자님께서 테스트하신 것같았는데 글 제목들은 공백이었고 내가 입력한적이 없는 alert창이 자꾸 발생하였다. 
어디서 자꾸 발생하나 개발자도구로 보니.....글 제목을 스크립트로 입력하신거였다...

<script>alert('Popup');</script>

전혀 생각하진 못한 문제였다...ㅠㅠㅠ

글 내용부분은 네이버 스마트에디터를 사용해서 스크립트가 방지되는 것같았다. 
글 제목엔 <script>alert('Popup');</script>을 써서 저장하면 해당게시판의 페이지에 접속할 때마다 알람이 발생한다!!! 


* XXS(Cross-site Scripting란?
SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다. 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

크로스 사이트 스크립팅이란 이름 답게, 자바스크립트를 사용하여 공격하는 경우가 많다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다. 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우에 따라서는 메일과 같은 매체를 통해서도 전파된다. 

물론, HTML을 사용하는 것이기 때문에, Text-Only 게시판이나, BBCode를 이용하는 위키위키 등에서는 XSS가 발생할 일은 없다. 단, 나무위키의 경우 {{{#!html HTML}}} 을 이용해서 HTML 태그를 사용할 수 있으므로 취약점이 있을 수도 있다. 그래서 나무위키 초반에는 스크립트 태그와 이벤트 속성도 막지 않았다. 물론, 이는 후에 대부분 수정되었다.

주로 CSRF를 하기 위해서 사용되기 때문에 종종 CSRF와 혼동되는 경우가 있으나, XSS는 자바스크립트를 실행시키는 것이고, CSRF는 특정한 행동을 시키는 것이므로 다르다.




해결방법은 좀 더 찾아보고 적용해야할 듯...ㅠㅠ 


http://forest71.tistory.com/16 (게시판 스크립트 방지관련 글)

https://blog.naver.com/powerlee12/40051367646 (xss에 대해서)

https://namu.wiki/w/XSS

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
lucy xss servlet filter를 적용 테스트 중 ...

2017년 10월 21일 토요일

ajax 예제(cot에서 쓰인 부분 정리)

커뮤니티 페이지(Cot)에서 ajax를 쓴 부분을 정리


게시물 조회시 댓글을 ajax방식으로 호출 했다.
1
2
3
4
5
6
7
8
9
10
11
//게시물 조회시 댓글 호출    
function listReply() {
        $.ajax({
            type : "get",
            url : "${path}/freereply/list.do?bnum=${dto.bnum}",
            success : function(result) {
                // responseText가 result에 저장됨.
                $("#listReply").html(result);
            }
        });
    }
cs

type은 통신 타입이다. POST 또는 GET을 선택할 수 있다.
url은 요청할 url로 글번호(bnum)에 맞는 댓글들을 불러오는 컨트롤러로 연결된다.
success는 성공적으로 요청/응답이 되면 listReply 부분에 결과를 html형식으로 표시한다.
해당 jsp에서는 

<!-- 댓글 목록 위치 -->
<div id="listReply"></div>

으로 댓글 목록을 위치시켰다.



댓글 수정화면 댓글의 댓글 창또한 ajax를 이용해 새로고침 없이 창을 보이게 하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 댓글 수정화면 생성 
function showReplyModify(rnum) {
    $.ajax({
        type : "get",
        url : "${path}/freereply/detail/" + rnum,
        success : function(result) {
            $("#modifyReply").html(result);
            // 태그.css("속성", "값")
            $("#modifyReply").css("visibility""visible");
        }
    })
}
// 댓글의  코멘트 생성 
function showReplyComment(rnum) {
    $.ajax({
        type : "get",
        url : "${path}/freereply/commentwrite/" + rnum,
        success : function(result) {
            $("#ReplyComment").html(result);
            // 태그.css("속성", "값")
            $("#ReplyComment").css("visibility""visible");
        }
    })
}
cs
형태는 위와 비슷하다. 


로그인을 사이드 메뉴에서 구현하였다. 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function signin() {
            if($("#user_id").val()==""){
                alert("아이디를 입력해주세요.");
                $("#user_id").focus();
                }else if($("#password").val() ==""){
                    alert("비밀번호를 입력해주세요");
                    $("#password").focus();
                    
                    }else{
            $.ajax({
                url : './j_spring_security_check',
                data : $('form input').serialize(),
                type : 'POST',
                dataType : 'json',
               
            }).done(function(body) {
                var message = body.response.message;
                var error = body.response.error;
                if (error)
                    get_msg(message);
                if (error == false) {
                    var url = '${referer}';
                    if (url == '')
                        url = '<c:url value="/users/mypage" />';
                    location.href = url;
                }
            });
         }
        }
cs
앞의 if문은 아이디 비밀번호 체크이므로, ajax부터 본다면, 

data는 서버에 요청시 보낼 파라미터이다.
dataType은 응답 받을 데이터 타입을 선택한다.(XML, TEXT, HTML, JSON 등) 

아까랑 다르게 success가 아닌 done인데 같은의미인데 순서가 다른 것 같다.
검색해보니 success error 보다는 done fail 패턴이 동일한 요청에 대해 여러 성공 콜백을 호출할 때 함수 배열을 통해 더 깔끔?하게 처리해서 최근 done이 많이 쓰이는 것 같다...


beforesend에 대해서도 찾아볼 것 

2017년 10월 16일 월요일

서블릿과 JSP

서블릿이란?(Servlet) 

-자바 기반으로 만드는 웹 어플리케이션 프로그래밍 기술 
-웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종 
-동적 웹어플리케이션 컴포넌트
- .java
-자바 스레드 이용하여 동작
-MVC패턴에서 Controller로 이용됨
-서블릿은 서블릿 컨테이너에서 관리됨 


서블릿 컨테이너란?

-서블릿의 생명주기를 관리하고 요청에 따른 스레드를 생성해
-클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹 서버와 소켓을 만들어 통신
-대표적으로 Tomcat 
-통신 지원, 생명주기 관리, 멀티 스레딩 관리, 선언적인 보안 관리, JSP지원 등의 역할을 함


JSP(Java Server Page)란?

-자바 소스 코드 속에 HTML 코드가 들어가는 서블릿과 반대
-HTML속에 자바 코드가 들어가는 구조를 갖는 웹 어플리케이션 프로그래밍 기술
-자바 코드는 <% 코드 %> 형태로 사용
-JSP또한 결국 컴파일 후에 Sevlet코드로 변환되어 작동하기 때문에 Servlet과 거의 같다.
(JSP는 페이지 요청이 있을 시에는 최초에 한 번 자바코드로 변환된 후서블릿 클래스로 컴파일 된다.)
-서블릿과 JSP는 상호 연계되어 JSP에서 정적인 부분을 담당, 서블릿은 보다 동적인 부분을 처리하여 보다 효율적인 웹사이트를 구성할 수 있다. (JSP 뷰, Servlet 컨트롤러)




참조:


2017년 9월 26일 화요일

세션과 쿠키의 차이점

Session과 Cookie

 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.

Session
- 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.
- Session에 관련된 데이터는 Server에 저장된다.
- 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
- Cookie에 비해 보안성이 좋다.

Cookie
- 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.
- Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써,
  Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.
- Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.
(정보 유출 가능, Session보다 보안성이 낮은 이유)

Q. 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안하는 이유?
A. 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감


둘의 큰 차이점은 저장되는 위치?? 세션은 쿠키보다 느린속도..
출처: http://hahahoho5915.tistory.com/16 [넌 잘하고 있어]

참조
http://bllizz.tistory.com/15 

2017년 9월 6일 수요일

ajax 란?

Ajax(Asynchronous Javascript and Xml)

XMLHttpRequest를  사용하여  페이지 전체가 아닌 필요한 부분만 갱신할 수있도록 함.
json, xml, html 등 다양한 형식의 정보를 주고 받음 


장점
  • 페이지 이동없이 고속으로 화면을 전환할 수 있다.
  • 서버 처리를 기다리지 않고, 비동기 요청이 가능하다.
  • 수신하는 데이터 양을 줄일 수 있고, 클라이언트에게 처리를 위임할 수도 있다.
단점
  • Ajax를 쓸 수 없는 브라우저에 대한 문제가 있다.
  • HTTP 클라이언트의 기능이 한정되어 있다.
  • 페이지 이동없는 통신으로 인한 보안상의 문제
  • 지원하는 Charset이 한정되어 있다.
  • 스크립트로 작성되므로 디버깅이 용이하지 않다.
  • 요청을 남발하면 역으로 서버 부하가 늘 수 있음.
  • 동일-출처 정책으로 인해 다른 도메인과는 통신이 불가능하다.


기존방식과 AJAX의 차이
1) 기존방식
웹 브라우저가 웹 서버에 요청 전송
웹 서버는 JSP 등의 서버 어플리케이션을 사용해 사용자의 요청 처리 후 결과를 HTML로 생성해서 웹 브라우저에 전송
웹 브라우저는 응답으로 받은 HTML을 분석한 뒤 그 내용을 화면에 그림
- 결과적으로 웹 브라우저가 웹 서버와 통신을 하고 요청 결과는 HTML로 생성되고 사용 입장에서는 페이지 이동이 생함


2) AJAX방식
사용자가 이벤트를 발생 > 자바스크립트는 DOM을 사용해서 필요한 정보를 구한 뒤, XMLHttpRequest 객체를 통해서 웹 서버에 요청을 전달
웹 서버는 XMLHttpRequest로부터의 요청을 알맞게 처리후 결과를 XML이나 단순 Text을 생성해서 XMLHttpRequest에 전송
서버로부터 응답이 도착하면 XMLHttpRequest 객체는 자바스크립트에 도착 사실을 알고 자바스크립트는 응답 데이터와 DOM을 이용해 사용자 화면에 반영
결과적으로 사용자 입장에서는 페이지 이동이 발생되지 않고 페이지 내부 변화만 일어남


AJAX의 주요 구성 요소
- XMLHttprequest : 웹서버와 통신을 담당함. 사용자의 요청을 웹서버에 전송 및 웹서버로부터 받은 결과를 웹브라우저에 전달함
- DOM : 문서의 구조를 나타냄, 폼 등의 정보나 화면 구성을 조작할때 사용함
- CSS : 글자색,배경색,위치,투명도 등 UI관련 부분을 담당
- 자바스크립트 : 사용자가 마우스를 드래그하거나 버튼을 클릭하면 XMLHttpRequest객체를 사용해 웹서버에 요청을 전송함.
XMLHttpRequest 객체로부터 응답이 오면 DOM, CSS등을 사용해 화면을 조작함



차이 출처
출처: http://hieroglyph.tistory.com/13 [컴퓨터 이야기]




장단점 출처
https://ko.wikipedia.org/wiki/Ajax

2017년 8월 30일 수요일

cafe24 웹호스팅

카페24를 활용한 웹호스팅

가입 후 자신의 프로젝트에 맞는 설정

putty로 호스트 네임 포트번호 입력후 접속한다.

아이디와 비밀번호는 cafe24에서 설정한 아이디, 비밀번호로 접속(cafe24아이디,비밀번호랑 따로 설정했을 꺼임)

톰켓 시작 종료는 ./tomcat/bin/shutdown.sh ./tomcat/bin/startup.sh



파일 질라에 호스트, 사용자명, 비밀번호, 포트번로 입력 후 연결

wepapps 에 이클립스에서 export한 war파일을 넣고 

톰켓 재시작을 하면 완료 

//////////////////////
cafe24의 mysql에 쓰던 db넣기

워크벤치에서 export하면 sql형태로 다 나온다

cafe24 mysql 관리창에서 import 하여 하나하나 등록 하면 db옮기기 완료


///////////////////////
프로젝트경로나 파일 업로드의 경로 설정이 항상 문제다 ㅠㅠ
ROOT폴더에 하면 될것같긴한데 시도는 안해봤다


업로드(게시물, 프로필, 갤러리)는 경로는 이렇게 설정




JSP 서블릿 정리

유튜브 JSP 강의 정리

1~3강

웹서버: 클라이언트의 요청에 의해 제공해는 서버, 별도의 구현이 필요한 로직이 있을 경우 웹어플리케이션 서버에 요청

웹브라우저: 웹서버에 정보를 요청하고, 웹서버로부터 정보를 받는 매개체, 이때 http프로트콜을 사용

JSP
동적 웹어플리케이션/클라이언트의 요청에 동적으로 작동, 응답은html을 이용/ jsp는 서블릿으로 변환되어 실행/mvc패턴에선 view로 이용


m 모델(데이터구조)
v 뷰(jsp)
c 컨트롤러(모델과 뷰를 연결, 서블릿)
 3. MVC패턴(Model-View-Controller pattern)
 : MVC(Model-View-Controller) 구조는 전통적인 GUI(Graphic User interface) 기반의 어플리케이션을 구현하기 위한 디자인 패턴이다. MVC 구조는 사용자의 입력을 받아서, 그 입력 혹은 이벤트에 대한 처리를 하고, 그 결과를 다시 사용자에게 표시하기 위한 최적화된 설계를 제시한다.

 1) 뷰(View)는 화면에 내용을 표출하는 역할을 담당하는 것으로 데이터가 어떻게 생성되고, 어디서 왔는지에 전혀 관여하지 않는다. 단지 정보를 보여주는 역할만을 담당한다. JSP기반의 웹 어플리케이션에서는 JSP페이지가 뷰(View)에 해당한다.

 2) 모델(Model)은 로직을 가지는 부분으로 DB와의 연동을 통해서 데이터를 가져와 어떤 작업을 처리하거나, 처리한 작업의 결과를 데이터로서 DB에 저장하는 일을 처리한다. 모델(Model)은 어플리케이션의 수행에 필요한 데이터를 모델링하고 비즈니스 로직을 처리한다. 즉, 데이터를 생성하고 저장하고 처리하는 역할만을 담당한다. JSP기반의 웹 어플리케이션에서는 자바빈(JavaBean)이 모델(Model)에 해당한다.

 3) 컨트롤러(Controller)는 어플리케이션의 흐름을 제어하는 것으로 뷰(View)와 모델(Model)사이에서 이들의 흐름을 제어한다. 컨트롤러(Controller)는 사용자의 요청을 받아서 모델(Model)에 넘겨주고,  모델(Model)이 처리한 작업의 결과를 뷰(View)에 보내주는 역할을 한다. JSP기반의 웹 어플리케이션에서는 보통 서블릿(Servlet)을 컨트롤러(Controller)로 사용한다.


출처: http://dawnisthm.tistory.com/entry/MVC-패턴-구현이론 [패션과 IT]


jsp아키텍처
.jsp >> .java(톰캣에서해줌?) >> .class(컴파일/jvm을 위한)

4강

서블릿은 자바 파일
>>매핑과정

자바스레드이용하여 동작>>으로 인해 요청이 몰려도 서버의 부하가 적게걸림
컨트롤러로 이용됨
매핑은 간단히 말해서 닉네임 (닉네임을 정해서 주소에 매핑에 맞는값을 받으면 헬로월드서블릿에 접근)
매핑을 하는 이유는 맵핑안하면 길고, 보안에 노출되어있기 때문

서블릿태그 서블릿>>클래스를 서블릿네임으로 정해서 접근
서블릿매핑 >> 방금 정한 이름을 /hw 으로 접근하겠다 명시


어노테이션으로도 매핑을 할수 있음 @~~




5강 

서블릿클래스는 http서블릿 클래스를 상속 받음

서블릿(인터페이스) - genericservlet(abstract) - htppservlet

클라이언트 << 요청(클라이언트한테오는 정보[아이디 등 정보 보냄])/응답(디비에서 확인을해서 맞는지아는지 정보 보냄) >> was(웹어플리케이션서버)


get방식 post방식 (클라이언트에서 aws 요청을 하는데 html태그안에 메소드 방식에 따라 달라짐) : get방식으로 오면 doget방식 메소드 호출
post방식이면 dopost메소드 실행

get: url값에 정보를 실어서 전송되어 보안에 약함
post: 헤더를 이용해 정보가 전송되기 때문에 보안에 강함(사용자가 url에 표시된 정보를 볼수 없음)


6강 

클라이언트에서 서블릿요청이 들어오면 서버에서는 서블릿컨테이너를 만들고 요청이 있을때마다 스레드가 생성됨
웹브라우저> 웹서버 > 웹어플리케이션서버(aws) > 서블릿 컨테이너(스레드 생성, 서블릿 객체 생성)
서블릿 장점 -
리퀘스트(요청)를 처리할 객체가 생성  (다른건 요청이올때마다 객체를 생성함 요청이많이 들어오면 부하가 걸림)
서블릿은 jvm에 스레드가 하나 생성(여기서 요청처리) >>다른 cgi? 언어에 비해서 서버 부하가 적게 발생
[ CGI란 공통 게이트웨이 인터페이스(common gateway interface)의 약어로, 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다.]

생명주기(라이플 사이클)
서블릿의 사용도가 높은 이유는 빠른 응답속도  //서블릿은 최초 요청시 객체가 만들어져 메모리에 로딩되고, 이후 요청시에는 기존 객체 재활용 >> 따라서 속도가 빠름
서블릿 객체생성 > init() > service(서비스를 통해 연결?? 검색해 볼것!),[doget,dopost] > destroy()

선처리, 후처리
init호출하기전에 선처리(@PostConstruct)  destroy 후에 후처리(@PreDestroy) 그냥 실행되는 시점 설명하는듯


7강

html form태그 : 서버쪽으로 정보를 전달할때 사용하는 태그
input태그 (ex text, password, submit, checkbox, radio, reset  등)

form태그: input태그들의 값을 서버로 전송하기 위한 정보를 담고있음
여기서 get이면 http://~~~:8080/hello/join?id="aa"&name="홍" //post는 ~~~join/

서블릿 파라미터
서블릿에서 httpservletrequest 객체를 이용해 파라미터값을 얻을 수 있음 ex) string id = request.getParameter("id");

한글처리
get방식( server.xml 수정 <Connector URIEncoding="EUC-KR" port="8181"~~
post방식 dopost에 request.setCharacterEncoding("EUC-KR);



8강

서블릿 초기화 파라미터:특정 서블릿이 생성될때 초기에 필요한 데이터 ( 경로, 아이디 정보 등) >초기화 파라미터> web.xml에 기술 > 서블릿파일에서는 servletconfig 클래스를 이용해 접근 or 서블릿파일에 직접 기술
web.xml ex)<init-param><param-name>~~</~></~>
>>서블릿에서 getinitparameter로 가져올수잇음

서블릿파일에 직접기술: @WebInitParam(name="id", value="abc"),@WebInitParam(name="pw", value="abc"),,,이런식으로


servletcontext 데이터 공유
여러서블릿에서 특정 데이터를 공유할 경우 context parameter를 이용해 web.xml에 기술을 하고 서블릿에서 공유하면서 사용 가능
<context-param><param-name><param-value></~></~></~>
>>서블릿에서 getServletContext().getInitParameter("id")

servletcontextlistener 웹어플리케이션 감시
웹어플리케이션(컴포넌트들을 묶어논 프로그램?)의 생명주기 감시하는 리스너
web.xml에 리스너등록 <listener><listener-class>com.jva~~.ad~</~></~>
리스너 클래스 따로 제작(아까한것보다더 더 먼저 실행, 나중에 실행 강의에선 순서설명함)

web.xml에 리스너등록안하고 클래기스 @WebListener 해도 되는듯


9강

jsp는 서블릿과 반대로 html코드에 자바 언어를 삽입하여 동적문서를 만듬
jsp태그종류
지시자<%@ %> : 페이지 속성
주석 <%-- --%>
선언 <%! %> : 변수, 메소드 선언
표현식 <%= %> :결과값 출력 (;이 붙지않음)
스크립트릿 <% %> java코드
액션 태그 <jsp:action> </jsp:action> : 자바빈 연결

jsp주석은 안보임..?

jsp동작원리
클라이언트가 웹브라우저로 dawd.jsp를 요청하게되면 jsp컨테이너가 jsp파일을 servlet파일(.java)로 뱐환됨
servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 클라이언트한테 html파일 형태로 응답

jsp내부객체: (객체를생성하지않고 바로 사용할수있는 객체)
내부객체는 jsp컨테이너에 의해 servlet으로 변환될때 자동으로 객체가 생성
ex) request, response, out, page, config, session, exception 등


10강

스크립트릿, 선언, 표현식  >>스크립(scripe)
jsp문서안에 java문서언어를 넣기 위한 방식들 > 많이 쓰임
스크립트림(scriptlet) <% java코드 기술 %>: jsp페이지내에서 java언어를 사용하기 위한 요소 중 가장 많이 사용

선언(<%! java코드 기술 %>: jsp페이지 내에서 사용되는 변수 또는 메소드(전역의 의미)

표현식<%= java코드 기술 %>: jsp페이지 내에서 사용되는 변수의 값 또는 메소드 호출 결과값을 출력하기 위해 사용, string타입이며, ;를 사용불가


지시자<%@ %>: jsp페이지의 전체적인 속성을 지정할때 사용
 (page 해당 페이지의 전체적인 속성 [import/language 등등],
include 별도의 페이지를 현재 페이지에 삽입 [include file="dad.jsp"],
taglib 태그라이브러리의 태그 사용 [사용자가 만든 tag를 사용하기위해 사용, uri(라이브러리위치값) 및 prefix속성(태그를 가리키는 이름)이있음 )

주석
html<!-- -->
jsp<%-- --%>


11강

request객체의 이해: 웹브라우저를 통해 서버에 어떤 정보를 요청하는것
request객체관련 메소드 getContextPath() / getMethod() / getSession / getProtocol 등등
getParameter가 많이 쓰임
getParameter(String name): name에 해당하는 파라미터 값 구함
getParameterNames: 모든 파라미터 이름을 구함
getParameterValues(String name): name에 해당하는 파라미터값들을 구함

response객체의 이해: 웹브라우저의 요청에 응답하는것
response관련 메소드 getCharcterEncoding() / sendRedirect(URL) 등


12강 

액션태그 : jsp페이지 내에서 어떤 동작을 하도록 지시하는 태그 (페이지 이동, 페이지 include 등)
forward 현재 페이지에서 다른 특정페이지로 전환 <jsp:forward page="sss.jsp"/>

include 현재페이지에 다른 페이지 삽입 <jsp:include page="inda.jsp" flush="true" />

param forward 및 include 태그에 데이터 전달을 목적 <jsp:forward page="sss.jsp"><jsp:param name="id" value="aa"/></jsp:forward>

13강 

쿠키 : http프로토콜은 응답후 관계를 끊음, 연결이 끊겼을때 어떤 정보를 지속적으로 유지하기위한 수단 (클라이언트 측에 저장, 서버에 요청할때마다 쿠키의 속성값을 참조 또는 변경가능, 4kb용량, 300개까지 데이터 정보를 가질수 있음)

쿠키 문법: 쿠키 생성(쿠키 클래스) > 속성 설정(setter) > response객체에 쿠키 탑재
setMaxAge(), setpath() 등등...


14강

세션 : 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단 , 쿠키와 달리 클라이언트에 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재 > 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에 한계가 없음

세션 문법: 클라이언트 요청이 발생하면 자동생성: 클라이언트 요청 > 세션 자동 생성 > 세션 속성 설정
setAttribute(), getId() 등등

15강

예외페이지 : 예외발생시 예외페이지로 이동
페이지 지시자를 이용한 예외 페이지<%@ page errorPage ="errorPage.jsp"%>  >> errorPage.jsp: <%@ page isErrorPage="true"%>(예외페이지인 경우 true로 명시해줄것) <% response.setStatus(200);%><%= exception.getMeessage()%>

web.xml 파일로 예외처리  : <error-page><error-code>404</error-code><location>/error404.jsp</location></error-page> 추가

16강

자바 빈 : 반본적인 작업을 효율적으로 하기위해 사용, java언와의 데이터(속성)와 기능(메소드)로 이루어진 클래스. ex(도메인 부분 board, user 등)
빈 관련 액션 태그(useBean: 특정 빈을 사용한다고 명시 할때 <jsp:useBean id="student" class="com.javalec.ex.~~" scope="page" />
, setProperty: 데이터 값을 설장할때 <jsp:setProperty name="student" property="name" value="홍길동" />
, getProperty:데이터 값을 가져올때 <jsp:getProperty name:student property="name"/>
)


17강 ~19강

데이터 베이스
 dbms(database managerment system) 데이터베이스 관리 시스템  응용프로그램(웹어플리케이션jsp,java등등)  >> dbms >> DataBase
jdbc java프로그램에서 sql문을 실행하여 데이터를 관리하기 위한 java api
다양한 데이터베이스에 대해서 별도의 프로그램을 만들 필요 없이, 해당 데이터베이스의 jdbc를 이용하면 하나의 프로그램으로 데이터 베이스를관리
데이터베이스 연결 순서: jdbc 드라이버 로드 > 데이터베이스 연결 > sql문 실행 > 데이터베이스 연결 해제
statement > excuteQuery()  [select]/ excuteUpdate() [insert, delete, update 등]
resultset : excuteqeury 실행후 반환되는 레코드 셋

회원관리 실습


20강 

커넥션 풀
DAO: Data Access Object : 데이터베이스에 접속해 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스
DTO: Data Transfer Object:  데이터를 관리하기위해 데이터의 클래스를 만들어 사용

DBCP(커넥션 풀) : 클라이언트에 다수의 요청이 발생할 겨우 데이터베이스에 부하가 발생하게 됩니다. 이러한 문제를 해결하기 위해 이용
preparedStatement객체를 이용해 쿼리 중복코드 줄임

21강 ~22강

회원인증 프로그램 실습 ,파일 업로드

23강

 EL
Expression Language : 표현식 또는 액션 태그를 대신해서 값을 표현하는 언어 &{}
<jsp:getProperty name="memeber" property="name"/> >>> &{member.name}

내장객체
pageScope: 페이지 객체를 참조하는 객체
requestScope :request 객체를 참조하는 객체
sessionScope: ~
applicationScope : ~
param:요청파라미터를 참조하는 객체
paramValues: 요청 파라미터(배열)을 참조하는 객체
initParam: 초기화 파라미터를 참조하는 객체
cookie: cookie객체를 참조하는 객체

24강 

JSTL(JSP Standard tag library)
JSTL에서는 다섯가지의 라이브러리를 제공합니다(core, XML Procession .등등...)
Core라이브러리: 기본적인 라이브러리로 출력, 제어문, 반복문 같은 기능 포함
<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix="c" %>

출력 <c:out>
변수 설정 <c:set>
변수 제거<c:remove>
예외처리<c:catch var="변수명">
if<c:if>
for <c:forEach>
페이지 이동 <c:redirect>
파라미터 전달 <c:param>


25강

 FrontController패턴 Command 패턴
디렉토리 패턴 > ~~~/hello
확장자 패턴 > ~~~.do

FrontController 패턴 : 다양한 요청을 한곳으로 집중시켜, 개발 . 유지보수에 효율성 극대화
Command : 요청을 서블릿이 직접하지않고 해당 클래스가 처리하도록 함

26강

 포워딩
RequestDispatcher 클래스: 서블릿 또는 jsp에서 요청을 받은 후 다른 컴포넌트로 요청을 위임
RequestDispatcher클래스(요청받은 요청객체를 위임하는 컴포넌트에 동일하게 전달),
HttpServletResponse클래스 (동일하게 요청을 위임하는 클래스 그러나 새로운 요청객체를 생성하는것이 차이점)

>>요청받은 값을 다른 곳에서 처리하도록 보내주는것???
다시 정리;;

27~30

 mvc게시판  

2017년 8월 2일 수요일

jQuery- $(document).ready(function()

$(document).ready(function () {});
= jQuery(document).ready(function () {});
= $(function() {});
= window.onload = function() {});
위의 문장은 모두 같은 기능을 한다.
의미는 [웹 페이지를 모두 읽어 들이고, 준비가 된 후에 처리]이다.

위에서 상위 세 개의 문장은 jQuery, 맨 아래 문장은 고전 javascript 문장이다.
장단점을 보면 jQuery문장은 안에서 여러개의 함수를 실행할 수 있지만, javascript문은 그렇지 않다.

$(document).ready() VS $(window).load()
$(document).ready()
: DOM객체만 로드 되자마자 처리됨.
$(window).load()
: 해당 페이지의 모든 외부 리소스가 로드된 후에 처리됨.

처리 순서 : $(document).ready() > $(window).load()


2017년 7월 6일 목요일

css 수정 후 적용이 안되는 문제

웹서버에서 캐시를 올려놓고 계속 쓰기때문에 수정해도 적용이 안되는 문제가 발생하는듯 하다.

 <link href="css/landing-page.css?ver=1" rel="stylesheet">
와 같이 버젼정보를 추가해서 보내면 수정한 css가 적용되는 것같다.

html 태그 간단 정리

nav  : 다른 페이지나 같은 페이지 안에 다른 부분으로 이어주는 네비게이션 링크로 구성된 섹션

div : 특별한 의미는 없으며, 문서의 영역을 지정하는데 사용

ul : 순서없는 목록

li : 목록(부모요소가 ol이면 순서가 있고, ul일 경우 순서가 없다.)

hr : 문단레벨에서 주제의 분리를 나타냄

i : 텍스트를 이텔릭체로 장식

span : 인라인 요소로 자체로의 의미는 없음

p : 문단을 나타냄