본문 바로가기
Lecture/JSP & Java

[본격 게시판짜기 Part1.4 - HTML-> JSP] form 파라미터 받기

by cusmaker 2012. 6. 13.
반응형


2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.1 - 게시판도 HTML부터] 게시글 리스트

2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.2 - 게시판도 HTML부터] 글입력폼

2012/06/13 - [Lecture/Javascript-기초] - [본격 게시판짜기 Part1.3 - Dom 맛보기 ] 글입력폼 검사



안녕하세요 cocy입니다.

저번시간에는 간단한 Javascript 구문을 통한 입력폼값 유효성 검증을 하였는데요,

이번에는 유효성 검증이 끝난 해당 form 데이터를 Post방식으로 JSP페이지에 전송하여 JSP측에서 받아보고,

역시 서버측에서의 유효성 검증과 출력을 해 보도록 하겠습니다.




화면과 같이 여태 작업한 내용들을 JSP로 바꿔주시고, 만약 잘 안된다면 그냥 코드를 메모장에 복사하셧다가,

WebContent안에 JSP파일로 새로 생성하시고 코드를 붙여넣기 해주세요.


그 다음은 write폼에서 보낸 데이터를 게시글 리스트에서 표현해 보도록 하겠습니다.

tr태그 안에 하드코딩된 데이터들을 write.jsp에서 보낸 값으로 받아서 표현 할건데요,

그전에 JSP에서는 <% %><%= %>라는 요상한 태그를 사용합니다.

전자는 JSP 즉, 자바코드를 적어넣을 수 있는 역할을 하는 태그로 스크립트릿이라고 하구요,

후자는 값이 들어간 변수를 그대로 출력하는 역할을 합니다.

두 태그는 JSP페이지가 Web서버를 통해 로드될때, 코드가 컴파일되고, HTML화 되야하기때문에

가장 먼저 실행됩니다.

이말은 html의 어느부분에 위치하더라도 가장먼저 표현되기때문에

코드의 어느부분에서 이 태그가 사용되더라도 HTML문서의 문법에 위배되지 않는 한, 문제가 없다는 말입니다.

자세한 내용은 책이나 검색을 하여 알아보시고, 지금은 사용법만 숙지하도록 하겠습니다.


그럼 일단 테스트를 해보기위해, body 시작태그 전에 스크립트릿(<% %>)을 열고 변수를 선언해 보겠습니다.

코드는 다음과 같습니다.

<%
 
    int idx = 1;
 
    String title = "제목입니다.";
 
    String writer = "작성자이름";
 
    String regdate = "120610";
 
    int count = 10000;
 
%>

그 다음은 이 변수들을 출력하기위해 <%= %>태그를 사용하여

tr태그 안에 하드코딩된 값을 대체해 보도록 하겠습니다.

대체될 코드는 다음과 같습니다.

<tr>
    <td><%=idx %></td>                     
   
    <td><%=title %></td>
   
    <td><%=writer %></td>
   
    <td><%=regdate %></td>
   
    <td><%=count %></td>
   
</tr>

실행해 보시면, 스크립트릿에서 선언한 내용이 출력되는것을 보실 수 있을겁니다.


그렇다면 이번에는 위에서 선언한 변수의 내용을 폼에서 보낸 데이터들로부터 받아서 표시해보도록 하겠습니다.

그러기위해서는 HttpServletRequest 객체를 사용해야 하는데요.

이 객체는 단순히 설명하자면, Http 즉 웹요청을 Servlet에서 받아서 처리하기위해 사용하는 객체입니다.

이쯤 이해해 두시고, 역시 자세한 내용은 검색이나 책을 통해 확실히 인지 하시기 바랍니다.

그럼 위의 스크립트릿에서 하드코딩한 값 대신 request.getParameter("폼에서 넘긴 name")으로 넣어보겠습니다.

코드는 다음과 같습니다.

<%
 
    int idx = 1;
 
    String title = request.getParameter("title");
 
    String writer = request.getParameter("writer");
 
    String regdate = request.getParameter("regdate");
 
    int count = 10000;
 
    String content = request.getParameter("content");
 
%>

