-
만들기 전에 기초적인 내용들JSP, Servlet 2021. 12. 12. 22:31
Server Application 조각 -> Server Application Let
GET : list/reg/edit/del -> list/reg/edit/del 조각 전달 후 종료
톰캣은 WAS, Web Server라고도 할 수 있음
Servlet 프로그램 만들기
service()public class Main extneds HttpServlet { public void service(HttpServletRequest request, HttpservletResponse response) throws IOException, ServletException { System.out.println("hello Servlet"); } }
: HttpServletRequest 입력도구, HttpservletResponse 출력도구
<servlet-mapping>
<servlet-name>na</servlet-name>
<servlet-class>패키지명.Nana</servlet-class>
</servlet-mapping>
<servlet-mapping>
<servlet-name>na</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
: Nana라는 클래스를 hello라는 이름으로 매핑하는 코드
http://localhost/hello
response를 이용한 출력방법public class Main extneds HttpServlet { public void service(HttpServletRequest request, HttpservletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); out.println("Hello Servlet"); } }
홈 디렉토리는 webapp
Annotation을 이용한 URL 매핑
@WebServlet("/매핑명")
한 줄 내려쓰려면 <br> 태그 사용
브라우저에 컨텐츠 형식을 알려주지 않은 경우 자의적으로 해석함
-> 어떠한 형식의 문서인지 밝혀줘야 함
한글이 깨지지 않도록 인코딩 방식 지정response.setCharacterEncoding("utf-8"); (사용자가 보내는 방식)
response.setContentType("text/html; charset="utf-8"); (받은 걸 해석하는 방식)
기본적인 요청은 GET 요청
httpL//localhost/hello?cnt=3
: (?cnt=3)쿼리스트링으로 요청할 수 있음
public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
int cnt = Integer.parseInt(request.getParameter("cnt")); //문자열이라서 int형으로 변환
for(int i=0; i<cnt; i++) {
out.println("안녕 Servlet<br />");
}
}
사용자가 쿼리스트링으로 값을 전달해주지 않았을 경우에 기본 값 사용하는 방법
http://.../hello?cnt=3 -> "3"
http://.../hello?cnt= -> ""
http://.../hello? -> null
http://.../hello -> null
public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
String cnt_ = request.getParameter("cnt");
int cnt = 100;
if(cnt_ != null && !cnt_.qeuals("")) {
cnt = Integer.parseInt(cnt_);
}
for(int i=0; i<cnt; i++) {
out.println("안녕 Servlet<br />");
}
}
html 파일에서 바디 태그 안에
<a href="hi">인사하기</a><br>
<a href="hi?cnt=3">인사하기</a><br>
이렇게 값을 전달해줄 수도 있음
사용자 입력을 통한 GET 요청
반복 횟수를 사용자로부터 입력받으려면 입력폼을 준비해야 함
버튼을 클릭하면 GET 요청으로 전달
<body>
<div>
<form action="hi"> //사용자 입력을 처리하기 위한 폼태그에 서블릿 매핑 이름 hi
//http://.../hi
<div>
<label>"안녕하세요"를 몇 번 듣고 싶으세요?</label>
</div>
<div>
<input type="text" name="cnt"/> //입력태그
//?cnt=3
<input type="submit" value="출력"/> //요청 전달 submit
</div>
</form>
</div>
</body>
입력할 내용이 많은 경우는 POST 요청
- html
<body>
<div>
<form action="notive-reg" method="post"> //옵션을 지정하지 않으면 쿼리 값이 전달됨
<div>
<label>제목: </label><input name="title" type="text">
</div>
<div>
<label>내용: </label>
<textarea name="content"></textarea> //여러 줄 쓸 수 있는
</div>
<div>
<input type="submit" value="등록"/>
</div>
</form>
</div>
</body>
- class
@WebServlet("/notice-reg")
public class NotiveReg extends HttpServlet{
public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
request.setCharacterEncoding("utf-8"); //입력 값 인코딩 방식을 utf-8로 설정
PrintWriter out = response.getWriter();
String title = request.getParameter("title"); //요청에서 title 값 가져오기
String content = request.getParameter("content"); //요청에서 content 값 가져오기
out.println(title);
out.println(content);
}
}
Servlet filter
- class
@WebServlet("/notice-reg")
public class NotiveReg extends HttpServlet{
public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
String title = request.getParameter("title");
String content = request.getParameter("content");
out.println(title);
out.println(content);
}
}
- 새로운 패키지에 class 만들면서 interfaces에서 servlet Filter 추가
public class CharacterEncodingFilter implemets Filter {
@Override
public void doFilter(HttpServletRequest request, HttpservletResponse response, FilterChain chain) throw ServletException, IOException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response); //다음 실행을 관할하기 위한 것
}
}
- web.xml에서 필터 설정 혹은 어노테이션으로 설정
필터 설정
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>필터 패키지명.클래스명</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
어노테이션
servlet filter에 @WebFilter("/*") 추가하기'JSP, Servlet' 카테고리의 다른 글
Session 객체로 상태 값 저장하기 (0) 2021.12.12 Application 객체 (0) 2021.12.12 입력 데이터 배열로 보내기 (0) 2021.12.12 계산할 값 x, y를 입력하고 덧셈/뺄셈을 누르면 그에 맞는 결과값 출력 (0) 2021.12.12 계산할 값 x, y를 입력하면 결과값 출력 (0) 2021.12.12