일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Thymeleaf
- rpa
- Database
- Scanner
- string
- jquery
- API
- Eclipse
- 문자열
- Board
- 조건문
- 이클립스
- mysql
- View
- Array
- html
- JDBC
- Uipath
- React
- db
- Java
- SpringBoot
- 자료구조
- spring
- Oracle
- MVC
- 배열
- Controller
- 상속
- jsp
- Today
- Total
유정잉
40~41일차 JSP [ 개념, Tomcat 연결 ] 본문
[ 웹 프로그래밍이란 ]
- 인터넷 쇼핑 -> 브라우저에 주소 입력 -> 브라우저에 요청함
- 요청을 받아 웹 페이지 찾아 주는 것 : 웹 서버
- 요청된 페이지를 받아보는 브라우저 : 클라이언트
- 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 {
}
}
}
[ 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">암 호 : </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">암 호 : </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> <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> <input type="text" name="mailnum" id="mailnum"><br>
</div>
<div class="block">
<label for="addr1">주소</label> <input type="text" name="addr1" id="add1"> <input type="text" name="addr2"><br>
</div>
<div class="block">
<label for="tel">핸드폰 번호</label> <input type="text" name="tel" id="tel"><br>
</div>
<div class="block">
<label for="job">직업</label> <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> <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);
}
}
'네이버 클라우드 부트캠프 > 복습 정리' 카테고리의 다른 글
44일차 JSP [ 커넥션풀, 마이페이지 만들기 ] (5) | 2024.04.23 |
---|---|
43일차 JSP [ forward, cookie ] (0) | 2024.04.22 |
37일차 [ 톰캣 다운로드, Ajax ] (0) | 2024.04.12 |
35~36일차 jQuery [ 복습 ] (0) | 2024.04.11 |
34일차 jQuery [ jQuery ] (0) | 2024.04.08 |