JSP/이론

sendRedirect//radio사용//checkbox(getParameterValues) //selectoption //textarea(getParameter().replace())

SEOKIHOUSE 2023. 6. 7. 12:13
  • sendRedirect: 리다이렉트는 웹 서버가 웹 브라우저에게 다른 페이지로 이동하라고 응답하는 기능

package servlet0607;

import java.io.IOException;
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("/pagemove")
public class pagemove extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet 실행..");
		response.sendRedirect("0607p2.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>p1페이지</h1>
	<a href="pagemove">p2페이지로 가기</a>
</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>
	<h1>p2페이지</h1>
</body>
</html>

 


  • 문제1)

id: admin 

pw:1234

-->로그인 성공 시 로그인 성공한 0607loginsucess.jsp파일이 열리도록 

-->실패 시 실패한 0607loginfail.jsp파일이 열리도록 하기

package servlet0607;

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		
		if(id.equals("admin") && pw.equals("1234")) {
			System.out.println("로그인 성공");
			response.sendRedirect("0607loginsucess.jsp");
		}else {
			System.out.println("로그인 실패");
			response.sendRedirect("0607loginfail.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>
	<hr>
	<form action="login" method="get">
		<input type="text" name="id" placeholder="input id">
		<input type="text" name ="pw" placeholder="input pw">
		<input type="submit" value="로그인하기">
	</form>
</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>
	<h1>로그인 성공한 후 이용가능한 페이지</h1>
</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>
	<h1>로그인 실패 후 뜨는 페이지</h1>
</body>
</html>

  • 문제2) radio사용

남자면 0607manpage.jsp로 이동

여자면 0607womanpage.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>
	<hr>
	<form action="radio" method="get">
		<input type="radio" name="gender" value="man" checked>man
		<input type="radio" name="gender" value="woman">woman
		<input type="submit" value="전송">
	</form>
</body>
</html>

3)checkbox사용

값이 여러개 ==>  배열을 써야한다

getParameter를 쓰지말고

  • getParameterValues를 쓰자

근데 배열이니깐? string을 배열로 만들어줘야겠찌? 

-->>String [] hobbies =request.getParameterValues("hobies");


  • 아무것도 체크안하고 전송 시 NullPointerException이 뜬다 이 처리를 해주자

String [] hobbies = null;이 되어있다

 why??>>배열이 아직 메모리에 할당되지 않았기 때문에 배열에 접근하려고 할 때 오류가 발생하는 것


  • 1번방법(Me)

 

해결완료!

  • 2번방법(강사님)

이렇게 해도 된다

<%@ 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>checkbox 파라미터 보내기</h1>
	<hr>
	<form action="checkbox" method="get">
		취미: <input type="checkbox" name="hobbies" value="reading">독서
		<input type="checkbox" name="hobbies" value="watchingmovie">영화보기
		<input type="checkbox" name="hobbies" value="chatting">채팅
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

package servlet0607;

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String[] hobbies = request.getParameterValues("hobbies");

		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();

		//1번방법
		if (hobbies == null) {
			pw.print("취미가 없으시군요");
		} else {
			for (int i = 0; i < hobbies.length; i++) {
				pw.print(hobbies[i] + "<br>");
			}
		}
		//2번방법
//		if (hobbies == null) {
//			pw.print("취미가 없으시군요");
//			return;
//		}
//
//		for (int i = 0; i < hobbies.length; i++) {
//			pw.print(hobbies[i] + "<br>");
//		}

	}

}

4)selectoption 사용

 

  • 1번(Me)


  • 2번(강사님)


근데 사실상 선택하세요 에다가 disabled해주면 되긴한다

<%@ 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>Select Option 파라미터 보내기</h1>
	<hr>
	<form action="selectoption" method="get">
		<select name="job" multiple>
			<option value="">--선택하세요--</option>
			<option value="student">학생</option>
			<option value="teacher">교사</option>
			<option value="coworker">회사원</option>
		</select>
		<input type="submit" value="제출">	
	</form>
</body>
</html>

 

package servlet0607;

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String[] job = request.getParameterValues("job");
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();
		String result = "";

		if (job == null) {
			result = "학생, 교사, 회사원 중에 선택하세요";
			pw.print(result);
			return;
		}

		for (int i = 0; i < job.length; i++) {
			if (job.length > 1) {
				if(job[i].equals("")) {
					pw.print("선택하세요는 포함시키면 안됨");
					return;
				}else {
					if(job.length-1 == i) {
						result += job[i];
					}else {
						result += job[i] + ", ";
					}
				}
			} else {
				if (job[i].equals("student")) {
					result = "학생";
				} else if (job[i].equals("teacher")) {
					result = "선생";
				} else if (job[i].equals("coworker")) {
					result = "회사원";
				} else if (job[i].equals("")) {
					result = "선택하지 않으셨습니다";
				}
			}
		}

		pw.print("당신의 직업은 " + result);
	}

}

5)textarea사용

이 녀석으로 텍스트박스 크기 변경못하게 할 수 있다


 


자 그럼 줄을 띄워보자

엔터했는데 왜 안될까..


 

  • getParameter().replace()이 녀석을 써주자


근데 또 궁금한게 주소창에 이상한게 있다

http://localhost:8090/ex00/textarea?msg=하%0D%0A이%0D%0A고

%0D%0A<< 너 뭔데?

 

 

package servlet0607;

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		String text = request.getParameter("msg");
//		\r\n -- 엔터키 에 해당되는놈이 발견되면 br해라
		String text = request.getParameter("msg").replace("\r\n", "<br>");
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();
		
		pw.print(text);
	}

}
<%@ 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="textarea" method="get">
		<textarea style="resize :none" rows="5" cols="20" name="msg"></textarea>
		<input type="submit" value="전송">
	</form>
</body>
</html>