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 방식으로 서버에 전달 후 더한 값을 클라이언트 화면에 보여준다


