유정잉

40~41일차 JSP [ 개념, Tomcat 연결 ] 본문

네이버 클라우드 부트캠프/복습 정리

40~41일차 JSP [ 개념, Tomcat 연결 ]

유정♡ 2024. 4. 17. 11:10

[ 웹 프로그래밍이란 ]
  - 인터넷 쇼핑  -> 브라우저에 주소 입력  -> 브라우저에 요청함 ​
  - 요청을 받아 웹 페이지 찾아 주는 것 : 웹 서버​
  - 요청된 페이지를 받아보는 브라우저 : 클라이언트
  - Html은 정적인 페이지기 때문에 시시각각 변경되는 새로운 정보를 제공해주지 못한다.
  - 하지만 인터넷은 바로바로 새로운 내용을 제공해주어야 하기 때문에 html만으로는 웹 프로그래밍하는데 한계가 있다.        => 그래서 동적인 페이지가 등장함했다
   - 동적인 페이지에서 새로운 정보를 제공해주기 위해서는 방대한 정보를 관리할 데이터베이스가 필요 하다 !!
      Ex) 게시판 -> 디비에 저장되었다가 보여주는 것.
      다양한 정보를 데이터베이스에서 얻거나 저장하기 위해 등장한 언어=> php, asp, 서블릿/jsp

 

[ 서버 ]
   1) 사용자의 요청이 들어오면 이에 대한 처리를 한 결과 페이지를 전송하는 웹 서버(Web Server)​
   2) 실질적으로 요청한 페이지의 로직이나 데이터베이스와의 연동을 처리할 수 있는

        비즈니스 로직이 구현되어야 하는 웹 애플리케이션 서버 (Web Application Server : WAS) 로 이루어져 있다. ​
        대표적인 WAS는 Tomcat, Jeus, WebLogic…​등이 있다. (대부분 Tomcat 사용)

        Tomcat은 웹 서버 기능이 내장되어 있어 별도로 웹 서버 설치안해도 WAS역할을 한다.​

 

[ Servlet ]

  - Servlet: Server + Applet 의 합성어​
  - 서버에서 실행되는 Applet으로 자바를 이용하여 웹에서 실행되는 프로그램을 작성

      (자바 클래스 형태의 웹 애플리케이션)​
  - 서블릿은 JVM에서 동작해야 하므로 클래스 파일이 생성되어야 한다 -> 클래스 형태로 작성

  - HttpServlet 클래스(Tomcat에서 제공) 때문에 웹 애플리케이션을 제작할 수 있다.​

       (HttpServlet 클래스를 상속받아 구현해야함)

  - HttpServlet 클래스는 톰캣을 설치하면 제공되는 클래스 . 웹 애플리케이션으로 동작하는 기본동작

  - 서블릿 컨테이너는 jsp를 서블릿으로 변환한 후에 동작시킨다.

 

[ 쿼리 스트링(query String) ]

  - 쿼리 스트링(query String) : 서버는 사용자가 입력한 값을 쿼리스트링으로 읽어온다

      ex) Aservlet?id=hong&age=20   /  이름=값 & 이름=값

  - 페이지가 이동되면 이전 페이지의 값들 잃게 된다 => 페이지 사이의 정보교환 필요하기 때문에 -> 쿼리 스트링

 

[ JSP (Java Server Page ]

  - 자바로 서버 페이지를 작성하기 위한 언어

  - html과 jsp 태그로 구성되어 화면을 작성하는데 유리

  - 웹 서버에서 실행되는 페이지로 요청에 필요한 페이지를 위한 로직, 데이터베이스와의 연동을 위해 필요한 것들을 포함함.

 

[ 클래스와 파일 이름 ]

보통 class 이름은 맨 첫번째 글짜를 대문자로 주고 File 이름은 맨 첫번째 글짜를 소문자로 준다

 

[ 스크립트 요소 ]

    - JSP 프로그래밍에서 사용되는 문법의 표현 형태

   - 스크립트 : jsp에서 자바코드를 사용할때 필요한 주석문 

   - 서블릿을 이용 안 하고 jsp에서 클라이언트 서버에 넘기는 작업 

   - 원래 서블릿 컨테이너는 jsp를 서블릿으로 변환한 후에 동작시킨다.

   - 선언문에서 선언된 메소드는 jsp 펭지가 서블릿 코드로 변환이 되면 서블릿 클래스의 멤버변수로 변환 된다.

   - 스크립트 요소 : 4가지 

      - 선언문(Declaration)  <%!    %> : 함수선언 가능.

          선언문에서 선언된 메소드는 JSP페이지 내에서는 일반적인 형태의 메소드로 선언됨. <%!에서 선언한 변수는 전역 변수의 의미

      - 스크립트릿 (Scriptlet) <%   %> : jsp 페이지가 서블릿으로 변환되고 요청될 때.

          선언문과 달리 지역 변수로 선언이 되고 메소드 선언은 할 수 없다.

          <% 에서 선언하는 변수는 service method에서만 사용하는 local변수로 인식.

      - 표현식 (Expression) <%=변수 혹은 메소드%>  , <% out.print() %> :

           1)변수를 출력하거나 메소드의 결과값을 브라우저에 출력할 수 있음.

           2)스크립트릿과 달리 코드내에서 out이라는 내장객체를 통해 브라우저에 출력 가능.

           ( Servlet에서 출력하는 방법은 한개 밖에 없음 PrintWriter를 이용해서 하는 것 그치만 jsp에서는 출력방법이 두개가 있음)

      - 주석 (Comment) <%-- --%>

 

[ JSP에서 다른 페이지로 이동하기 위한 방법 ]

    1) 리다이렉트 response.sendRedirect : 브라우저 URL 변경 하도록 -> (request, response 객체 유지 안 됨)

    2) 포워드 forward : 서버상에서 페이지가 이동되기 때문에 브라우저는 알아채지 못 하고 URL도 변경되지 않는다

          -> (request, response 객체 유지 됨)

          ex) 고객센터 전화하번 그 번호를 유지하면서 1번 ~~ 2번 ~~ 선택하는 것과 같은 원리 

 

 


