-
JSP/Servlet 기초지식카테고리 없음 2023. 12. 14. 17:13
데이터출력 : JSP를 통해 HTML 문서형식으로 데이터를 출력해서 보여준다.
web.xml에 서버 정보가 들어있어 직접 접근할 수 있으면 안된다.
PrintWriter 객체를 가져와서 out.print(" html 태그 ") 를 써서 html 태그를 사용해서 출력할 수 있다.
뭔가 일반적인 자바 문자열 출력과는 색다른 출력방식 같아서 좀 신기했다.
쿼리스트링
사용자가 입력한 값을 서버로 가져오기 위한 단순한 방법. get 방식으로 요청햇을 때 URL 주소 뒤에
리소스?이름=값 형식으로 데이터가 제공된다.
ex ) ParamServlet?id=nonamed&age=15
ParamServlet이 리소스 이름이고, id와 age가 이름(키) 이고, nonamed와 15가 값이다.
request.getParameter
requets 객체의 getParameter 메서드를 통해 String 형식으로 데이터를 받아올 수 있다.
String 형식이 아닌 데이터의 유효성 검사를 하는 것은 브라우저에서 먼저 유효성 검사를 한 뒤 서버로 데이터를 가져오는 것이 더 효율적이다.
이를 위해 정규표현식, 데이터베이스의 제약조건 등을 사용할 수도 있다.
request.getParameterValues
여러개의 데이터를 문자열 배열로 받아온다.
*response를 먼저 사용한 뒤에 request를 사용할 수는 없다.
만약 그런 코드를 작성하면 응답이 이미 커밋된 후에는 forward할 수 없습니다. 라는 오류가 발생하게 된다.
interface : 클래스를 설계도로 비유하곤 하는데, 인터페이스는 설계도의 설계도라고 생각하면 될 것 같다. 설계도들을 어떤 패턴으로 만들것인가? 를 정의하는 객체이다.
클래스간에 관계를 정의할 때, 사용하는 메서드가 비슷한 경우 처럼 패턴이 비슷한 경우가 있다. 그럼에도 서로다른 클래스를 자료구조에 넣으려면 각자의 클래스타입의 객체를 넣어야 하는 불편함이 생긴다. 이 때 이 클래스들의 부모역할을 하는 추상 클래스 interface를 만들어서 자료구조에 똑같은 타입에 넣어 사용하면 데이터 관리에 유용하다.
BoardController , NoticeController, MemberController 클래스가 똑같이 execute() 메서드를 가지고 있다고 치면
Controller 인터페이스를 만들고, 그안에 execute() 추상메서드 (빈 메서드)를 만들면 된다.
인터페이스(Interface) 예시
package com.webjjang.main.controller;
import javax.servlet.http.HttpServletRequest;
public interface Controller {
//구현을 하지 않음. {}가 없다
public String execute(HttpServletRequest request);
}
부모가 되는 인터페이스 객체의 소스
package com.webjjang.board.controller;
import javax.servlet.http.HttpServletRequest;
import com.webjjang.main.controller.Controller;
public class BoardController implements Controller{
@Override
public String execute(HttpServletRequest request) {
System.out.println("BoardController.execute() -----------");
String jsp = "";
return jsp;
}
}
자식이 되는 클래스의 소스.