TIL_Java Spring the Modern Way_11

-·2021년 3월 27일
0

Java Spring the Modern Way

목록 보기
11/13

maven web application project

maven은 빌드툴이다.

maven의 여러태그

  • dependency

    jar를 추가해서 api 사용가능하게 해줌

  • build

    태그 안에 컴파일 할 자바버전이라든지 여러 정보

tomcat7-maven-plugin 사용하면 tomcat을 수동으로 설치안해도
tomcat7:run 명령어로 톰캣에서 구동가능

java Servlet

요청을 받고 응답할수있는(request, response) 간단한 자바클래스

서블릿의 작동과정

  1. http://localhost:8080/ 을 주소창에 치면 브라우저가 이 주소로 request 생성, 헤더와 함께 전송

  2. 서버가 request받아서 해석
    서블릿기준으로 하면 extends HttpServlet 한 class에서 @WebServlet의 urlPatterns가 같은 서블릿클래스가 받음
    get이면 doGet, post면 doPost 클래스가 받아서 해줌 이걸 override해서 원하는 로직을 수행하면 된다.

  3. 서버가 다시 브라우저한테 response를 보내줌. 해당하는 html페이지를 보낸다.

    (여기서는 PrintWriter로 만들어서 보냈다.) response도 역시 header가 존재

  4. 브라우저는 그 html을 출력

하지만 java는 비즈니즈로직을 만드는데 좋은언어지 정적컨텐츠를 만드는데 적합한 언어가아님

지금 PrintWriter로 html만드는거 개불편함.

그래서 ?

JSP라는걸로 정적컨텐츠를 만들어서 보내주는게 적합하다.

/WEB-INF/views/login.jsp를 만들어서 html파일을 만들고
우리는 지금 get방식 request를 하고있으니 doGet에

request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);

이렇게 파일을 찾아서 전달해주면 login.jsp가 브라우저에게 전달되는것이다.

welcome page 설정

http://localhost:8080/ 만 쳐도 http://localhost:8080/login.do로 연결시켜줌

web.xml

<welcome-file-list>
	<welcome-file>login.do</welcome-file>
</welcome-file-list>

태그에 login.do를 셋팅해놨기 때문에 경로가 없어도 login.do로 연결해준다.

parameter

url로 parameter전달

get방식에서는 url끝에 ? 파라미터이름=값&이름=값 이렇게 전달가능

http://localhost:8080/?name=level

서블릿에서의 사용

서블릿에서는 request.getParameter("name") 이렇게 값을 가져올수잇다.

parameter와 attribute

parameter는 브라우저와 웹어플리케이션, 서버 간의 값을 주고받을때 attribute는 jsp페이지와 값을 주고받을때

그래서 처음에 봤을때는
왜 response.setAttribute("name", name);가 아니고request.setAttribute("name", name); 인지 궁금했는데

이제 이해가 됨

브라우저에서 서버로 갈때 request 이고 서버에서 브라우저로 갈때 response 이기 때문이다.
Attribute는 아직 서블릿에서 jsp로 가는중인거기 때문에 서버안에서 돌아가고있는거다. 그러니까 아직 request상황인거다

그래서 attribute 설정할 때 request.setAttribute("name", name); 이거임

jsp페이지 안에서는 ${name} 이런식으로 가져오기 가능

JSP안에서 자바코드 사용하기 (Scriptlet, Expression, Declaration)

권장되는방법은 아니지만 jsp페이지에서도 java코드를 사용할수있다.

Scriptlet

<%

​ 이 태그안에서 자바코드를 작성하면 된다.

%>

Expression

<%=name%>이런식으로 값을 가져오기 가능

Declaration

<%!

String[] charts = new String[] { "BarChart", "ChordChart", "PieChart", "scatterplot" };

%>

하지만 jsp에서 java코드를 쓰는순간 그동안 비스니스로직을 분리하기 위해서 했던 짓들이 쓸모없게된다.
그래서 권장되는방법이 아니다. 솔직히 쓰기도 불편함.

${name} 이런식의 JSTL정도로 쓰는걸로 하자.

GET, POST

  • GET 방식

    url에 파라미터를 적어서 보내는 방식

    ex) testurl?param1=val1¶m2=1234 이런식으로 ?,& 사용해서 보냄

  • POST방식

    get방식은 url에 어떤 데이터가 전달되는지 다 보이기때문에 보안상 모든곳에 적용하기 안좋다.

    그래서 post방식을 사용해보자

    ex)

    <form action="/login.do" method="post">
    	Enter your name <input type="text" name="name">
    	Enter your password <input type="password" name="password">
    <input type="submit">

    method="post"안적어주면 그냥 GET방식으로 보내버린다.

이렇게 하면 405에러가 난다.

왜냐 우리는 아직 서블릿에 POST방식 처리를 만들어 두지 않았다. GET방식으로 밖에 못받는데 POST로 요청이 와서 에러가 난거다.

서블릿에 doPost라고 POST처리를 할수있게 함수를 만들어주자.

그럼 잘된다.

profile
거북이는 오늘도 걷는다

0개의 댓글