eclipse에서  java클래스는 src/main/java 에서 구현해 줘야 함 !!! 
.getParameter는 무조건 name=""값으로 가져와야 함 !!!
.txt, .jsp, .js, .html .. 등 은 webapp에 파일 생성
.java (Servlet) class는 src/main/java에 클래스 생성
doPost 에서 한글이 깨지는 경우 !! request.setCharacterEncoding("UTF-8"); 코드 사용 !!
.jsp에서 자바 코드를 짤 경우 항상 <% 스크립트 %> 안에서 짜야 함 !!

 

 

[ 이클립스에 톰캣 연결하기 ]

 

1) eclipse에서 인코딩 작업 

 

 

2) 연결 Web Browser 선택 (편한걸로, internal은 선택 X)

 

3) Tomcat Project 만들기 

 

 

4) Server 실행 방법

 

 


[ 인텔리제이에서 톰캣 연결하기 ]

 

1) Empty Project로 만들기 !!!

 

2) webapps/WEB-INF 로 디렉토리 파일 만들기

     webapps안에 index.jsp /  WEB-INF안에 web.xml 만들기 

[ WEB-INF안에 web.xml ]

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

 

[ webapps안에 index.jsp ]

<html>
<body>
<h2>Hello World! - TEST</h2>
</body>
</html>

 

3) Run Configurations에 Tomcat 연결

 

Catalina base는 따로 설정 안 해도 됨.

Deployment directory는 현재 프로젝트 파일로 설정 webapps까지만 

Context path는 현재 프로젝트 파일명 그대로 적기 슬래시 하고 (/A0417)

( ? ) Server Port와 Admin port의 Port번호는 다른 프로젝트서버와 겹치면 안 됨, 번호는 자유롭게 주면 됨 겹치지만 않게 !!!

 

4) 한글 인코딩 방법 

 

인텔리제이에서 위에 방법을 해도 한글이 인코딩이 안 되면 항상 맨위에 아래 코드 적어주기 !!

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

 

 


[ Servlet class File 만들기 ]

   New -> Others -> Web -> Servlet

[ Add.java Servlet class ]

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("/Add")
public class Add extends HttpServlet{
    private static final long serialVersionUID = 1L;

    public Add() {
        super();
    }

    protected void doGet (HttpServletRequest request , HttpServletResponse response) throws ServletException,IOException {
        //클라이언트가 서버에 요청하는 코드
        int n1=20;
        int n2=10;
        int sum=n1+n2;
        PrintWriter out=response.getWriter();
        out.println("<html><head><title>Add</title></head></html>");
        out.println("<body>");
        out.println(n1+"+"+n2+"="+sum);
        out.println("</body>");
        out.println("</html>");
    }
}
[ HiServlet.java Servlet class ]

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;

/**
 * Servlet implementation class HiServlet
 */
@WebServlet("/HiServlet")
public class HiServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HiServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//클라이언트에게 응답할 페이지 세팅
		response.setContentType("text/html; charset=UTF-8");
		//이 콘텐트타입은 html 문법으로 작성된 text
		//인코딩은 UTF-8로 지
		PrintWriter out=response.getWriter();
		out.println("<h1>Hello Servlet</h1>");
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

 


[ JSP File 만들기 ]

    form(=JSP)에서 server로 전송하는 방법 ! (get과 post) 

    java클래스는 src/main/java 에서 구현해 줘야 함 !!!

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;

/**
 * Servlet implementation class HiServlet
 */
@WebServlet("/HiServlet")
public class HiServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HiServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//클라이언트에게 응답할 페이지 세팅
		response.setContentType("text/html; charset=UTF-8");
		//이 콘텐트 타입은 html 문법으로 작성된 text
		//인코딩은 UTF-8로 지정 
		PrintWriter out=response.getWriter();
		out.println("<h1>안녕 서블릿</h1>");
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

 

 

 

1) webapp 파일-> New -> Others -> Web -> JSP File -> Next -> File Name 설정 후 생성

 

2) 이클립스에서 .jsp 파일 만들 때 기본 생성(default) 되는 PAGE지시자속성종류는 3개 (language, contentType, pageEncoding)

 

3) form(=JSP)에서 server로 전송하는 방법 ! (get과 post) 

[ method.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>
	<!-- form안에는 method와 action 존재 -->
	<!-- get방식으로 MethodServlet(서버쪽)에 전송하겠다 -->
	<form method="get" action="MethodServlet">
	
		<!-- 버튼 누르면 서버에 method="get"방식으로 전송됨(서버는 action="MethodServlet"에 전송됨) -->
		<input type="submit" value="get방식으로 호출"> 
	
	</form><br>
	
	<!-- post방식으로 MethodServlet(서버쪽)에 전송하겠다 -->
	<form method="post" action="MethodServlet">
	
		<!-- 버튼 누르면 서버에 method="post"방식으로 전송됨(서버는 action="MethodServlet"에 전송됨) -->
		<input type="submit" value="post방식으로 호출"> 
	
	</form>
</body>
</html>
[ MethodServlet.java 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;

/**
 * Servlet implementation class MethodServlet
 */
@WebServlet("/MethodServlet")
public class MethodServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MethodServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out=response.getWriter();
		out.print("<h1>get방식으로 처리되었다</h1>");
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out=response.getWriter();
		out.print("<h1>post방식으로 처리되었다</h1>");
		out.close();
	}

}

 

 


[ query String(쿼리 스트링) 구조 ]

   http://localhost:8080/A0412/ParamServlet?id=&age= : input에 아무것도 입력하지 않고 전송버튼을 눌렀을 때 

   http://localhost:8080/A0412/ParamServlet?id=yujung&age=26 : input에 값을 입력하고 전송버튼을 눌렀을 때

