오라클 데이터베이스

SQL 10일차(0721) servlet 하네

피아마수 2023. 7. 21. 10:05

web server

요청받기 요청 파악 웹페이지 제공

클라이언트 의 요청이 정적컨텐츠(해석의 주체가 클라이언트, 서버가 해석하지 않는 자원)라면 그냥 제공해준다

Apache

WAS

동적컨텐츠 (JSP, Servlet,PHP,ASP등등)

jdk에 의해서 컴파일되어 정적컨텐츠로 변환할 수 있는것

 

Apache-tocat안에 web server, WAS가 둘다 있음

마이크로소프트가 갖고 있는 웹서버 IIS

 

Weblogic WebSphere 은 문제가 생기면 AS 가능ㅋㅋㅋ

 

로드 밸런싱

누가 가 부하를 나눌까?

(웹서버)apache 나 nginx가 클라이언트와 서버 사이에서 로드 밸런싱을 해서 server에 연결하게 한다.

세션 공유가 안되서 토큰을 사용해서 공유한다.

어플리케이션 서버

tomcat , jboss 

 

JSP - > class로 컴파일

 

mvc 모델

모델 1

JSP가 모든 요청을처리

콘솔창대신 JSP로 연결해서 사용

JSP에서 DAO생성 해서 처리하는 그런거;;

근데 대규모 사이트에서는 이게 불가능하다 JSP의 부담이커서

 

모델 2

servlet이 모든 요청을처리

servlet은 자바파일 이라서 웹서버에서 인식하지 못해서 요청 링크를 만듬

역사상 jsp보다 Servlet이 먼저 만들어짐 웹페이지를 만들기 위해 request , response을 자바파일에서 할 수있도록함 

out.print로 작성하던ㄱ ㅓhtml파일로 바꿔낸게 JSP

화면부는 jsp가 맡고 servlet은 자바코드부분을 맡는다

전자정부프레임워크는 java spring으로 구성되어있다..

 

 

Oracle도 웹서버에 접근 가능해서 8080포트를 사용하기 때문에 포트번호를 바꿔 줘야한다

 

 

 

 

 

 

 

 

 

 

 

 

 

css,html,jsp workspace

디폴트로 뜨는게 chrom으로 해두자

 

 

프로젝트 실행해보기

 

 

 

 

 

 

웹서버에서 web.xml 파일에서 처음 폴더를 웹서버에서 실행하면 나오는 파일을 지정할 수있다

http://localhost:8090/WebServlet_1/ --> 이런식을 접근해서 파일명을 안쓰고도 최초로 열리는 파일지정

 

 

 

 

아파치톰캣이 주는 javaX

 

url설정하는 영역

 

 

함수들 생성가능

doget --클라이언트로 부터 넘어오는 상태에 따라 get방식이면 이함수가 받아줌

dopost --클라이언트로 부터 get방식으로 넘어오면 이 함수가 받아줌

 

 

 

 

web. xml 수정하면  서버 재시작 해줘야함

 

 

forward

내가 request한 똑같은 객체를 전달 할 수있다.

 

request --> 클라이언트가 요청을 보내면 서버는 request에 클라이언트에 대한 정보를 받아둔다 ip 브라우저정보등등

요청당 하나씩 만들어짐, a.jsp 보여줘 -> 만듦 b.jsp보여줘->또만들어

 

 

 

view에 만들면 클라이언트가 접근 불가능 그래서 여기서 만듬

 

jsp 안쓰고 쓰는법

 

타임리프 라는게 html에 서버 내용을 뿌려줄 수잇는거임 jsp쓰는대신에

 

프리마커라는 것도 jsp쓰는것대신에 쓰는거

EL&JSTL은 이렇게 쓰는거

<%= %> 대신에 쓰는거다

 

 

default.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>서블릿 요청 처리하기</h3><h3>getConextPath</h3>
<%=request.getContextPath() %>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/simple?type=greeting">simple 요청하기 (GET)</a>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/simple?type=date">날짜 요청하기 (GET)</a>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/simple?type=aaaa">비정상 요청하기 (GET)</a>
<hr>
<!-- 다른 곳에 가서도 실행되도록 할 수잇음 주소를 -->
<a href="<%=request.getContextPath() %>/action.do?cmd=greeting">정상 요청하기 (GET)</a>

</body>
</html>

simpleview.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>simplecontroller에서 forwㅁrd된 페이지</h3>
	<h3>화면에 출력</h3>
	<%=request.getAttribute("result") %>
</body>
</html>

 

SimpleController.java (servlet)

 

package com;

import java.io.IOException;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 servlet은 웹 용 자바 파일이다 (request, response를 사용가능하다)
 SimpleController.java >> extends Httpservlet 상속 >> servlet
