JSP/이론

servlet + request+ (response) //get vs post방식//request.setCharacterEncoding("utf-8")

SEOKIHOUSE 2023. 6. 5. 15:15

? :구분자로 쓰인다 왼쪽까지 주소다
오른쪽부터 - 클라가 서버로 부터 보내는 데이터  -->쿼리스트림

  • name 속성에 userid썼더니 
    userid=입력한 값

    name속성이 데이터 보낼 때 파라미터 이름이 된다(변수명이 된다)
    id보다 name으로 보낸다


  • request 기본 구조!!
  • 여기서 1번은 doPost방식일 때 적어주면 된다


  • ex1)
    입력한 id는 : 짱구
    입력한 pw는 : 짱구1234

<%@ 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="ParamServlet" method="get">
		id : <input type="text" name="userid" value="" placeholder="input id"><br>
		password : <input type="text" name="password" value="" placeholder="input pw"><br>
		<input type="submit" value="서버에 파라미터 전송하기">
	</form>	

</body>
</html>
package servlets;

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//요청을 처리하기 위해 필요한 준비사항
		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();
		
		//요청처리 - 클라이언트가 서버로 보낸 데이터를 받는 것
		//모두 String타입이다
		//name속성이 userid라 userid적어줌
		String userid = request.getParameter("userid");
		String password = request.getParameter("password");
		
		
		
		//응답
		pw.print("입력한 id는 " + userid + "이고 <br>비밀번호는 " +password);
		
		
		
		
	}


}



이건 왜 null이냐? 위에 예시에서는 userid로 했지 userid2가 없다 -->userid2는 없어서 null이라뜸

 


404:자원이 없을 때(오타확인하자)

405: 요청처리하는 방식이 달라야한다

 


  • https://cocoon1787.tistory.com/526 참고사이트
  • get과 post사용하는 경우를 알아보자 :)
  • get은 주소에다가 데이터를 실어보내고 Post방식는 주소를 이용x
  • 사용자 정보를 실어서 보낼 때 Post방식   ==why? 비번아디 보여지면 안되니깐~
  • 특정 정보를 요청할 떄는 Get -> ex) 1페이지 보여줘


위의 예시를 post로 바꿔보았다

But!!  >>post로 바꾸니까 405오류가 뜬다 why? doGet방식이라 안바꿔서 그럼.. ==>post로 바꾸고 해보자


되긴되는데 왜이러..지? 점심먹고오자



post할 때는 요청 파라미터에 한글이 사용될 경우도 고려해줘야 한다. 인코딩방식 설정해주자

  • request.setCharacterEncoding("utf-8");


  • get과 post방식차이

<%@ 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>Get 방식(한글)</h1>
	<form action="hangul" method="get">
		<input type="text" name="name">
		<input type="text" name="nick">
		<input type="submit" value="전송">
		<!-- http://localhost:8090/ex00/hangul?name= +name.value-->
	</form>
	
	<hr>
	<h1>Post 방식(한글)</h1>
	<form action="hangul" method="post">
		<input type="text" name="name">
		<input type="text" name="nick">
		<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("/hangul")
public class hangul extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		String nick = request.getParameter("nick");
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();
		pw.print(name + nick);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String nick = request.getParameter("nick");
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();
		pw.print(name + nick);
	}

}

오오 한글나온다


  • ex2) 숫자 두개를 입력 받고 get 방식으로 서버에 전달 후 더한 값을 클라이언트 화면에 보여준다