[ param.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
	<!-- 버튼을 클릭하면 ParamServlet이 get방식으로 요청된다 -->
	<form method="get" action="ParamServlet">
		id : <input type="text" name="id"><br>
		age : <input type="text" name="age"><br>
		<input type="submit" value="전송">
	</form>
</body>
</html>
[ ParamServlet.java Servlet 클래스 ]

import 

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;

/**
 * Servlet implementation class ParamServlet
 */
@WebServlet("/ParamServlet")
public class ParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ParamServlet() {
        super();
    
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		
		//param.jsp에서 넘긴 값을 가져온다 (request객체로 가져옴)
	    String id=request.getParameter("id");
	    int age=Integer.parseInt(request.getParameter("age")); //getParameter의 반환형은 String이므로 형변환 해줘야 함
	    
	    PrintWriter out=response.getWriter();
	    out.println("id: ");
	    out.println(id);
	    out.println("age: ");
	    out.println(age);
	    
	   out.println("<a href='javascript:history.go(-1)'>다시<a>"); //다시를 클릭하면 다시 이전페이지(=history.go(-1) =param.jsp)로 돌아감 
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

}


}

param.jsp에서 만든 폼에 inpout에 값을 입력하면 paramServelet 서버에 전송버튼으로 넘어감 / 다시 버튼을 누르면 이전페이지(=param.jsp)로 돌아감

 


[ method="post" 방식 ]

[ NewFile.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<body>
	<!-- 이름 주소를 받아와 InfoServlet에서 출력해라  -->
	<form method="post" action="InfoServlet">
		이름: <input type="text" name="name"><br>
		주소: <input type="text" name="adr"><br>
		<input type="submit" value="전송">
	</form>

</body>
</html>
[ InfoServlet.java 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;

/**
 * Servlet implementation class InfoServlet
 */
@WebServlet("/InfoServlet")
public class InfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public InfoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		request.setCharacterEncoding("UTF-8"); //한글 깨지면 이 코드 추가하면 됨
		
		//NewFile.jsp에서 넘긴 값을 가져온다 (request객체로 가져옴)
		String name=request.getParameter("name");
		String adr=request.getParameter("adr");
		
		PrintWriter out=response.getWriter();
		out.println("이름: ");
		out.println(name+"<br>");
		out.println("주소: ");
		out.println(adr+"<br>");

	}

}

 

doPost 방식에서 한글 깨지면 코드 추가 => request.setCharacterEncoding("UTF-8");

 


[ method="get" 방식 ]

