파이썬은

- 껐다 키면 잃어버린다. 꼭 다시 실행해주자.

 

이스케이프 코드

뒤에 영어가 붙어 있더라도 원화표시 뒤에는 무조건 이스케이프 코드에 해당된다.

이스케이프 코드 

\\ - 원화 표시 (리눅스 운영체제는 역슬래시로 반환)
\n - 개행
\t - 수평탭

문자열 개행이나 중복되는 " "마음대로 쓸때

Docstring (독스트링)

 

 

 

문자열 포매팅 방법 3가지


  • 포맷코드 
day = 13
month = 2
weather = "맑음"
s = '2023년 %s월 %s일의 날씨는 %s입니다.'%(month,day,weather)
  • format()함수
day = 13
month = 2
weather = "맑음"
s = '2023년 {}월 {}일의 날씨는 {}입니다.'.format(month,day,weather)
  • f포매팅 
day = 13
month = 2
weather = "맑음"
s = f'2023년 {month}월 {day}일의 날씨는 {weather}입니다.'

 

 

포매팅할 때 연산은 묶어주자

 

 

 

포매팅시 여러개도 묶어주자

 

 

숫자형은 문자열이 될 수 있지만 문자열은 숫자타입에 들어갈 수 없다.

 

 

format() 함수는 데이터 타입을 따로 기재해줄 필요가 없다

 

 

예제01

 

 

 

연산자

 

ppt 이미지

 

 

문자열 더하기
문자 + 숫자는 안된다.

 

문자열 더하기
str1 + str2 
옆에 붙여주세요라는 뜻 (정상적인 산술연산 된 것이 아니다.)

 

 

형변환
  • int() --> 정수로 변환
  • str() --> 문자열로 변환
  • float() --> 실수로 변환
num1 = 7
str1 = "70"

# 숫자를 문자열로
print(str(num1) + str1)

# 문자열을 숫자로
print(num1 + int(str1))

 

 

 

입력도구
input()

  • 받은 데이터의 기본 자료형은 문자열이다.
  • 입력받을 시 출력문구 작성가능하다 

 

문자열 곱하기

문자열 곱하기

지수 연산자

지수 연산자

 

 

 

 

 

복합 대입 연산자를 왜쓰나?

  • 값을 누적시키기 위해서 사용한다.
  • 코드의 가독성 또한 좋아진다.

 

 

치환
a, b = b, a

일반적 치환방식
파이썬 치환방식

  • 순서대로 바뀌는게 아닌 동시에 치환이 일어난다.
  • 갯수 맞춰주어야 한다.
  • temp 용 변수가 필요 없다.

 

논리(True,False)연산자
  • AND => 두 항중 하나라도 FALSE 면 FALSE
  • OR   => 두 항중 하나라도 TRUE 면 TRUE

 

삼항연산자

  • 경로가 두가지로만 나뉘는 경우에 쓰인다.
  • 자주 쓰이지는 않는다.

복습

Get 방식
  • 쿼리스트링 방식으로 데이터 전송

쿼리스트링 방식

 

Post 방식
  • 패킷에 body 에 데이터를 담아 보내기에 보안에 강하다

 

 


HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="Ex03Join" method="post">
        <table width="400px">
        <!-- Step 1 시작 -->
        <!-- (tr>td*2)*4 -->

        <tr bgcolor="gray" height="50px">
            <th colspan="2">
                Step 1 : 아이디/ 비번 입력
            </th>
        </tr>
        <tr bgcolor="whitesmoke" height="35px">
            <td>아이디</td>
            <td>
                <input type="text" name="id">
            </td>
        </tr>
        <tr bgcolor="whitesmoke" height="35px">
            <td>비밀번호</td>
            <td>
                <input type="password" name="pw">
            </td>
        </tr>
        <tr bgcolor="whitesmoke" height="35px">
            <td>비밀번호 확인</td>
            <td>
                <input type="password" name="pwCheck">
            </td>
        </tr>
        <!-- Step 1 끝  -->

        <!-- 정렬하고싶은 영역 선택 + Ctrl + K + F  -->

        <!-- Step 2 시작 -->

        <tr bgcolor="gray" height="50px">
            <th colspan="2">
               Step 2 : 개인정보
            </th>
        </tr>
        <tr bgcolor="whitesmoke" height="35px">
            <td>성별</td>
            <td>
                남 <input type="radio" name="gender" value="man">
                여 <input type="radio" name="gender" value="woman">
            </td>
        </tr>
        <tr bgcolor="whitesmoke" height="35px">
            <td>혈액형</td>
            <td>
                <select name="blood">
                    <option>A형</option>
                    <option>B형</option>
                    <option>O형</option>
                    <option>AB형</option>
                </select>
            </td>
        </tr>
        <tr bgcolor="whitesmoke" height="35px">
            <td>생일</td>
            <td>
                <input type="date" name="birth">
            </td>
        </tr>
        <!-- Step 2 끝  -->
        <!-- Step 3 시작 -->

        <tr bgcolor="gray" height="50px">
            <th colspan="2">
               Step 3 : 선호도
            </th>
        </tr>
        <tr bgcolor="whitesmoke" height="35px">
            <td>취미</td>
            <td>
                축구 <input type="checkbox" name="hobby" value="soccer">
                야구 <input type="checkbox" name="hobby" value="baseball">
                농구 <input type="checkbox" name="hobby" value="basketball">
            </td>
        </tr>
        <tr  bgcolor="whitesmoke" height="35px">
            <td>좋아하는 색깔</td>
            <td>
                <input type="color" name="color">
            </td>
        </tr>

        <!-- Step 3 끝  -->
        <!-- Step 4 시작 -->

        <tr bgcolor="gray" height="50px">
            <th colspan="2">
               Step 4 : 하고싶은 말
            </th>
        </tr>

        <tr bgcolor="whitesmoke" height="35px">
           <td colspan="2">
            <textarea cols="56" rows="5" name="comment"></textarea>
           </td>
        </tr>

        <!-- Step 4 끝  -->

        <!-- 제출 및 초기화  -->
        <tr bgcolor="whitesmoke">
            <td colspan="2" align="center">
                <input type="submit">
                <input type="reset">
            </td>
        </tr>

        </table>
    </form>
</body>
</html>

 

SERVLET
package com.smhrd.selvlet2;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/Ex03Join")
public class Ex03Join extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 1. post 방식으로 보냈을 대 요청 데이터 인코딩
		request.setCharacterEncoding("UTF-8");
		
		// 2. 응답페이지에 대한 인코딩
		response.setContentType("text/html; charset=UTF-8");
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String pwCheck = request.getParameter("pwCheck");
		String gender = request.getParameter("gender");
		String blood = request.getParameter("blood");
		String birth = request.getParameter("birth");
		String[] hobby = request.getParameterValues("hobby");
		String color = request.getParameter("color");
		String comment = request.getParameter("comment");
		
		// 3.응답해줄수 있는 통로 객체 생성
		PrintWriter out = response.getWriter();
		
		
		out.print("<html>");
		out.print("<body>");
		out.print("아이디 : " + id);
		out.print("<br>비밀번호 : " + pw);
		if(!pw.equals(pwCheck)) {
			out.print("<br><span color=red>비밀번호가 일치하지 않습니다.</span>");
		}
		out.print("<br>성별 : " + gender);
		out.print("<br>혈액형 : " + blood);
		out.print("<br>생일 : " + birth);
		out.print("<br>취미 :");
		for (String val : hobby) {
			out.print(" "+ val);
		}
		out.print("<br>좋아하는 색 : "+color+"<span style='display:inline-block; width:15px; height:15px; background-color:"+color+";'></span>");
		out.print("<br>남기고 싶은 말 : " + comment);
		
		out.print("</body>");
		out.print("</html>");
		
	}

}

 

 

결과화면

 

입력 화면

 

결과화면

 

JSP

Servlet 과 JSP차이

 

 

 

 

JSP

JSP 의 특징
  • .jsp확장자를 가진다.
  • 동적으로 작동하여 응답은 html을 이용한다
  • jsp -> 서블릿(.java) -> 클래스 (.class) -> html 으로 변환되어 실행된다.
  • html 안에 java 언어를 포함하고있는 느낌!!

 

 

