티스토리 뷰

교안파일

3강_GET_POST.pdf
0.38MB
4강_내장객체.pdf
0.26MB

Servlet Mapping이란 특정 servlet을 요청할 때, 전체 경로를 url에 써주면, 너무 복잡하고 보안에도 취약하기 때문에, 간단하게 경로를 표현해주는 것이다.

#servlet 매핑 방법은 두 가지가 있다.
1. xml 이용

-xml 파일이란 ?  (aws 싸이트 내용 참고)

Extensible Markup Language(XML)를 사용하면 공유 가능한 방식으로 데이터를 정의하고 저장할 수 있습니다. XML은 웹 사이트, 데이터베이스 및 타사 애플리케이션과 같은 컴퓨터 시스템 간의 정보 교환을 지원합니다. 사전 정의된 규칙을 사용하면 수신자가 이러한 규칙을 사용하여 데이터를 효율적으로 정확하게 읽을 수 있으므로 모든 네트워크에서 데이터를 XML 파일로 손쉽게 전송할 수 있습니다.

 먼저 xml 파일 생성.

 

선생님 설명에 의하면 , 프로젝트 내에 파일들의 데이터 특성을 하나의 파일안에 정리해 놓은것. 이라고 함.

xml 파일생성

 

xml 파일이 생성됨
xml 파일 내부 모습

  <!-- TestServlet2를 appServlet으로 선언 -->
  <servlet>
     <servlet-name>appServlet</servlet-name>
     <servlet-class>com.example.servlet.TestServlet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
     <servlet-name>appServlet</servlet-name>
     <url-pattern>/melon</url-pattern>
  </servlet-mapping>

★이것만 기억해두라고 하셨음.

com.example.servlet.TestServlet2 (패키지명.클래스이름) 을 

appServlet 로 네이밍 한다.

appServlet로 네이밍된 클래스(파일) 을 

/melon 이라는 키워드로 맵핑(연결)한다.

그럼

주소창에서 주소의 전체내용 대신에 /melon 이라고 써주면 맵핑(연결)된 appServlet

즉 com.example.servlet.TestServlet2 파일이 실행됨.★

 

com.example.servlet.TestServlet2 파일의 내부 내용.

->  주소창에 http://localhost:8181/JSPBasic/melon 를 입력하면

    "헬로"가 출력됨. 

package com.example.servlet;

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;

//web.xml에 맵핑설정
public class TestServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("헬로");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

}


2. annotaion 이용

@WebServlet("/banana") //요청에 대하여 어노테이션으로 연결(고유해야한다) -> 이부분을 주의해서 기억해두자.

package com.example.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;

@WebServlet("/banana") //요청에 대하여 어노테이션으로 연결(고유)
public class TestServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//System.out.println("헬로");
		resp.setContentType("text/html; charset=UTF-8");
		PrintWriter out = resp.getWriter();
		out.println("헬로");//컨텐츠타입
	}

	@Override
	protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}
	
	//특정클래스 오버라이드
	
	
	

}

 

<Request>

#get 방식

주소에 데이터가 묻어서 전달이 됨.

예) http://localhost:8181/JSPBasic/request/req_get02.jsp?id=aa123asdsad&pw=asdsad&agree=1

 

 

1. 클라이언트에서 데이터를 입력받아서 전달 Request 객체에 전달

	<!--  action에는 지정된페이지의 경로 -->
	<!-- post방식은 form태그가 필요하고 method="post"을 적습니다 -->
	<form action="req_get02.jsp"> <%--form은 보낼 데이터를 담는 태그 --%>
		아이디:<input type="text" name="id" value="aa123"><br>
		비밀번호:<input type="password" name="pw"><br>
		
		동의항목
		<input type="checkbox" name="agree" value="1">동의1
		<input type="checkbox" name="agree" value="2">동의2
		<input type="checkbox" name="agree" value='3'>동의3
		
		<input type="submit" value="확인">
	</form>

2. 받은 데이터를 출력.

<%@page import="java.util.Arrays"%>
<%@page import="java.lang.reflect.Array"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%     
	//리퀘스트객체에서 관련정보 얻기
	StringBuffer url = request.getRequestURL();//전체주소
	String uri = request.getRequestURI();//전체주소 - ip주소,포트값
	String path = request.getContextPath();//프로젝트 식별이름
	String remoteAddr = request.getRemoteAddr();//ip주소

	//단일값
  	String id = request.getParameter("id"); 
  	String pw = request.getParameter("pw");
  	//다중값
  	String[] agrees = request.getParameterValues("agree");
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	url: <%=url %><br>
	uri: <%=uri %><br>
	컨패스: <%=path %><br>
	접속한주소: <%= remoteAddr %><br>
	
	
	아이디:<%=id %><br>
	pw:<%=pw %><br>
	동의항목:<%=Arrays.toString(agrees) %>
	
	
	
</body>
</html>

* 주소 자체에 데이터를 넣어서 전달하는 방법.

1. 주소에 데이터를 담아서 전달!

<!-- 
	get방식은 반드시 폼태그가 필요한 것은 아니며,
	주소를 통해서 강제로 파라미터값을 전달 할 수 있습니다.
	
	?변수명=값
	여러 값이라면 &조건으로 연결
	 -->
	 
	 <a href="req_get04.jsp?name=홍길동&age=20">get방식 queryString이용하기</a> 
     <!--주소에 데이터를 담을 때  띄어쓰기 넣어서 쓰면 안됨. 공백도 문자열로 취급하기 때문-->

2. 주소에 딸려서 넘어온 데이터를 출력.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//a태그로 넘어오는 값 출력
	String name = request.getParameter("name");
	String age = request.getParameter("age");
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	주소에 강제로 넘겨준값:<%=name %><br>
	주소에 강제로 넘겨준값:<%=age %>
	

</body>
</html>

 

#POST 방식

1. 데이터를 입력받아서 전달한다.

post 방식은 form 태그안에 method = "post" 를 써줘야함을 잘 기억해두자.

<form action="req_post02.jsp" method="post">

<body>

	<form action="req_post02.jsp" method="post">
	
		아이디:<input type="text" name="id"><br>
		이메일:<input type="email" name="email"><br>
		<input type="submit" value="확인"><br>
	</form>

</body>

2. 전달 받은 데이터 출력.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	
	request.setCharacterEncoding("utf-8"); //post한글처리

	String id = request.getParameter("id");
	String email = request.getParameter("email");

%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	id=<%=id %><br>
	email=<%=email %>
</body>
</html>

 

<기억할 내용>
-자바단 : 자바로 작성한 내용.

-jsp태그는 화면에 안 나온다.

-내가 쓰려는 속성이 기억 안나면 공백상태에서 ctrl + spacebar 눌러보기.

 -태그 타입을 식별하는 키워드는 name. 
 name=""은 변수명이다. 값은 value="" 에 담는다.
 -> ex) <input type="checkbox" name="agree" value="1">

댓글