jsp - > WAS가 해석을 한다
요청 : localhost:8090/web/login.jsp
servlet
요청 : localhost:8090/web/login.java -->에러나자나 어떻게 할까? ->>매핑하자

{
 <servlet>
 별칭
  	<servlet-name>simpleController</servlet-name>
  	클래스가 어딧냐
  	<servlet-class>com.SimpleController</servlet-class>
  </servlet>
  <servlet-mapping>
  별칭
  	<servlet-name>simpleController</servlet-name>
  	넘겨줄 url
  	<url-pattern>/simple</url-pattern>
  </servlet-mapping>
  }
  -->이렇게 줄이기 가능
  @WebServlet("/simple")
  
  http://localhost:8090/Webservlet_1/simple 요청
  
 
 */
//어노테이션은 자바 파일을 실행할때 컴파일러에게 지정해주는 조건같은거

public class SimpleController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public SimpleController() {
        super();
        System.out.println("SimpleController 생성자 호출");
    }
//없어도 에러는 안남
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println("클라이언트 요청 GET");
	//로직코드 작성
	//1. 한글처리
	request.setCharacterEncoding("utf-8");
	//2. 데이터 받기(요청 의도 파악) >> 회원가입 or 게시판 or 로그아웃
	String type = request.getParameter("type");
	//3. 업무 수행(비즈니스 수행)
	Object resultobj =null;
	if(type==null|type.equals("greeting")) {
		resultobj="hello world";
	}else if(type.equals("date")) {
		resultobj = new Date();	
	}else {
		resultobj = "invalid String type";
	}
	
//	PrintWriter out = response.getWriter();
//	out.print(resultobj);
	//4.요청 결과를 저장
	//결과를 저장 : application , session(모든페이지), request (저장의 범위가 자기자신 페이지)-->include,forward하면 다른데서도 쓸수 있다.
	request.setAttribute("result",resultobj);
	//5.저장한 결과를 jsp 에게 전달
	//forward 방식
	//뷰지정하기
	RequestDispatcher dis = request.getRequestDispatcher("/simpleview.jsp");
	//이데이터를 request에 전달해야함
	//특정 페이지에 원하는 정보를 전달
	//forward
	dis.forward(request,response);
	//request 객체를 response에 전달?
	
	
	}
	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("클라이언트 요청 POST");
	}

}

 

 

 

greeting.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>VIEW</h3>
	EL&JSTL
	<hr>
	EL : ${requestScope.msg}<br>
	<!-- 같은 내용 위아래 -->
	<%= request.getAttribute("msg") %>
</body>
</html>

 

 

 

FrontServletController.java

package com.kosa;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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(description = "사이트 전체 구조 입니다", urlPatterns = { "/action.do" })
public class FrontServletController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public FrontServletController() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("GET 방식 요청");
		//http://localhos:8090/WebServlet_1/action.do?cmd.greeting
		//1. 한글처리
		request.setCharacterEncoding("utf-8");
		//2. 데이터 받기
		String cmd = request.getParameter("cmd");
		//3. 판단하기(요청) ...로직처리(DB연결, 암호화)
		String msg="";
		if(cmd.equals("greeting")) {
			Message m = new Message();
			msg = m.getMessage(cmd);
		}
		//4. 데이터 저장
		request.setAttribute("msg",msg);
		//5. view 지정하기
		RequestDispatcher dis = request.getRequestDispatcher("/greeting.jsp");
		//6. view 데이터 전달하기(forward)
		dis.forward(request, response);
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("POST 방식 요청");
	}

}

Message.java

package com.kosa;

public class Message {
	public String getMessage(String str) {
		return str+"model2 base MVC";
	}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>WebServlet_1</display-name>
  <welcome-file-list>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>simpleController</servlet-name>
  	<servlet-class>com.SimpleController</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>simpleController</servlet-name>
  	<url-pattern>/simple</url-pattern>
  </servlet-mapping>
  <!-- 
  	http://localhost:8090/WebServlet_1/simple 요청을 서버에 보내면
  	실행이란 -> doget, do post를 불러다가 실행해줌 
   -->
</web-app>

 

 

 

requestScope

https://windorsky.tistory.com/entry/requestScope-%EC%82%AC%EC%9A%A9

 

requestScope 사용

request 객체와 동일한 기능을 하는 requestScope를 사용해 보겠습니다. 우선 이 전에 사용하였던 memberForm.jsp의 action 속성을 forward.jsp로 수정하고 회원 정보를 입력한 후 forward.jsp로 전송합니다. 회원

windorsky.tistory.com

requestScope -> request객체에 저장된 데이터를 가져올수 있음