JSP 파일을 생성해보자

JSP 파일 생성하기
File Name 만 변경해주고 Finish

 

 

html 생성해주던 디렉토리 webapp 에 생성해준다.

File Name 만 변경해주고  Finish 

 

 

JSP 파일생성

 

 

 

 

'수업 > JSP.Servlet' 카테고리의 다른 글

[JSP/Servlet] 7일 차  (0) 2023.02.16
[JSP/Servlet] 6일 차  (0) 2023.02.15
[JSP/Servlet] 5일 차  (0) 2023.02.14
Servlet - 1일 차 수업  (0) 2023.02.13
Servlet - 1일 차 수업  (0) 2023.02.12

1일차 수업

서블릿 수업할 서버 설치 및 서버실행

html언어 뿌려보기

어제한 수업

html

인코딩방식 브라우저에 알려주기

 

브라우저가 못알아먹어서

request.getParameter

 

 

오늘 수업

 

1. input 타입 컬러 값 넘겨서 서블릿에서 색변경하기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="Ex07MakeGugu">
		색상 선택 : <input type="color" name="color"><br>
		<input type="text" name="num1">에서
		<input type="text" name="num2">까지의 구구단을 출력
		<input type="submit" value="전송">
	</form>
</body>
</html>

*Ex07MakeGugu.html 코드

 

package com.smhrd.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/Ex07MakeGugu")
public class Ex07MakeGugu extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String color = request.getParameter("color");
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<body>");
		out.print("<table bgcolor='"+color+"' border='1'>");
		for (int i = num1; i <= num2; i++) {
			out.print("<tr>");
			for (int j = 1; j <= 9; j++) {
				out.print("<td>"+i+"*"+j+"="+(i*j)+"</td>");
			}
			out.print("</tr>");
		}
		out.print("<table>");
		out.print("</body>");
		out.print("</html>");
	}

}

*Ex07MakeGugu.java  서블릿 코드

 

 

 

추가실습.

 

 

 

** A01Star.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<form action="A01Star">
		색상 선택 : <input type="color" name="color"><br>
		줄 수 입력 : <input type="text" name="num1"><br>
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

 

** A01Star.html

package com.smhrd.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/A01Star")
public class A01Star extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String color = request.getParameter("color");
		int num1 = Integer.parseInt(request.getParameter("num1"));
		
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<body>");
		out.print("<table border='1'>");
		for (int i = 0; i < num1; i++) {
			out.print("<tr>");
			String tdColor = "";
			if(i % 2 != 0) tdColor=color;
			for (int j = 0; j <= i; j++) {
				out.print("<td bgcolor='"+tdColor+"'>*</td>");
			}
			out.print("</tr>");
		}
		out.print("<table>");
		out.print("</body>");
		out.print("</html>");
	}

}

 

 

2교시 데이터 전송 방식의 개념

학습 목표

      1) 데이터 전송 방식(Get/Post)을 이해한다.

      2) requset와 response 객체를 사용하여 요청처리와 응답을 할 수 있다.

 

 

새로운 프로젝트 생성 - Servlet2

 

** 실습내용 - 서블릿 사용시 웹브라우저에 인코딩 해주기

 

** Ex01Login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="Ex01Login">
		ID : <input type="text" name="id"><br>
		PW : <input type="password" name="pw"><br>
		<input type="submit" value="login">
	</form>
</body>
</html>

 

 

** Ex01Login.java

package com.smhrd.selvlet2;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/Ex01Login")
public class Ex01Login extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
//		String pw = request.getParameter("pw"); // 사용을 안해서 딱히 안써도 된다
		
		// 영어나 숫자는 상관이 없으나 한글은 그냥 전송시 깨지기 때문에
		//      인코딩을 해주어야 하기때문에 인코딩 지정방식 전송이 필요
		// 1. 응답 문서에 대한 설정 - 웹브라우저에 보낼 객체에 인코딩할 방식을 담아줌
		response.setCharacterEncoding("UTF-8");
		
		// 2. 웹브라우저에 보낼 객체에 컨텐츠 타입이 text 이고, 
		// 인코딩 방식은 UTF-8이라고 알려주는 값을 담음
		response.setContentType("text/html; charset=UTF-8");
		
		// 컨텐츠에 뿌려질
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<body>");
		out.print("<h2>"+id+" 님 환영합니다</h2>");
		out.print("<body>");
		out.print("</html>");
	}

}

 

 

 