form에서 넘긴 데이터는 idx와 조회수를 제외하고 4개였습니다.

getParameter() 함수는 설명안해드려도 name을 통해 파라미터를 가져오는 함수라는것을 직관적으로 아실 수 있을겁니다.

그냥 단순히 리스트를 표시하는 index 페이지(index.jsp)를 실행해보시면

getParameter()를 사용한 값들은 null로 표현될겁니다. 

왜? 당연히 보낸 값이 없으니까요.

글쓰기를 통하여 write.jsp에서 값을 입력한 후 submit을 통해 리스트 페이지(index.jsp)페이지를 다시 조회해보시면

form에서 작성했던 데이터가 출력되는 것을 보실 수 있을겁니다.


그럼 이번엔 JSP에서 받은값을 유효성 검사를 해 볼 건데요.

왜 유효성검사를 두번이나 번거롭게 해야하느냐!

html과 javascript에서 이뤄지는 유효성검사는 결국 클라이언트측에서만 이루어지기때문에 임시방편에 지나지 않습니다.

얼마든지 url을 우회하고, javascript를 무효화시켜, form의 값을 조작해서 잘못된 데이터를 보낼수가 있습니다.

※이에 관해서는 따로 검색이나 책을 참고하여 알아보시는것도 좋겠죠?

유효성 검사를 위해 받은 각각의 값을 javascript와같이 if문을 통해 검사합니다.


마찬가지로 Java에서도 정규식이 존재합니다.


코드는 다음처럼 작성할 수 있겠습니다.

먼저 jsp 최상단에 다음구문을 추가해주세요.

<%@page import="java.util.regex.Pattern"%>

※ 작성 위치 : 스크립트릿안쪽 파라미터를 받은 직후 , 작성 언어 : JSP(Java)

if(title == "" ||title == null) out.println("title이 null입니다.");
 
if(writer == "" ||writer == null)
    out.println("writer가 null입니다.");   
else if(!Pattern.matches("^[_0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[_0-9a-zA-Z-]+)*$", writer))
    out.println("이메일 형식이 아닙니다.");
 
if(regdate == "" ||regdate == null)
    out.println("regdate가 null입니다.");
else if(!Pattern.matches("^[0-9]*$", regdate))
    out.println("숫자형식이 아닙니다.");
 
if(content == "" ||content == null) out.println("content가 null입니다.");

실행해서 제대로 작동하는지 테스트해보시기 바랍니다.

테스트하려면 잠시 스크립트 유효성검사를 풀어줘야겠죠?

예외처리는 지금은 err메세지를 리스트 페이지(index.jsp)에 뿌리도록 하였지만,

보통은 페이지를 따로 만들어서 예외처리하는것이 일반적입니다.

이것은 차차 알아가도록 하겠습니다.



한글이 깨져서 나오는걸 보실 수 있습니다.

이럴경우엔 스크립트릿 최상단에 다음과 같이 한줄을 추가합니다.

request.setCharacterEncoding("euc-kr");

문자 인코딩 방식을 euc-kr로 일치시켜주는 구문입니다.


그런데 이것만으론 뭔가 이상하죠? 일반적인 게시판이라고 하기엔,

새로고침하면 데이터는 날아가고, 글쓰기를 또하면 대체되기만 할 뿐 데이터가 누적되지 않습니다.

이유는 데이터베이스입니다.

데이터베이스에 데이터를 저장해야 데이터가 누적되고, 불러올 수 있지 않겠습니까?

해서 write.jsp에서 보내지는 데이터들을 중간에서 받아서 데이터베이스에 저장해주고,

리스트 페이지(index.jsp)를 불러주는 중간단계가 필요합니다. 다음다음 포스팅에서는 

이 작업을 수행할 페이지를 insert.jsp라고 하고 새로 파일을 만들어 보고,

데이터베이스 접속을 위한 셋팅을 해 보도록 하겠습니다.

그전에 데이터베이스가 만들어져있어야 접속이 가능하겠죠?

다음 포스팅은 데이터베이스에 접속하여

유저를 만들고,

권한을 부여하고,

테이블을 생성해 보도록 하겠습니다.


수고하셨습니다.


다음글 : http://cusmaker.tistory.com/66