Servlet, JSP(Java Server Page) 예제

Jobmania·2023년 3월 2일
0

MVC - JSP, Servlet

목록 보기
2/5
post-thumbnail

JSP

파라미터 입력을 통한 화면구성

parameter.jsp

queryString 으로 입력하면 값이 주입 된다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%
  String user = request.getParameter("user");
  String id = request.getParameter("id");

  out.println("유저 이름 파라미터 값 : "+user + "<br>");
  out.println("유저 아이디 파라미터값 : "+id);

%>

</body>
</html>


외부파일을 통한 화면구성

정적인 파일 및 동적인 파일을 include를 통해 가져와서 화면 구성 가능.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title> 파일 가져 오기 </title>
</head>
<body>
<!-- 정적 include : 미리 컴파일해둠 , 어쩌다 한번 바꾸는 파일 -->
<%@ include file="copyright.txt" %>
<br>
<br>
<%--동적 include : 페이지를 요청할때마다 새로고침 , 자주 수정하는 파일 --%>
<jsp:include page="update.txt" />
<h1> 구구단!</h1>
<jsp:include page="gugudan.jsp" />

</body>
</html>

gugudan.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2> 구구단    </h2>
<%
  for (int i = 2; i <= 9; i++) {
    for (int j = 1; j <= 9; j++) {
      out.println( i + " *"+ j +" = " + i*j + " ");
    }%>
<br>
<%    } %>




</body>
</html>


Redirect,Forward 통해 화면 이동

Redirect, Forward 모두 화면 이동이지만, 이전 Request, Response를 보존하느냐 아니냐에 따라 나뉜다. (Forward는 들고가고 Redirect는 새로운 요청)

Redirect

Forward

이후에 나올 개념!

JSP에서 자바 객체 생성 및 관리

시나리오 :

  1. form2.jsp를 통해 입력하고 버튼을 누르면 입력받은 값을 Forward를 통해 formHandler.jsp로 요청
  2. forHandler.jsp의 request를 해당 자바 객체에 set property!
  3. 이를 화면에 get메소드를 통한 출력

form2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>


<!-- action 주소는 domain 주소 포트번호 뒤부터 입력 -->
<form action="formHandler.jsp" method="get">

    <%--   placeholder 속성은 입력 필드에 사용자가 적절한 값을 입력할 수 있도록 도와주는 짧은 도움말을 명시--%>
    <input type="text" name="user" placeholder="user"><br>
    <input type="text" name="email" placeholder="email"><br>
    <input type="password" name="password" placeholder="password"><br>
    <input type="submit" value="전송">
</form>
</body>
</html>

formHandler.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:useBean id="user" class="beans.User"></jsp:useBean> <<  id=name 동일해야함
<jsp:setProperty name="user" property="*"></jsp:setProperty> << id = name은 동일해야함


    <p> 유저 : <%= user.getUser()%></p>
    <p> 이메일 : <%= user.getEmail()%></p>
    <p> 비밀번호 : <%= user.getPassword()%></p>


</body>
</html>

실행결과

Servlet + JSP 활용

시나리오

회원가입 시 이메일에 대한 정규식 및 비밀번호 조건(4자 이상)에 맞다면 WELCOME.JSP 아니라면 ERROR MESSAGE 출력 후 회원가입화면으로

1. form1.jsp

버튼을 누르면 /Controller post 요청 및 url 이동

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%-- 폼 태그 안에 입력창에 데이터 입력후 submit버튼 클릭시 폼태그의 서버주소로 http 메소드 방식으로 전송됨--%>
<%--에러메시지 --%>

<%--<%= request.getAttribute("errorMessage") %>--%>
<div style="background-color: crimson">${errorMessage}</div>

<form action="/Controller" method="post">
    이메일 : <input type="email" name="email"> <br>
    패스워드 : <input type="password" name="password"> <br>
    <input type="submit" value="전송">


</form>

</body>
</html>

2. Controller.java

여기서 Forward를 통해 화면이동을 하여도 동일한 request를 주게끔 한다.

@WebServlet("/Controller")
public class Controller extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String email = req.getParameter("email");
        String password = req.getParameter("password");
        User2 user2 = new User2(email, password);

        if(user2.validate()){
            // 합격페이지(jsp)로
            req.setAttribute("email",email);
            req.getRequestDispatcher("welcome.jsp").forward(req,resp);
        }else {
            // 다시 입력 (jsp)로 이동, 에러메세지를 리퀘스트 객체에 넣어 전달..
            req.setAttribute("errorMessage",user2.getMessage());
            req.getRequestDispatcher("form1.jsp").forward(req,resp);
        }

    }
}

User2 내의 검증 로직

 /**
     * 이메일과 패스워드 형식에 대한 검사!
     */


    public boolean validate() {
        if (email.isEmpty()) {
            this.message = " 이메일을 입력하세요 ";
            return false;
        }else if (password.isEmpty()) {
            this.message = "비번을 입력하지 않음";
            return false;
        }else if (!email.matches("\\w+@\\w+.\\w+")) {
            this.message = "이메일 형식이 맞지 않음";
            return false;
        }else if (password.length() < 4) {
            this.message = "패스워드는 4자 이상";
            return false;
        } else if (password.matches("\\w*\\s+\\w*")) {
            message = "패스워드에 스페이스가 포함되면 안됩니다.";
            return false;
        }

        return true;
    }

3. 실행 결과 (성공 / 실패 )

성공

성공시 ${email} 이 welcome.jsp에서 출력.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1> 반갑습니다. <%= request.getAttribute("email")%> 님 로그인 완료 </h1>
<h1> 동일한 내용입니다 . ${email} 님 로그인 완료</h1>

</body>
</html>

실패

실패시 ${errorMessage} 내용이 form1.jsp에서 출력하여 다시 회원가입 하도록 구성

profile
HelloWorld에서 RealWorld로

0개의 댓글