HTTP Protocol Method 종류 별 용도

* GET - 데이터 조회 요청

* POST - 데이터 생성 요청

* PUT - 데이터 수정 요청

* DELETE - 데이터 삭제요청

 

GET 

  - URL 에 데이터를 포함시켜 요청한다.

  - 데이터를 패킷의 Header에 포함하여 전송한다.

  - 전송하는 데이터의 길이에 한계가 있다. (브라우저에서 제한한다)

  - 보안에 취약하다.

  - 캐싱할 수 있다. ? 응답값을 로컬 컴퓨터에 저장

  - form 태그에서 method값을 지정하지 않을 때 기본값으로 지정된다.

 

POST

  - URL에 데이터를 노출하지 않고 요청한다.

  - 데이터를 패킷의 Body에 담아서 전송한다.

  - 전송하는 데이터의 길이에 제한이 없다.

  - 보안에 강하다(get 방식보다) => 보내는 데이터가 눈에 보이지 않기 때문에

  - 캐싱할 수 없다.

 

GET/POST 방식 URL 차이

 

Ex02GetPost.html 생성

 

** Ex02GetPost.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- Get방식 
		1. url에 데이터를 담아서 전송
		2. 데이터 길이에 제한
		3. 데이터가 url에 노출이 되기때문에 보안에 취약
		4. post방식보다 속도가 빠름
		5. method를 따로 지정하지 않으면 기본값 -->
	
	<form action="Ex02GetPost" method="get">
		NAME : <input type="text" name="name">
		<input type="submit" value="Get">
	</form>
</body>
</html>

 

 

 

**Ex02GetPost.java

 

 

 

 

원래는 GET방식일 때 쿼리 스트링 부분도 인코딩 해주어야 한다.

하지만 상위버전인 톰캣이기 때문에 안해주어도된다.

알아서 잘됨...

인코딩 경로
왼쪽(수정전) 오른쪽(수정후)

 

 

get방식 노출하겠다.

post자체가 숨겨서 가겠다.

바디안에서 갈때 요청방식을 원하는 방식으로 지정해야 한다.

웹방식이든 인코딩 방식이든 알려줘야 한다.

 

 

 

** 

 

'수업 > JSP.Servlet' 카테고리의 다른 글

[JSP/Servlet] 7일 차  (0) 2023.02.16
[JSP/Servlet] 6일 차  (0) 2023.02.15
[JSP/Servlet] 5일 차  (0) 2023.02.14
[Servlet] 4일 차  (0) 2023.02.14
Servlet - 1일 차 수업  (0) 2023.02.12

목차

1. 파이썬 설치
2. 파이썬 언어 간단 소개
3. 변수
4. 문자열

 

 

 


파이썬 설치

1. 검색 창에 anaconda 검색 후 맨 위에 사이트 접속 - https://www.anaconda.com/

구글 검색창에 anaconda 검색

 

2. Download 클릭

 

아나콘다 다운로드 버튼

 

3. 설치파일 실행하여 Next 와 I Agree 로 마지막까지 달려준다.

(ㅠㅠ 캡쳐 다 찍어놓고 써놨던 글이 사라져있어서 자세한 부분 및 사진은 생략...)

Download 폴더에 있는 설치파일

여기까지 해주면 설치는 완료인 셈이다. 

설치완료하면 뜨는 Anaconda 웹사이트는 꺼도 상관 없다. 

 

 

 

 


파이썬 실행

1. 뜨는 anaconda 창 꺼주고 파일 찾기 검색 창에 ' ju ' 만 치면 파이썬을 실행할 수 있는 Jupyter Notebook 이 나온다.

2. 크롬으로 통일 항상 이앱을 사용하여 .html 파일열기 체크 후 확인

커널 및 웹브라우저 선택

 

3. 브라우저를 선택하면 아래와 같은 페이지가 열린다.

쥬피터

 

 

 

쥬피터 노트북 커널

 

※ 주의사항