[ radio.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<body>
<form method="get" action="RadioServlet">
		<label for="gender">성별: </label>
		<input type="radio" id="gender" name="gender" value="남자" checked>남자 
		<input type="radio" id="gender" name="gender" value="여">여자<br><br>
		
		<label for="ch_mail">메일 수신 여부: </label>
		<input type="radio" id="ch_mail" name="ch_mail" value="yes" checked>수신 O
		<input type="radio" id="ch_mail" name="ch_mail" value="no">수신 X<br><br>
		
		<label for="con">인사</label>
		<textarea rows="3" cols="30" id="con" name="con"></textarea><br>
		
		<input type="submit" value="전송">
</form>
</body>
</html>
[ RadioServlet.java 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;

/**
 * Servlet implementation class RadioServlet
 */
@WebServlet("/RadioServlet")
public class RadioServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RadioServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		//getParameter는 무조건 name값으로 가져와야
		
		//입력한 값을 정보 가져온다 
		String gender=request.getParameter("gender");
		String m=request.getParameter("ch_mail");
		String con=request.getParameter("con");
		
		//가져와서 출력한다 
		PrintWriter out=response.getWriter();
		out.print(gender+" "+m+" "+con);
		
		out.print("<a href='javascript:history.go(-1)'>이전페이지</a>");
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 


[ 여러개의 값을 가져올때 배열로 가져오는 방법 / method="get" 방식 ]

[ cafe.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<body>
   <form action="Cafe" method="get">
      <input type="checkbox" name="item" value="아아">아아
      <input type="checkbox" name="item" value="라떼">라떼
      <input type="checkbox" name="item" value="스무디">스무디
      <input type="checkbox" name="item" value="그린티">그린티
      <input type="submit" value="전송">
      </form>
</body>
</html>
[ Cafe.java 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;

/**
 * Servlet implementation class Cafe
 */
@WebServlet("/Cafe")
public class Cafe extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Cafe() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
	    PrintWriter out=response.getWriter();
	    
	    //여러개의 값을 가져올 때 작업 배열[]
	    String str[]=request.getParameterValues("item");
	                         //반환형이 String 배열 
	    if(str==null) {
	    	out.print("선택하지 않았다");
	    }
	    else {
	    	for(String s:str) {
	    		out.print(s+" ");
	    	}
	    }
	    out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

[  method="get" 방식 ]

[ cal.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<body>
	<form action="CalServlet">
		n1: <input type="text" name="n1">
		n2: <input type="text" name="n2">
		<input type="submit" value="체크">
	</form>
	<!--클라이언트가 전송한 값을 CalServlet에서 출력해주세요 -->
</body>
</html>
[ CalServlet.java Servlet 클래스 ]

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Servlet implementation class CalServlet
 */
public class CalServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CalServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		
		String n1=request.getParameter("n1");
		String n2=request.getParameter("n2");
		
		PrintWriter out = response.getWriter();
		out.print(n1+" "+n2);
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}


[  method="get" 방식 ]

[ member2.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<body>

<center>
    <h2> 회원 가입 </h2>
    <form action="Member2" method="get">
    
    <table width="500" border="1">
    <tr height="50">
        <td width="150" align="center"> 아이디 </td>
        <td width="350" align="center"><input type="text" name="id" size="40" placeholder="id넣으세요"></td>
    </tr>
    
    <tr height="50">
        <td width="150" align="center"> 패스워드 </td>
        <td width="350" align="center"><input type="password" name="pass1" size="40" placeholder="비밀번호는 영문자만 넣어주세요"></td>
    </tr>

    <tr height="50">
        <td align="center" colspan="2">
        <input type="submit" value="회원가입"></td>
    </tr> 

</table>

</form>

</center>

</body>

</html>
[ Member2.java Servlet 클래스 ]

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Servlet implementation class Member2
 */
public class Member2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Member2() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/plain;charset=UTF-8");
		request.setCharacterEncoding("UTF-8"); //한글 깨지면 이 코드 추가하면 됨
		
		
		String id = request.getParameter("id");
		String pw = request.getParameter("pass1");
		
		PrintWriter out = response.getWriter();
		out.println("id: "+id);
		out.println("pw: "+pw);
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

[  method="get" 방식 ]

[ select.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>
	<form method="get" action="Select">
		<span style="float:left; margin-right:10px">
		
		<label for="job">직업</label>
		<select id="job" name="job" size='3' multiple="multiple">
			<option value="">선택</option>
			<option value="학생">학생</option>
			<option value="개발자">개발자</option>
			<option value="언론인">언론인</option>
		</select>
		</span>
		
		<label for="hobby" style="float:left">취미</label>
		<select id="hobby" name="hobby" size='1'>
			<option value="">선택</option>
			<option value="필라테스">필라테스</option>
			<option value="테니스">테니스</option>
			<option value="골프">골프</option>
		</select>
		<br><br>
		<input type="submit" value="전송"style="float:right; margin-right:50px">
	</form>
</body>
</html>
[ Select.java Servlet 클래스 ] 

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Servlet implementation class Select
 */
public class Select extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Select() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/plain;charset=UTF-8");
		request.setCharacterEncoding("UTF-8"); //한글 깨지면 이 코드 추가하면 됨
		
		String hobby = request.getParameter("hobby"); //클라이언트가 선택한 취미의 value값을 꺼내옴 
		String job[] = request.getParameterValues("job"); //클라이언트가 선택한 직업의 value값(복수)을 꺼내옴 
					//배열로 받아올 경우 getParameterValues로 받아와야 함 !!
		
		PrintWriter out=response.getWriter();
		out.print(hobby);
		
		if(job==null) {
			out.print("선택안함");
		}
		else {
			for(String str:job) {
				System.out.println(str);
			}
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

}


[ 스크립트 ]

선언문(Declaration)  <%!         %>  /  스크립트릿 (Scriptlet) <%       %> 

표현식 (Expression) <%= %>, <% out.print() %>  /  주석 (Comment) <%-- --%>   

   - 스크립트 : jsp에서 자바코드를 사용할때 필요한 주석문 

   - 서블릿을 이용 안 하고 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>
<!-- 스크립트 : jsp에서 자바코드를 사용할때 필요한 주석문 --> 
<!-- 서블릿을 이용 안 하고 jsp에서 클라이언트 서버에 넘기는 작업 -->

<!-- 스크립트릿, 표현식 -->
<%
	int n1=20;
	int n2=10;
	int sum=n1+n2;
%>
	
<%=n1 %> + <%=n2 %> = <%=sum %>

<!--  선언문 -->
<%!
	String str="hi";
	int a=5, b=-5;

	public int abs(int n) {
		if(n<0) {
			n=-n;
		}
		return n;
	}
%>

<!--표현식 : 첫번째 표현식 jsp에서 out을 활용하여 출력할때 -->
<%
	out.print(str + "<br>");
	out.print(abs(b) + "<br>");
	out.print(abs(a) + "<br>");
%>
<!--표현식 : 두번째 표현식 jsp에서 <%= %>을 활용하여 출력할때 -->
<%= str %><br>
<%=abs(b) %><br>
<%=abs(a) %><br>

</body>
</html>
</html>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ page import="java.util.Calendar" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	Calendar cal=Calendar.getInstance();
	SimpleDateFormat today=new SimpleDateFormat("yyyy-MM-dd");
	SimpleDateFormat now=new SimpleDateFormat("hh-mm-ss");
	%>

	<%=today.format(cal.getTime()) %><br>
	<%=now.format(cal.getTime()) %><br>

</body>
</html>

[ 스크립트 - error 처리 방법 ]

[ 실행시킬 jsp 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="error.jsp" %>

<body>
	<%-- 으로 못나눔 => error.jsp로 넘어감 --%>
	<%=4/0 %>
</body>
</html>



[ error.jsp 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%-- 현재 page가 error page라는 뜻 --%>
    <%@ page isErrorPage="true" %>

<body>
	<%=exception.getMessage() %>
</body>
</html>

[ 스크립트 -  if문 <%%> 중첩 (?) ]

    - 자바언어는 항상 스크립트 열어서 써야한다는 예를 보여주는 코드

<%@ 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>
<%
	int i, sum=0;	
	for(i=0;i<=10;i++){
		if(i<10){
%>
	<%=i + " + " %>
<%
		}
		else{
			out.print(i + " = ");
		}
		sum+=i;
	}
%>
	<%=sum %>
</body>
</html>

[ 스크립트 -  for 반복문 구구단 출력 ]

<%@ 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>
<%
    // 구구단 출력
    int i,j;
    for(i=1;i<=9;i++) {
        for(j=1;j<=9;j++) { 
            out.print(i + "*" + j + "=" + j * i + "<br>");
        }
        out.print("<br>");
    }
%>
</body>
</html>

 

[ 스크립트 -  for 반복문 border table과 함께 사용하기 ]

<%@ 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>
<%
	String str[]={"aa","bb","cc","dd"};
%>

<table border="1" width="200">
	<%
		for(int i=0;i<str.length;i++) {
	%>
		<tr><td><%=i %></td>
			<td><%=str[i] %></td>
		</tr>
	<%
		}
	%>
</table>

</body>
</html>

 

[ 스크립트 -  big 함수 짜기 ]

<%@ 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>
<!-- 30과 40을 비교해 두 수중 큰 값을 출력(big) -->
<%!
	int a = 30, b = 40;
	public int big(int a, int b) {
		return (a > b) ? a : b;
	}
%>
<%="큰 수: " + big(a,b) %>

</body>
</html>

[ 스크립트 - 1~10까지 합을 표현식으로 출력 하기 ] 

<%@ 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>
<!-- 1~10까지 합을 표현식으로 출력 -->
<%! int sum=0;
   public int sum() {
      for(int i=1;i<11;i++){
         sum+=i;
      }
      return sum;
   }
%>
<%="1~10까지 합: " + sum() %>
</body>
</html>

[ 스크립트 - 회원가입 창 ]  

<%@ 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>
 <form action="join.jsp">

  <table width="500" border="1">
  
   <tr height="50">
    <td width="150" align="center">아이디</td>
    <td width="350" align="center">
     <input type="text" name="id" size="50" placeholder="id 넣어라">
    </td>
   </tr>

   <tr height="50">
    <td width="150" align="center">패스워드</td>
    <td width="350" align="center">
     <input type="password" name="pass1" size="50" placeholder="pw 넣어라">
	</td>
   </tr>

   <tr height="50">
    <td width="150" align="center">패스워드 확인</td>
    <td width="350" align="center">
     <input type="password" name="pass2" size="50">
    </td>
   </tr>

   <tr height="50">
    <td width="150" align="center">이메일</td>
    <td width="350" align="center">
     <input type="email" name="email" size="50">
    </td>
   </tr>

   <tr height="50">
    <td width="150" align="center">전화번호</td>
    <td width="350" align="center">
     <input type="tel" name="tel" size="50">
    </td>
   </tr>

   <tr height="50">
    <td width="150" align="center">취미</td>
    <td width="350" align="center">
     <input type="checkbox" name="hobby" value="독서">독서 
     <input type="checkbox" name="hobby" value="음악">음악 
     <input type="checkbox" name="hobby" value="캠핑">캠핑 
     <input type="checkbox" name="hobby" value="여행">여행 
    </td>
   </tr>

   <tr height="50">
    <td width="150" align="center">좋아하는 영화</td>
    <td width="350" align="center">
     <select name="movie">
    	 <option value="클래식">클래스</option>
    	 <option value="배트맨">배트맨</option>
   	 	 <option value="앤트맨">앤트맨</option>
   		 <option value="대부">대부</option>
     </select>
    </td>
   </tr>

   <tr height="50">
    <td width="150" align="center">연령대</td>
    <td width="350" align="center">
    <input type="radio" name="age" value="20">20대 
    <input type="radio" name="age" value="30">30대 
    <input type="radio" name="age" value="40">40대 
    <input type="radio" name="age" value="50">50대 
    </td>
   </tr>

   <tr height="50">
    <td width="150" align="center">남기고 싶은말</td>
    <td width="350" align="center">
     <textarea rows="5" cols="30" name="info"></textarea>
    </td>
   </tr>

   <tr height="50">
    <td width="150" colspan="2">
     <input type="submit" value="회원가입">
     <input type="reset" value="취소">
    </td>
   </tr>
   
 </table>

</form>

</body>

</html>
[ join.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>
<%
	//데이터가 넘어올 때 한글이 깨질 수 있기에
	request.setCharacterEncoding("UTF-8");

	//사용자로부터 넘어온 데이터를 가져오기
    String id = request.getParameter("id");
    String pass1 = request.getParameter("pass1");
    String pass2 = request.getParameter("pass2");
    String email = request.getParameter("email");
    String tel = request.getParameter("tel");
    String[] hobbies = request.getParameterValues("hobby");
    String movie = request.getParameter("movie");
    String age = request.getParameter("age");
    String info = request.getParameter("info");
    
   	if(!pass1.equals(pass2)) {	
%>
	<script type="text/javascript">
		alert('비번이 틀렸습니다');
		history.go(-1);
	</script>
<%
   	}
%>
	<%=id %>
	
<%
    for (String hobby : hobbies) {
        out.print("hobby : " + hobby);
    }
%>
	
</body>
</html>

 

[ 스크립트 - 좋아하는 색 출력 ]  

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<body>
	<form action="color.jsp" method="post">
	<table border="1">
		<tr>
			<td>이름</td>
			<td width="300">
			<input type="text" name="name">
			</td>
		</tr>
		
		<tr>
			<td>성별</td>
			<td width="300">
			<input type="radio" name="gender" value="남자">
			남
			<input type="radio" name="gender" value="여자">
			여
			</td>
		</tr>
		
		<tr>
			<td>좋아하는색</td>
			<td width="300">
			<input type="checkbox" name="color" value="1">
			red
			<input type="checkbox" name="color" value="2">
			blue
			<input type="checkbox" name="color" value="3">
			black
			<input type="checkbox" name="color" value="4">
			orange
			</td>
		</tr>
		
	<tr>
		<td colspan="2" width="300">
		<input type="submit" value="전송">
		<input type="reset" value="취소">
		</td>
	</tr>
</table>

</form>

</body>
</html>
[ color.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>
<%
	request.setCharacterEncoding("UTF-8");

	String name = request.getParameter("name");
	String gender = request.getParameter("gender");
	String[] color = request.getParameterValues("color");

	out.print("이름: " + name + "<br>");
	out.print("성별: " + gender + "<br>");
	out.print("좋아하는 색: ");
	
	for(String c : color) {
		switch(c){
			case "1" : out.print("red ");
			break;
			case "2" : out.print("blue ");
			break;
			case "3" : out.print("black ");
			break;
			case "4" : out.print("orange ");
			break;
		}
	}
%>
</body>
</html>

 


[ 전역변수 & 지역변수 방식 ]

[ 전역변수 & 지역변수 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<%!
	int global_int=0;
	int add(int a, int b){
		return a+b;
	}
%>
<!DOCTYPE html>
<html>
<head>

</head>
<body>
<!-- 전역변수 지역변수 -->
<%
	int local_int=0;
	out.print(++local_int+"<br>");
	
	out.print(++global_int);
%>
</body>
</html>

 


[ 내부객체 : 바닥글 footer <%@ include file="로컬URL" %> 로 설정 ]

        : <%@ include file="로컬URL" %>

[ main.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>
	<h1>메인페이지</h1>
	<a href="sub.jsp">서브페이지로 이동</a>
	
	<!-- 보통 사이트 구성이 다 달라도 바닥글은 모든페이지가 동일한 구성임 ! 그떄마다 내용을 넣어주는게 아니라 include 사용 -->
	<%@ include file="footer.jsp" %> 
	
</body>
</html>




[ sub.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>
	<h1>서브페이지</h1>
	<a href="main.jsp">메인페이지로 이동</a>
	
	<!-- 보통 사이트 구성이 다 달라도 바닥글은 모든페이지가 동일한 구성임 ! 그떄마다 내용을 넣어주는게 아니라 include 사용 -->
	<%@ include file="footer.jsp" %> 
</body>
</html>




[ footer.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<div id="di">

사업자등록번호 : 534-81-00064| Businees registration number : 534-81-00064

주소 : 서울특별시 성북구 안암로 17 (안암동4가) 수리빌딩 5F (일상의친구 본사 사옥)| Adress : Anam-ro 17, 5F Seongbuk-gu Seoul (Head office)
반품지주소 : 서울시 동대문구 천호대로4 동대문우체국(809) 그레이시크 (반품주소지) 우편번호 : 02586
고객센터 : 1566-3722|평일:오전10시~오후5시(점심:오후12시~오후1시)
팩스 : 02-766-8682| 이메일 : hp86@naver.com

통신판매업신고 : 제2015-서울성북-00383| 서비스 가입사실 확인| 개인정보보호책임자 : 김범준
</div>


[ 내장 객체 ]

[ 내장 객체 ]

<%@ 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>
	<%=request.getContextPath()%> <br>
	<%=request.getMethod() %> <br>
	<%=request.getRequestURL() %> <br>
	<%=request.getRequestURI() %> <br>
	<%=request.getServerName() %> <br>
	<%=request.getProtocol() %> <br>
</body>
</html>

 

[ 내장 객체 sendRedirect : 강제이동 (지정한 사이트로 강제 이동) ]

<%@ 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>
	<%
		response.sendRedirect("http://www.naver.com");
	%>
    
    <%  //쿼리스트링 주소 값 
		response.sendRedirect("main.jsp?age="+20);
								// 파라미터이름 파라미터값 
	%>
</body>
</html>

 


[ Login.jsp 만들기 ]

    1) 첫번째 방법 

<%@ 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>
	<form method="post" action="Login.jsp">
		<label for="userid">아이디: </label>
		<input type="text" name="id" id="userid"><br>
		
		<label for="userpw">암 &nbsp; 호 : </label>
		<input type="password" name="pwd" id="userpw"><br>
		
		<input type="submit" value="로그인"> 
	</form>
</body>
</html>



[ Login.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 정보</title>
</head>
<body>
    <%-- 아이디와 암호 출력 --%>
    <%
        // POST 방식으로 전달된 아이디와 암호 가져오기
        String id = request.getParameter("id");
        String pwd = request.getParameter("pwd");
    %>
    
    <h2>로그인 정보</h2>
    <p>아이디: <%= id %></p>
    <p>암호: <%= pwd %></p>
</body>
</html>

   

 

2) 두번째 방법 : 쿼리스트링으로 값 받는 방법 

[ NewFile.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>
	<form method="post" action="Login.jsp">
		<label for="userid">아이디: </label>
		<input type="text" name="id" id="userid"><br>
		
		<label for="userpw">암 &nbsp; 호 : </label>
		<input type="password" name="pwd" id="userpw"><br>
		
		<input type="submit" value="로그인"> 
	</form>
</body>
</html>



[ Login.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 정보</title>
</head>
<body>
<%
	String id="gildong";
	String pw="1234";
	String name="홍길동";
	
	request.setCharacterEncoding("UTF-8");
	
	if(id.equals(request.getParameter("id")) && pw.equals(request.getParameter("pwd"))) {
		response.sendRedirect("main2.jsp?name=" + URLEncoder.encode(name,"UTF-8"));	
		//페이지 강제이동 (nmae값을 가지고 main2.jsp로 이동함)
	}
	else{
		response.sendRedirect("NewFile.jsp");
		//페이지 강제이동
	}
%>
</body>
</html>



[ main2.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>
<%=request.getParameter("name") %> 님 환영합니다. 
</body>
</html>

 


 

[ 배경색 바꾸기 !! ]

[ NewFile.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>
	<form method="post" action="color.jsp">
		<input type="radio" name="color" value="blue">파랑<br>
		<input type="radio" name="color" value="yellow">노랑<br>
		<input type="radio" name="color" value="red">빨강<br>
		<input type="radio" name="color" value="orange">주황<br>
		<input type="submit" value="확인버튼">
	</form>
</body>
</html>



[ color.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>색상 선택</title>
</head>
<body>
<%
    String color = request.getParameter("color");
    
%>

<%-- 사용자가 선택한 색상에 따라 배경색이 변경됩니다. --%>
<p style="background-color:<%=color %>"> 길동은 <%= color %>색을 좋아한다.</p>

</body>
</html>


[ JSP에서 다른 페이지로 이동하기 위한 방법 ]

     - reqeust, session, application, pageContext 내부객체는 임의 속성값을 저장하고 읽을 수 있는 메소드를 제공

[ age.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</titlae>
</head>
<body>
	<form method="post" action="age2.jsp">
		<input type="text" name="age">
		<input type="submit" value="관람가능">
	</form>
</body>
</html>



[ age2.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>
<%
	int age=Integer.parseInt(request.getParameter("age"));

	if(age<15){
%>
	<script type="text/javascript">
		alert("관람 불가능");
		history.go(-1);
	</script>
<%
	}
	else{
		request.setAttribute("name", "유정"); //유정이라는 이름을 name에 담아서 request객체에 저장
		RequestDispatcher dispatcher=
									request.getRequestDispatcher("result.jsp");
		dispatcher.forward(request, response);
	}
%>

</body>
</html>



[ result.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>
<%
	String age=request.getParameter("age");
	String name=(String)request.getAttribute("name");
%>	
	나이 : <%=age %><br>
	이름 : <%=name %>
</body>
</html>


[ 내부객체 만들기 ]

     - request 내부객체는 브라우저에서 JSP 페이지로 전달되는 데이터의 묶음으로 HTTP 헤더와 HTTP 바디로 구성

<%@ 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>
<%
	pageContext.setAttribute("name","성진");
	request.setAttribute("name","승빈");
	session.setAttribute("name","예준");
	application.setAttribute("name","가영");
	
	out.print(pageContext.getAttribute("name")+"<br>");
	out.print(request.getAttribute("name")+"<br>");
	out.print(session.getAttribute("name")+"<br>");
	out.print(application.getAttribute("name")+"<br>");
	
	//성진, 승빈, 예준, 가영 출력 됨 
    
    request.getRequestDispatcher("two.jsp").forward(request, response); //forward : request, response 객체 유지되면서 two.jsp로 이동
%>
</body>
</html>
[two.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>
	<%=pageContext.getAttribute("name") %><br>
	<%=request.getAttribute("name") %><br>
	<%=session.getAttribute("name") %><br>
	<%=application.getAttribute("name") %><br>
	
	<a href="three.jsp">페이지 이동</a>
</body>
</html>

[ getAttribute를 활용한 jsp 로그인페이지 만들기 ]

[ NewFile.jsp 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>		
<%
	String errmsg=(String)request.getAttribute("errmsg");
	if(errmsg!=null){
%>
	<h1><%=errmsg %></h1>
<%
	}
%>

	<form action="fru.jsp" method="post">
	아이디 : <input type="text" name="id">
	비번 : <input type="text" name="pw">
	<input type="submit" value="Login">
	</form>
</body>
</html>



[ fru.jsp jsp 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	request.setCharacterEncoding("UTF-8");
	String id=request.getParameter("id");
	String pw=request.getParameter("pw");
	
	String correctID="java";
	String correctPW="1234";
	
	if(id==null || id=="" || pw==null || pw=="") {
		request.setAttribute("errmsg", "아이디나 비밀번호가 비어있으면 안 돼요");
		RequestDispatcher rd=request.getRequestDispatcher("NewFile.jsp");
		rd.forward(request, response);
		return;
	}
	else if(!id.equals(correctID) || !pw.equals(correctPW)) {
		request.setAttribute("errmsg", "아이디나 비밀번호가 틀립니다");
		RequestDispatcher rd=request.getRequestDispatcher("NewFile.jsp");
		rd.forward(request, response);
		return;
	}
	else {
		request.setAttribute("id", id);
		RequestDispatcher rd=request.getRequestDispatcher("suc.jsp");
		rd.forward(request, response);
	}
%>
</body>
</html>



[ suc.jsp 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>
	<%
		String id=(String)request.getAttribute("id");
	%>
	<h1><%=id %>님 환영합니다!</h1>
</body>
</html>

 


[ 문제 풀이 ]

 

[ Q. 자바의 선언문에서 선언한 변수와 스트립스팃에서 선언한 변수의 차이를 설명해라. ]

    - 자바의 선언문 : JSP 페이지가 서블릿 코드로 변환이 되면 서블릿 클래스의 멤버변수로 변환됨
    - 스크립트릿의 선언문 : 선언문과 달리 선언된 변수는 지역 변수로 선언됨

 

[ Q. while문을 이용하여 1~10까지 합을 출력해라 <% %> ]

<%@ 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>		
<% 
int i=1;
int sum=0;
while(true){
	sum+=i;
	i++;
	if(i==11){
		break;
	}
}

out.print(sum+"<br>");
%>

<% 
        int i2 = 1;
        int sum2 = 0;
        while (i2 <= 10) {
            sum2 += i2;
            i2++;
        }
        out.println("1부터 10까지의 합: " + sum2);
%>
</body>
</html>

 

[ Q. if.jsp 이름 좋아하는색에대한폼구조(option) if1.jsp 좋아하는색 value값이랑 비교해서 출력 ]

[ if.jsp ]

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<form action="if2.jsp">
    <input type="text" name="name" placeholder="이름입력"><br>
    <select name="favorit color" size="3"><br>
        <option value="red">빨강</option>
        <option value="blue">파랑</option>
        <option value="green">초록</option>
    </select>
    <input type="submit" value="confirm">
</form>
</body>
</html>



[ if2.jsp ]

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<%
    String name = request.getParameter("name");
    String color = request.getParameter("favorit color");

    String message = "";
    if (color != null) {
        if (color.equals("red")) {
            message = "빨간색";
        } else if (color.equals("blue")) {
            message = "파란색";
        } else if (color.equals("green")) {
            message = "초록색";
        }
    }
    out.println("<p>" + name + "은 " + message + "을 좋아한다</p>");
%>

</body>
</html>

 

[ Q. 숫자부분에 문자 들어가면 경고 출력, num2.jsp 생성해서 1부터 내가 입력한 숫자 까지 총합 출력 ]

<%@ 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>		
<!-- onsubmit : form 태그 안에서 form 전송을 하기 전에 입력된 데이터의 유효성 체크하기 위한 이벤트 -->
<form action="num2.jsp" name="aa" onsubmit="return on()">
	숫자 : <input name="num">
	<input type="submit" value="입력완료">
</form>
	<script type="text/javascript">
	//숫자 부분에 문자 들어가면 안 됨 --> "숫자만 들어가야함"
        function on() {
            var inputField = document.forms["aa"]["num"].value;

            if(isNaN(inputField)) {
                alert("숫자만 들어가야함");
                return false;
            }

            return true;
        }	
	//num2.jsp 생성해서 1~내가 입력한 수까지 총합 
	</script>
</body>
</html>



[ num2.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>
<%
	int num=Integer.parseInt(request.getParameter("num"));

	int i;
	int sum=0;
	
	for(i=1;i<=num;i++) {
		sum+=i;	
	}
%>

    <p>입력한 숫자: <%= num %></p>
    <p><%= num %>까지의 총합: <%= sum %></p>
    
</body>
</html>

 


[ JavaScript File 만들기 ]

1) New -> Others -> JavaScript -> 확장자.js 

 

2) 외부 javascript파일 불러오는 코드 

<head>

<script type="text/javascript" src="pa.js"></script>

</head>

[ param.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<head>
	//javascript인 pa.js파일과 연결을 위한 코드
	<script type="text/javascript" src="pa.js"></script> 
</head>
<body>
	<!-- 버튼을 클릭하면 ParamServlet이 get방식으로 요청된다 -->
	<form method="get" action="ParamServlet" name="fo">
		id : <input type="text" name="id"><br>
		age : <input type="text" name="age"><br>
        
        <!-- 전송 버튼 클릭 시 check() 함수 실행 -->
		<input type="submit" value="전송" onclick="return check()">
	</form>
</body>
</html>
[ pa.js 파일 ]

//id칸이 비어있으면 "아이디를 입력해주세요" + 나이칸이 비어있으면 "나이를 입력해주세요"
//나이를 문자로 입력하면 "숫자로 입력해주세요"
	
function check() {
	if(document.fo.id.value=="") {
		alert("아이디를 입력해주세요");
		return false;
	}
	else if(document.fo.age.value=="") {
		alert("나이를 입력해주세요");
		return false;
	}
	else if(isNaN(document.fo.age.value)) {
		alert('숫자로 입력해주세요');
		return false;
	}
	else {
		return true;
	}
}

 


[ 문제 - 회원가입 창 만들기 ]

[ member.jsp 파일 ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title>NCS 테스트</title>
<style>
    label {
    display: inline-block;
    width: 160px;
    text-align: left;
    }

    .yn {
        width: auto;
    }

    .star {
        font-size: large;
        text-align: right;
        font-weight: bold;
        color: red;
    }

    #btns {
        text-align: center;
    }
</style>
</head>

<body>
<form action="Member" method="POST" name="f" onsubmit="return validate()">
<div class="block">
    <label for="name">이름 </label><span class="star">*</span> <input type="text" name="name" id="name" required><br>
</div>
<div class="block">
    <label for="regnum">주민등록번호 </label><span class="star">*</span> <input type="number" name="regnum" id="regnum" required> - <input type="number" name="regnum2" required><br>
</div>
<div class="block">
    <label for="id">아이디 </label><span class="star">*</span> <input type="text" name="id" id="id" required><br>
</div>
<div class="block">
    <label for="pwd">비밀번호 </label><span class="star">*</span> <input type="password" name="pwd" id="pwd" required><br>
</div>
<div class="block">
    <label for="pwdconfirm">비밀번호 확인 </label><span class="star">*</span> <input type="password" name="pwdconfirm" id="pwdconfirm"><br>
</div>
<div class="block">
    <label for="email">이메일</label> &nbsp; <input type="text" name="email" id="email"> @ <input type="text" name="email2" id="email2" value="gmail.com"> 
    <select id="emailselect">
        <option value="gmail.com" selected>gmail.com</option>
        <option value="nate.com">nate.com</option>
        <option value="yahoo.com">yahoo.com</option>
    </select>
    <br>
</div>
<div class="block">
    <label for="mailnum">우편번호</label> &nbsp; <input type="text" name="mailnum" id="mailnum"><br>
</div>
<div class="block">
    <label for="addr1">주소</label> &nbsp; <input type="text" name="addr1" id="add1"> <input type="text" name="addr2"><br>
</div>
<div class="block">
    <label for="tel">핸드폰 번호</label> &nbsp; <input type="text" name="tel" id="tel"><br>
</div>
<div class="block">
    <label for="job">직업</label> &nbsp; <select name="job" size="3" id="job">
            <option value="student">학생</option>
            <option value="comp">컴퓨터/인터넷</option>
            <option value="news">언론</option>
    </select><br>
</div>

    <label>메일/SMS 정보 수신</label> &nbsp; <input type="radio" name="allowMail" id="yes" value="yes" checked><label for="yes" class="yn">수신</label> 
    <input type="radio" name="allowMail" id="no" value="no"><label for="no" class="yn">수신거부</label><br>


    <div id="btns"><input type="submit" value="회원가입"> <input type="reset" value="취소"></div>
</form>

<script>
    const emailselect = document.getElementById("emailselect");

    emailselect.addEventListener('change',(event) => {
        var email2 = document.getElementById("email2");
        email2.value = event.target.value;
    });

    function isEmpty(str) {
        return (!str || str.length === 0);
    }

    function validate() {
        // Checking required

        var required = [];

        required[0] = document.f.name.value;
        required[1] = document.f.regnum.value;
        required[2] = document.f.id.value;
        required[3] = document.f.pwd.value;
        required[4] = document.f.pwdconfirm.value;
        required[5] = document.f.regnum2.value;
        
        for (var i = 0; i < required.length; i++) {
            if (isEmpty(required[i])) {
                alert("값이 비어있습니다.");
                return false;
            }
        }

        // pw check
        if (!(required[3] === required[4])) {
            alert("비밀번호가 같지 않습니다.");
            return false;
        }

        // id check
        if (required[2].length < 4) {
            alert("아이디는 4글자 이상이어야 합니다.");
            return false;
        }

        // 우편번호 check
        var mailnum = document.f.mailnum.value;
        if (!mailnum.includes("-")) {
            alert("우편번호에는 - 가 들어가야합니다.");
            return false;
        }
        return true;

    }
</script>

</body>

</html>
[ Member.java 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;

/**
 * Servlet implementation class Member
 */
@WebServlet("/Member")
public class Member extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Member() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/plain;charset=UTF-8");
		request.setCharacterEncoding("UTF-8"); //한글 깨지면 이 코드 추가하면 됨
		
		String name = request.getParameter("name");
		String regnum = request.getParameter("regnum");
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String pwdconfirm = request.getParameter("pwdconfirm");
		String email = request.getParameter("email");
		String email2 = request.getParameter("email2");
		String mailnum = request.getParameter("mailnum");
		String addr1 = request.getParameter("addr1");
		String tel = request.getParameter("tel");
		String job = request.getParameter("job");
		String allowMail = request.getParameter("allowMail");

		PrintWriter writer = response.getWriter();

		writer.println("name = " + name);
		writer.println("req = " + regnum);
		writer.println("id = " + id);
		writer.println("pwd = " + pwd);
		writer.println("pwdconfirm = " + pwdconfirm);
		writer.println("email = " + email);
		writer.println("email2 = " + email2);
		writer.println("mailnum = " + mailnum);
		writer.println("addr1 = " + addr1);
		writer.println("tel = " + tel);
		writer.println("job = " + job);
		writer.println("allowMail = " + allowMail);
		
	}

}

 

728x90