Back-end/기타 (BE)

뉴렉쳐 Servlet/JSP [11~20강]

philo0407 2020. 10. 1. 20:57

뉴렉쳐님께 감사함을 표합니다!

https://www.youtube.com/watch?v=j6lXa1adyM0&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=16

 

[서블릿/JSP 강의 11 - 이클립스를 이용한 서블릿 프로그래밍]

컨텍스트명은 Context가 아닌 root로 쓰는게 좋아

위 컨텍스트를 / (root) 로 바꾸자

사진 설명을 입력하세요.

ctrl+shift+o (lib 추가)나 ctrl+space 를 잘 이용하자

서블릿 url 매핑법

만일 WEB-INF폴더에 web.xml이 없으면 톰캣 폴더에서 가져오자

<servlet-class>를 수정해주어야 한다.

그리고 서버 재기동한다.


서블릿/JSP 강의 12 - 어노테이션을 이용한 URL 매핑

위처럼 하면 annotation방식으로 매핑이 가능하다.

metadata-complete를 true로 하면 해당 xml에만 매핑정보가 있는걸로 판단한다.

그렇기 때문에 false로 하여, 현재 xml뿐만 아니라 다른 곳에도 매핑 장소가 있다는 것을 알린다.

간단한 실험으로, xml과 anno 둘다 /hello 매핑으로 다른 java파일을 가르키게 해 보았는데 에러 뜬다 ㅋㅋ

xml보다는 anno방식을 선호함

xml은 공용파일이라 사람들끼리 얽혀있지만

anno방식은 각자 만들기가 가능하다.

서블릿/JSP 강의 13 - 서블릿 출력 형식을 지정해야 하는 이유

println의 결과이다

어느것이 정상일까......

explorer가 맞다.

클라단에서는 웹문서를 마크업언어를 렌더링하여 보여준다.

소스보기를 하면

 

<br>같은 태그가 없기 때문에 줄들이 이어져야 한다.

위와 같은 차이가 여전히 존재한다.

문서 형식을 알려줘야해.


서블릿/JSP 강의 14 - 한글과 콘텐츠 형식 출력하기

한글을 입력하면 위와 같이 깨진다.

원인은 크게 두가지

참고로 저 ISO는 유럽 방식이다.

서버쪽에서 UTF-8로 보내자.

resp.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();

이것만으론 불충분하다.

익스플로러는 위와같은 방식으로 바꾸기가 가능하다.

요 헤더에 심어줘야해

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
		
PrintWriter out = response.getWriter();

contentType 해석

char를 UTF-8로 보내니, 언어(한국어) 해석은 요걸로 하면 돼

그리고 이건 html문서야.


서블릿/JSP 강의 15 - GET 요청과 쿼리스트링

사용자에게 출력을 해보았으니 사용자의 입력을 다루어 보자

요청 : 햄버거 주세요, 양파 뺴고요, 아아 샷 두개


서블릿/JSP 강의 16 - 기본값 사용하기

 

 

} } }

package com.newlecture.web;

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("/hi")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");

		PrintWriter out = response.getWriter();

		out.println("Hello ~~ asd <br/>");

		String cnt_ = request.getParameter("cnt");
		
		int cnt = 0;

		if (cnt_ != null && !cnt_.equals("")) {
			cnt = Integer.parseInt(cnt_);
		}
		
		System.out.println("cnt_: " + cnt_); // 디버깅용
		
		if (cnt_ == null) {
			cnt_ = "null값";
		} else if(cnt_.equals("")) {
			cnt_ = "공백 문자열";
		}

		out.printf("cnt 뒤에 온 QueryString값 : " + cnt_ + "<br/><br/><br/>");

		for (int i = 0; i < cnt; i++) {
			out.println((i + 1) + ": 안뇽>< Hello Servlet! <br/>");
		}
	}
}

 

_cnt 등의 변수명은 jdk 버전이 올라가면서 문제가 되는 것 같다.

cnt_등으로 바꾸어 주도록 하자.


서블릿/JSP 강의 17 - 사용자 입력을 통한 GET 요청

VSCode 로도 가능..

저걸 UTF-8로 바꾸자

500 에러메세지 출력의 경우는 예외/예측치 못한 경우인데

원인은

-서버 톡신 Timeout 시간 지연

- 서버 트래픽 과부하

- 서버 언어의 구문 에러(스크립트 문법 오류)

나는 세번째에 해당한다.

https://webisfree.com/2017-04-27/internal-server-error-%EC%84%9C%EB%B2%84-500-%EC%97%90%EB%9F%AC%EB%8A%94-%EC%96%B4%EB%96%A4-%EA%B2%BD%EC%9A%B0%EC%97%90-%EB%B0%9C%EC%83%9D%ED%95%98%EB%82%98%EC%9A%94

 

Internal Server error, 서버 500 에러는 어떤 경우에 발생하나요?

웹서버를 구동하거나 사이트를 방문하면 다음과 같은 에러 메시지를 가끔씩 볼 수 있습니다. 500 Server error. 이런 서버 메시지는 어떻게 왜 발생하는지 알아봅니다.

webisfree.com

 

서블릿/JSP 강의 18 - 입력할 내용이 많은 경우는 POST 요청

이걸루 네트워크 인코딩 가능

 

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Insert title here</title>
  </head>
  <body>
    <div>
      <form action="notice-reg" method="POST">
        <div><label>제목:</label><input name="title" type="text" /></div>
        <div><label>내용:</label></div>
        <textarea name="content"></textarea>
        <div>
          <input type="submit" value="등록" />
        </div>
      </form>
    </div>
  </body>
</html>

 

 

package com.newlecture.web;

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("/notice-reg")
public class NoticeReg extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");

		PrintWriter out = response.getWriter();

		String title = request.getParameter("title");
		String content = request.getParameter("content");
		
		out.println("==== title ====<br/>");
		out.printf(title + "<br/><br/>");
		
		out.println("==== content ====<br/>");
		out.println(content + "<br/><br/>");
	}
}

 

 

한국어 쓰면 깨지는데 이유를 알아보자


서블릿/JSP 강의 19 - 한글 입력 문제

한글로 입력을 멀티바이트로 받아야 하는데,

한 바이트씩 받아서 문제야

request도 인코딩 셋팅해줘야해

tomcat의 server.xml을 건드리는 방식은 좋지 않아

왜냐면 한 와스를 통해서 다른 서블릿도 거쳐가는데 나머지 파일들에 영향을 미치게 돼


서블릿/JSP 강의 20 - 서블릿 필터(Servlet Filter)

요청뿐만 아니라 응답할때 필터를 거치게 할 수 있다!

xml

anno