커널은 끄지 않기!

 

경로선택

4. 데스크탑으로 들어간다

 

 

5. 새폴더 생성  [ New -> Folder ]

 

 

새폴더

폴더를 생성하면 위처럼 Untitled Folder 라는 이름으로 폴더가 생성된다.

 

 

이름 변경해준다.

 

파이썬 3 클릭하여 새로운 파이썬파일을 생성해준다.

 

 

언타이틀이라는 파일 명 클릭하여

이름 변경

 

토글 헤더 클릭하여 불필요한 부분 안보이게

 

변수 선언 및 출력 해보기

 

변수 선언은 그저 변수명을 왼쪽에 적고 ' = ' 로 구분짓고 오른쪽에 담을 데이터를 적어준다.

 

 

작성 후 실행하는 방법은 Ctrl + Enter

 

셀추가 파란 상태에서 b 

메모만을 위한 공간이다

 

파란상태에서 숫자 클릭하면 그 숫자만큼 마크다운 #이 생긴다

초록상태에서 파란상태 변경은 ESC 누르기

 

코드작성

▼▼▼

코드실행

 

주석
# 내가 무슨 코드를 적었는지 까먹을 수가 있기에, 이 코드를 보는 다른 사람도 보기 편하기 위해
# 프로그래밍에 있어 내용을 메모하는 목적으로 사용
# 소스코드를 더 쉽게 이해할 수 있게 만드는 것이 주 목적
# 컴파일러(자바) 와 인터프리터(파이썬)에 의해 일반적으로 무시되어 프로그램에 영향을 주지 않는다.
# 파이썬은 "#"으로 주석을 단다.

 

 

설치 및 파이썬 사용방법설명 완료

 

파이썬 수업 시작!!

 

변수 (variable) 

  • 사전적 의미로는 변화를 줄 수 있는 또는 변할 수 있는 수
  • 프로그래밍에서는 데이터를 담을 수 있는 공간
num = 3

3을 num 이라는 이름을 가진 데이터 공간에 담아줄거야.
3을 num 이라는 상자에 넣어줄거야.
3을 num 에 대입하다.
num에 3을 저장

 

print 자체 출력만 해주는 기능이다.

out[ ] 이 필요없다.

코드는 위에서 아래로, 왼쪽에서 오른쪽으로

out 출력은 마지막 코드만 출력된다.

모두 출력을 원하면 print( 출력할 데이터 ) 로 출력가능하다!!

 

실수도 가능

 

 

파이썬은 드래그를 씌우고 " 이나 ' 이나 

개행 후 Ctrl + 선택할 행 클릭하고 글작성시 동시에 작성 가능하다.

 

함수나 변수명 조금 작성 후 TAB 키 누르면 자동완성된다.

# 자동완성을 쓰는 이유는 오타방지!!

 

변수명규칙

작성만 하고 실행하지 않은 변수선언 코드를 출력시 에러나니 꼭 변수 생성 실행했는지 확인 잘하기

커서만 올려놓고 복사가능 

커서 올려놓고 Ctrl + c = > 꼭 블록을 안 씌워도 된다. 단 여러줄은 블록을 씌워야 한다

 

실행 시 * 표시 의미

In [ * ] -> 실행중이라는 뜻이다.

예약어 및 함수는 변수명으로 사용하지 말자.. ㅠ

 

실행 결과 왼쪽 더블클릭시

변수명 표기법

  • 카멜 표기법 - 단어중 두 번째 단어부터 첫 알파벳만 대문자
    • numberList, setListOption 등등
  • 파스칼 표기법 - 단어중 첫 번째 단어부터 첫 알파벳만 대문자
    • NumberList, SetListOption 등등
  • 스네이크 표기법 - 단어중 두번째 단어부터 앞에 언더바 (_) 로 단어 구분
    • number_list, set_list_option 등등

 

변수 선언 실습1

x 에 100 y 에 200 둘을 더한 값 sum 변수에 대입 print( sum ) 하여 300 출력하라!

 

그대로 따라했는데... 함정이 있었다.. sum또한 함수명이었다. ㅠㅠ sum 함수 망가져버림

