한번 공부했던 내용을 다시 훑으면서 포스팅하니 정말... 손이 많이가고 시간도 많이 소요되네요.. 그래서 그런지

원래 계획했던 설명보다 좀 더 부실하게 설명하게 되네요..하하...


저번 글까지 JavaScript를 이용해서 입력값 검증까지하는 것을 해보았습니다.

이번에는 입력했던 값들을 만들어두었던 index.html에 나올 수 있도록 해보겠습니다. 먼저 하기전에 index.html을 index.jsp로 바꿔 줍시다! 왜냐면 JSP를 사용해야 되거든요!!


tr태그안에 하드코딩된 데이터들을 write.jsp에서 보낸 값으로 표현 할 예정입니다.

JSP에서는 <% %>과 <%= %>태그를 사용합니다.
<% %>는 자바코드를 적을 수 있는 스크립트릿
<%=%>는 값이 들어간 변수를 그대로 출력할 수 있게 합니다. 
두 태그는 JSP페이지가 Web 서버를 통해 Load할 때, 코드가 컴파일되고 실행되야하기 때문에 가장먼저 구동하게 됩니다.
그렇기때문에 어디에 들어가있어도 먼저 실행되므로 큰 문제가 없습니다.


간단하게 확인해보겠습니다.

<head>부분에

int idx =1;
String title = "hh";
String writer ="jmoon";
String regdate ="222222";
int count = 9999;

기존에 하드코딩되어 있던 부분을


<%=idx %>
<%=title%>
<%=writer%>
<%=regdate%>
<%=count%>

으로 바꾸어 실행해보았더니 스크립트릿에 선언한 변수들이 그대로 들어간 것을 확인할 수 있습니다.


자 그럼 이제 Write.jsp에서 입력한 값을 index.jsp에서 써먹어야하는데, 이때 write.jsp에서 선언한 값을 어떻게 가져올것인가?가 문제인데요.
이때 사용하는 것이 HttpServletRequest라는 객체를 쓰면 됩니다.
이 객체를 간단히 설명하면 웹요청인 Http에서 Servlet를 받아 처리하기 위해 사용하는 객체입니다.
위에서 작성한 스크립트릿에서 하드코딩한 값대신 request.getParameter("write.jsp에서 보내준 name")을 넣어봅시다.

먼저 idx와 count값은 받지않기때문에 그대로 두고 나머지를 바꿔봅시다.

String title = request.getParameter("title");
String writer = request.getParameter("writer");
String regdate = request.getParameter("regdate");
String content = request.getParameter("content");

처음에 index.jsp로 실행하게되면 request.getParameter부분이 null로 뜰것입니다. 당연히 들어온 값이 없으므로 null이죠.
글쓰기 버튼을 누르고 작성후 쿼리 전송을 누르면 오른쪽과 같이 입력한 값이 그대로 나오는 것을 확인할 수 있습니다.
혹시 쿼리전송을 눌렀는데 404 NOT found가 떴다면 form action에서 index.html을 index.jsp로 고쳐줬는지 확인합니다.

이제 값도 입력 받았겠다 입력값 유효성 검사를 해야겠죠? 저번 포스팅에 말씀드렸듯이 Javascript는 client side언어로
사용자가 충분히 우회할 수 있습니다. 그렇기 때문에 Server Side에서 한번 더 검사를 해줘야 좀 더 보안성이 있는 게시판이 될 것입니다. 

JAVA에도 정규식이 있습니다. 그럼 javascript와 유사하게 작성하면 되겠죠??

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입니다.");

다만 JSP에서 유효성 검사가 되는지 확인할려면 자바스크립트에 있던 유효성 검사는 잠시 주석처리해주거나 우회해야겠죠?

JSP는 확인을 위해서 out.println을 통하여 유효성이 안맞으면 출력하도록 만들었습니다. 우측에 보시면 이메일 형식이 아닙니다. 라고 뜨는 것을 확인할 수 있죠?

그런데 입력할 때 한글을 넣으면 글자가 깨지는 것을 확인할 수 있습니다. 

스크립트릿 최상단에 아래의 구문을 넣으면 정상적으로 한글도 출력됩니다. 

request.setCharacterEncoding("euc-kr");

그런데 아직도 게시판이라고 하기엔 뭔가 많이 부족해보입니다. 글도 여러개 안되고 하나 작성하면 하나 뜨고..
데이터베이스가 없기때문에 데이터가 누적되지 않아서 그런겁니다. 다음엔 데이터베이스를 이용하여봅니다. 

  1. 2018.03.30 10:33

    비밀댓글입니다

    • 2018.03.30 15:48

      비밀댓글입니다

  2. Favicon of http://steamcommunity.com/id/greenfrog BlogIcon UNG 2019.01.10 10:15

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

    패턴을 사용하려면 선언을 해줘야하지 않나요

+ Recent posts