꼭!!! 내가 쓰는 변수명이 예약어인지 함수명인지 잘 체크하길... (굵은 초록색글씨, 얇은 초록색 글씨 둘다 사용하지 않기!)

 

""" 내용 """

""" 내용 """ 

이렇게 작성하면 그 안에 있는 개행이나 작은따옴표나 큰따옴표 적용이 알아서 된다.

 

마크다운으로 바꾸고 이미지 붙여넣기 시

붙여넣어진다

 

 

 

문자열

컴퓨터는 문자열이 생성 될 시 인덱스가 제일 먼저 생성된다.

문자열은 문자가 들어있는 배열인것일까?

 

사람은 숫자 시작을 1부터 하지만, 컴퓨터는 0부터 시작한다.

끝에서부터 시작시 -1부터 시작한다. (왜냐하면 앞에서 시작할 때 0을 사용했기에 끝 수를 0으로 되었다고 해도 어떤 문자를 가져와야할 지 모르기에 이렇게 되는 듯 하다. )

 

문자열 슬라이싱

파이썬은 컴마 ( , )로 문자열을 붙인다

 

 

문자열 포매팅

  • % 활용
day = 13

s = '2023년 2월 %d일의 날씨는 흐림입니다.'%day
s

결과 :

'2023년 2월 13일의 날씨는 흐림입니다.'
  • format() 활용
day = 13

s = '2023년 2월 {}일의 날씨는 흐림입니다.'.format(day)
s

결과 : 

'2023년 2월 13일의 날씨는 흐림입니다.'

 

 

 

 

 

 

 

 

꿀 tip!

마크다운 행에 <br> - 개행가능 = 띄어쓰기 두번

html 태그로 굵게 표현

 

** ** 사용하여 굵게 표현
굵은 글씨 결과

같은 결과가 나오지만 더 편하게 쓸 수 있다 - 굵은 글씨 표현

<b> 내용 </b> => ** 내용 **  

 

Servlet ( 자바 서블릿 )
정적인 웹페이지를 동적으로 생성하는 서버측 프로그래

서블릿 수업할 서버 설치 및 서버실행

html언어 뿌려보기

어제한 수업

html

인코딩방식 브라우저에 알려주기

 

브라우저가 못알아먹어서

request.getParameter

 

 

오늘 수업

 

1. input 타입 컬러 값 넘겨서 서블릿에서 색변경하기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="Ex07MakeGugu">
		색상 선택 : <input type="color" name="color"><br>
		<input type="text" name="num1">에서
		<input type="text" name="num2">까지의 구구단을 출력
		<input type="submit" value="전송">
	</form>
</body>
</html>

*Ex07MakeGugu.html 코드

 

package com.smhrd.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/Ex07MakeGugu")
public class Ex07MakeGugu extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String color = request.getParameter("color");
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<body>");
		out.print("<table bgcolor='"+color+"' border='1'>");
		for (int i = num1; i <= num2; i++) {
			out.print("<tr>");
			for (int j = 1; j <= 9; j++) {
				out.print("<td>"+i+"*"+j+"="+(i*j)+"</td>");
			}
			out.print("</tr>");
		}
		out.print("<table>");
		out.print("</body>");
		out.print("</html>");
	}

}

*Ex07MakeGugu.java  서블릿 코드

 

 

 

추가실습.

 

 

 

** A01Star.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<form action="A01Star">
		색상 선택 : <input type="color" name="color"><br>
		줄 수 입력 : <input type="text" name="num1"><br>
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

 

** A01Star.html

package com.smhrd.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/A01Star")
public class A01Star extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String color = request.getParameter("color");
		int num1 = Integer.parseInt(request.getParameter("num1"));
		
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<body>");
		out.print("<table border='1'>");
		for (int i = 0; i < num1; i++) {
			out.print("<tr>");
			String tdColor = "";
			if(i % 2 != 0) tdColor=color;
			for (int j = 0; j <= i; j++) {
				out.print("<td bgcolor='"+tdColor+"'>*</td>");
			}
			out.print("</tr>");
		}
		out.print("<table>");
		out.print("</body>");
		out.print("</html>");
	}

}

 

 

2교시 데이터 전송 방식의 개념

학습 목표

      1) 데이터 전송 방식(Get/Post)을 이해한다.

      2) requset와 response 객체를 사용하여 요청처리와 응답을 할 수 있다.

 

 

새로운 프로젝트 생성 - Servlet2

 

** 실습내용 - 서블릿 사용시 웹브라우저에 인코딩 해주기

 

** Ex01Login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="Ex01Login">
		ID : <input type="text" name="id"><br>
		PW : <input type="password" name="pw"><br>
		<input type="submit" value="login">
	</form>
</body>
</html>

 

 

** Ex01Login.java

package com.smhrd.selvlet2;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/Ex01Login")
public class Ex01Login extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
//		String pw = request.getParameter("pw"); // 사용을 안해서 딱히 안써도 된다
		
		// 영어나 숫자는 상관이 없으나 한글은 그냥 전송시 깨지기 때문에
		//      인코딩을 해주어야 하기때문에 인코딩 지정방식 전송이 필요
		// 1. 응답 문서에 대한 설정 - 웹브라우저에 보낼 객체에 인코딩할 방식을 담아줌
		response.setCharacterEncoding("UTF-8");
		
		// 2. 웹브라우저에 보낼 객체에 컨텐츠 타입이 text 이고, 
		// 인코딩 방식은 UTF-8이라고 알려주는 값을 담음
		response.setContentType("text/html; charset=UTF-8");
		
		// 컨텐츠에 뿌려질
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<body>");
		out.print("<h2>"+id+" 님 환영합니다</h2>");
		out.print("<body>");
		out.print("</html>");
	}

}

 

 

 

HTTP Protocol Method 종류 별 용도

* GET - 데이터 조회 요청

* POST - 데이터 생성 요청

* PUT - 데이터 수정 요청

* DELETE - 데이터 삭제요청

 

GET 

  - URL 에 데이터를 포함시켜 요청한다.

  - 데이터를 패킷의 Header에 포함하여 전송한다.

  - 전송하는 데이터의 길이에 한계가 있다. (브라우저에서 제한한다)

  - 보안에 취약하다.

  - 캐싱할 수 있다. ? 응답값을 로컬 컴퓨터에 저장

  - form 태그에서 method값을 지정하지 않을 때 기본값으로 지정된다.

 

POST

  - URL에 데이터를 노출하지 않고 요청한다.

  - 데이터를 패킷의 Body에 담아서 전송한다.

  - 전송하는 데이터의 길이에 제한이 없다.

  - 보안에 강하다(get 방식보다) => 보내는 데이터가 눈에 보이지 않기 때문에

  - 캐싱할 수 없다.

 

GET/POST 방식 URL 차이

 

Ex02GetPost.html 생성

 

** Ex02GetPost.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- Get방식 
		1. url에 데이터를 담아서 전송
		2. 데이터 길이에 제한
		3. 데이터가 url에 노출이 되기때문에 보안에 취약
		4. post방식보다 속도가 빠름
		5. method를 따로 지정하지 않으면 기본값 -->
	
	<form action="Ex02GetPost" method="get">
		NAME : <input type="text" name="name">
		<input type="submit" value="Get">
	</form>
</body>
</html>

 

 

 

**Ex02GetPost.java

 

 

 

 

원래는 GET방식일 때 쿼리 스트링 부분도 인코딩 해주어야 한다.

하지만 상위버전인 톰캣이기 때문에 안해주어도된다.

알아서 잘됨...

인코딩 경로
왼쪽(수정전) 오른쪽(수정후)

 

 

get방식 노출하겠다.

post자체가 숨겨서 가겠다.

바디안에서 갈때 요청방식을 원하는 방식으로 지정해야 한다.

웹방식이든 인코딩 방식이든 알려줘야 한다.

 

 

 

** 

 

'수업 > JSP.Servlet' 카테고리의 다른 글

[JSP/Servlet] 7일 차  (0) 2023.02.16
[JSP/Servlet] 6일 차  (0) 2023.02.15
[JSP/Servlet] 5일 차  (0) 2023.02.14
[Servlet] 4일 차  (0) 2023.02.14
Servlet - 1일 차 수업  (0) 2023.02.13

+ Recent posts