JSP 페이지에서 JSTL 관련 에러 (HTTP 500)

Back-End/Problems 2019. 5. 24. 11:55

에러내용


JSP 에서 JSTL을 사용할 때 아래와 같은 에러메시지가 출력될때는


JSP, Servlet, JSTL 버전이 맞지 않기 때문에 파싱과정에서 에러가 나는 것이다.


  HTTP Status 500 – Internal Server Error



  Type Exception Report


  Message /MemberList.jsp (line: [22], column: [1]) According to TLD or attribute directive in tag file, attribute [items] does not accept 

  any expressions


  Description The server encountered an unexpected condition that prevented it from fulfilling the request.



JSP 페이지 상단에 설정한 JSTL 주소를 변경


jstl / core를 jsp / jstl / core로 변경


1
2
3
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%> //이렇게 변경한다.
cs



  JSTL JavaServer Pages Standard Tag Library )

  JSTL은 태그를 통해 JSP 코드를 관리하는 라이브러리로서, JSP의 가독성이 좋아집니다.


  라이브러리이기 때문에 JSTL을 사용하려면, 라이브러리를 다운로드 해서 추가해야 합니다. 

  그리고 JSP 페이지에서 아래의 세 줄을 맨 위에 작성해야 해야 JSTL 문법을 사용할 수 있습니다.


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>



:

Dispatcher 방식과 Redirect 방식

Back-End/JSP 2019. 5. 24. 11:17

Dispatcher 방식과  Redirect 방식


1. Dispatcher방식 -->forward()

forward()[전달하기]는 클라이언트가 요청하면서 전송한 데이터를 그대로 유지한다.


(1) 예제

RequestDispatcher dispatcher = request.getRequestDispatcher("dispatcher.jsp");

      request.setAttribute("request","requestValue");

     dispatcher.forward(request, response);


dispatcher.jsp

request 속성 값 : <%=request.getAttribute("request") %>

포워딩이 되더라도 주소가 변경되지 않는다. (같은 request영역을 공유하게 됨)



출처: https://devbox.tistory.com/entry/Comporison-Dispatcher방식과-Redirect-방식 [장인개발자를 꿈꾸는 :: 기록하는 공간]



2. Redirect 방식 --> sendRedirect()

Redirect()[이동하기]는 새로운 페이지로 완전히 이동해서 기존 데이터를 하나도 사용할 수 없다.


request.setAttribute("request", "requestValue");

response.sendRedirect("redirect.jsp");


 redirect.jsp

 request 속성 값 : <%=request.getAttribute("request") %> // null

포워딩될 때 브라우저의 주소 표시줄의 URL이 변경된다. 포워딩된 jsp페이지에서는 서블릿에서 request영역에 공유한 속성값에 접근 할 수 없다.


(1) 예제

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Round14_05_Servlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

//한글 데이터가 없기 때문에 Encode 설정 하지 않음.

String method = request.getMethod();

//요청 메서드를 얻어내는 작업

if(method.equalsIgnoreCase("GET")) {

//요청 방식이 GET이라면

response.sendRedirect("http://localhost:8080/Round14/Round14_05_Get_Servlet.htm");

//Round14_05_Get_Servlet.htm으로 이동한다.

return;

}

else if(method.equalsIgnoreCase("POST")){

//요청 방식이 POST라면

response.sendRedirect("Round14_05_Post_Servlet.htm");

//Round14_05_Post_Servlet.htm으로 이동한다.

return;

}

}

}



출처: https://devbox.tistory.com/entry/Comporison-Dispatcher방식과-Redirect-방식 [장인개발자를 꿈꾸는 :: 기록하는 공간]

:

오라클 토드 관련 (ORA-00001) 에러

Back-End/Problems 2019. 5. 24. 10:02

ORA-00001: unique constraint (SYSTEM.MEMBER_PK) violated 

(이클립스에서 출력된 에러)


테이블에서 기본키 (PK) 를 검색하는 SQL 구문


1
2
3
4
5
6
7
8
9
10
11
12
SELECT A.TABLE_NAME
     , A.CONSTRAINT_NAME
     , B.COLUMN_NAME     
     , B.POSITION
  FROM ALL_CONSTRAINTS  A
     , ALL_CONS_COLUMNS B
 WHERE A.TABLE_NAME      = 'TABLE NAME' //에 테이블이름을 넣으면 테이블의 기본키가 검색된다.
   AND A.CONSTRAINT_TYPE = 'P' 
 
   AND A.OWNER           = B.OWNER
   AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
 ORDER BY B.POSITION
cs



테이블의 기본키는 중복된 값이 오거나 NULL값이 올 수가 없다.

아래쪽을 보면 MEMBER의 기본키는 ID이기 때문에 ID에 중복된 값이 들어가거나 NULL 값이 들어가면 에러가 발생하게 된다.

개체 무결성의 원칙에 위배되기 때문에 에러가 발생하게 된다.






기본키 : 테이블의 튜플을 식별할수 있는 속성 (중복값이 오거나 NULL값이 올 수 없음)





:

javascript 연산자, 비교문

Front-End/javascript 2019. 5. 23. 23:18

== 

 

 

 

 





  동등 연산자로 좌항과 우항을 비교해서 서로 값이 같다면 true 다르다면 false가 된다.


  '=' 가 하나인 것은 대입 연산자로 좌항의 값을 우항의 변수에 대입할 때 사용하는 것으로 의미가 완전히 다르다.

 

 

 

1
2
3
alert(1==2) //false
alert(1==1) //true
alert("one"=="two") //false
cs

 

 

 

===

 



  일치 연산자로 ===좌항과 우항이 '정확'하게 같을 때 true 다르면 false가 된다.
  '==='은 숫자 1과 문자 1을 다르게 인식한다.
  반면에 '=='은 양쪽의 값을 같다고 판단한다.
  바로 이것이 '정확'의 의미이다. 즉 ===은 서로 같은 수를 표현하고 있더라도 데이터 형이 같은 경우에만
  같다고 판단하기 때문이다. 
  ==연산자 대신 ===연산자를 쓰는것을 강력하게 권한다.

 

1
2
3
alert(1=='1') //true
alert(1===1) //false
cs

 

 

 

!=

 



  '!' 는 부정을 의미한다. '같다'의 부정은 '같지 않다' 이다.
  이것을 기호로는 '!='로 표시한다.
  아래의 결과는 '!=' 의 결과인데 ==와 정반대의 결과를 보여준다. 

 

 

1
2
3
4
alert(1!=2);   //true
alert(1!=1);   //false
alert("one"!="two");  //true
alert("one"!="one");  //false
cs

 

 

 

!==

 

  
  '!==' 는 '!=' 와 '=='의 관계와 같다. 정확하게 같지 않다는 의미이다.

 

 

 

>

 



  좌항이 우항보다 크다면 참, 그렇지 않다면 거짓임을 알려주는 연산자.

 

 

 

>=

 



  좌항이 우항보다 크거나 같다. '<='는 반대의 의미이다.
 

 

아래 책은 제가 공부할때 활용했던 책으로 추천드리는 책이니 한번씩 읽어보시는것을 추천드립니다!! ㅎㅎ

토비의 스프링 3.1 세트:스프링의 이해와 원리 + 스프링의 기술과, 에이콘출판

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

'Front-End > javascript' 카테고리의 다른 글

javaScript 반복문  (0) 2019.05.25
javascript 조건문  (0) 2019.05.24
javascript 주석, 줄바꿈, 여백  (0) 2019.05.23
JavaScript 변수  (0) 2019.05.23
JavaScript 숫자와 문자 -2  (0) 2019.05.22
:

javascript 주석, 줄바꿈, 여백

Front-End/javascript 2019. 5. 23. 22:01

-자바스크립트 주석-

 

 

  c언어나 자바와 동일

 


// 주석



/* 주석 */



 

 

-자바스크립트 줄바꿈과 여백-

 

자바스크립트는 자바나 c언어와는 다르게 줄을 바꾸면 자동적으로 명령이 끝났다고 보기 때문에

" ; " 를써주지 않아도 되나, 명시적으로 " ; " 을 사용하고, 반드시 " ; " 를 사용해야만 하는 경우가 있다.

 (ex 한줄에 두가지 명령이 있는 경우)

 

여백은 Tap키 를 사용한다. (코드의 가독성을 좋게 하기 위해서 사용)

 

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<script type="text/javascript">
    var a = 1;
    alert(a);
</script>
</body>
</html>
cs

 

 

아래 책은 제가 공부할때 활용했던 책으로 추천드리는 책이니 한번씩 읽어보시는것을 추천드립니다!! ㅎㅎ

토비의 스프링 3.1 세트:스프링의 이해와 원리 + 스프링의 기술과, 에이콘출판

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

'Front-End > javascript' 카테고리의 다른 글

javascript 조건문  (0) 2019.05.24
javascript 연산자, 비교문  (0) 2019.05.23
JavaScript 변수  (0) 2019.05.23
JavaScript 숫자와 문자 -2  (0) 2019.05.22
JavaScript 숫자와 문자 -1  (0) 2019.05.22
:

JavaScript 변수

Front-End/javascript 2019. 5. 23. 21:31

-변수-

 



  JavaScript에서 변수는 var로 시작한다.


  var은 변수를 선언하겠다는 것을 의미한다.


  var을 생략 할 수도 있지만 이것은 유효범위라는 것에 영향을 미친다.


  그렇기 때문에 var의 의미를 명확하게 이해하기 전까지는 var를 사용하는 것이 권장된다.


  또한 변수안에는 숫자뿐만 아니라 문자도 들어갈 수 있다.


  처음 변수를 선언할때는 var을 붙여주고, 그 다음부터 사용할때는 var은 생략 가능하다.

 

 

 

 

-각종 연산 예제-

 

1
2
3
4
5
6
7
8
9
10
11
var a = 100;
 
100 //출력
 
a=a+10;
 
110 //출력
 
a=a-50;
 
60 //출력
 
a=a*10;
 
600 //출력
 
a=a+'c';
 
"600c" //출력
 
alert(a+"aa");
 
//밑에 경고창 출력
cs

 

 

아래 책은 제가 공부할때 활용했던 책으로 추천드리는 책이니 한번씩 읽어보시는것을 추천드립니다!! ㅎㅎ

토비의 스프링 3.1 세트:스프링의 이해와 원리 + 스프링의 기술과, 에이콘출판

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

'Front-End > javascript' 카테고리의 다른 글

javascript 연산자, 비교문  (0) 2019.05.23
javascript 주석, 줄바꿈, 여백  (0) 2019.05.23
JavaScript 숫자와 문자 -2  (0) 2019.05.22
JavaScript 숫자와 문자 -1  (0) 2019.05.22
sublimetext 설치  (0) 2019.05.22
:

19.05.23 고급 서블릿 파라미터 활용 (model 2 동영상 9강~10강)

Back-End/JSP 2019. 5. 23. 15:59

MemberJoin.jsp (회원가입 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 
<center>
    <h2>회원 가입</h2>
    <body>
//proc.do 서블릿으로 회원가입시 입력한 값을 넘겨준다.
        <form action="proc.do" method="post">
            <table width="500" border="1">
 
                <tr height="50">
                    <td width="150" align="center">아이디</td>
                    <td width="350" align="center"><input type="text" name="id"
                        size="40" placeholder="id를 넣으세요."></td>
                <tr height="50">
                    <td width="150" align="center">패스워드</td>
                    <td width="350" align="center"><input type="password"
                        name="pass1" size="40" placeholder="비밀번호는 영문과 숫자만 넣어주세요."></td>
                <tr height="50">
                    <td width="150" align="center">패스워드 확인</td>
                    <td width="350" align="center"><input type="password"
                        name="pass2" size="40"></td>
                <tr height="50">
                    <td width="150" align="center">이메일</td>
                    <td width="350" align="center"><input type="email"
                        name="email" size="40" placeholer></td>
                <tr height="50">
                    <td width="150" align="center">전화번호</td>
                    <td width="350" align="center"><input type="tel" name="tel"
                        size="40"></td>
                <tr heigth="50">
                    <td width="150" align="center">당신의 관심분야</td>
                    <td width="350" align="center"><input type="checkbox"
                        name="hobby" value="캠핑">캠핑 &nbsp;&nbsp; <input
                        type="checkbox" name="hobby" value="등산">등산 &nbsp;&nbsp; <input
                        type="checkbox" name="hobby" value="영화">영화 &nbsp;&nbsp; <input
                        type="checkbox" name="hobby" value="독서">독서 &nbsp;&nbsp;</td>
                </tr>
                <tr heigth="50">
                    <td width="150" align="center">당신의 직업은</td>
                    <td width="350" align="center"><select name="job">
                            <option value="교사">교사</option>
                            <option value="변호사">변호사</option>
                            <option value="의사">의사</option>
                            <option value="기술사">기술사</option>
                    </select></td>
                </tr>
                <tr height="50">
                    <td width="150" align="center">당신의 연령은</td>
                    <td width="350" align="center"><input type="radio" name="age"
                        ㄴㄴ
                        value="20">20대&nbsp;&nbsp; <input
                        type="radio" name="age" value="30">30대&nbsp;&nbsp; <input
                        type="radio" name="age" value="40">40대&nbsp;&nbsp;</td>
                </tr>
 
                <tr height="50">
                    <td width="150" align="center">하고싶은말</td>
                    <td width="350" align="center"><textarea rows="5" cols="40"
                            name="info"></textarea></td>
                </tr>
 
                <tr height="50">
                    <td align="center" colspan="2"><input type="submit"
                        value="회원 가입"> <input type="reset" value="취소">
            </table>
        </form>
</center>
</body>
</html>
cs



MemberList.jsp (회원 리스트 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
MemberList로 이동
</body>
</html>
cs



LoginError.jsp (에러 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
LoginError.jsp
</body>
</html>
cs



MemberBean.java (멤버빈 클래스)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package model;
 
public class MemberBean {
    
    private String id;
    private String pass1;
    private String pass2;
    private String email;
    private String tel;
    private String hobby;
    private String job;
    private String age;
    private String info;
    
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPass1() {
        return pass1;
    }
    public void setPass1(String pass1) {
        this.pass1 = pass1;
    }
    public String getPass2() {
        return pass2;
    }
    public void setPass2(String pass2) {
        this.pass2 = pass2;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    public String getJob() {
        return job;
    }
    public void setJob(String job) {
        this.job = job;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    
    
    
    
    
    
}
 
cs



MemberDAO.java (DB연결 클래스)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package model;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
public class MemberDAO {
 
    Connection con;
    PreparedStatement pstmt;
    ResultSet rs;
 
    public void getCon() {
        try {
 
            // 데이터베이스 연결 코드
            Context initctx = new InitialContext();
            Context envctx = (Context) initctx.lookup("java:comp/env");
            DataSource ds = (DataSource) envctx.lookup("jdbc/pool");
            con = ds.getConnection();

            

//InitialContext는 프로젝트에서 서버를 사용할 수 있도록 Context를 구성, //web.xml에서 앤트리나 리소스 정보가 위치해있는 곳이 "java:comp/env" //Context의 lookup(참고)메서드로 "java:comp/env" 정보 읽어들임 //읽어들인 정보를 envctx에 담고 서버를 사용하기위해 설정했던 이름인 jdbc/pool를 참고하여 //(jdbc/pool과 매핑되는 리소스를 가져옴) //DataSource객체에 담는다. //(생성된 Context객체에서 리소스 위치한 환경 참고, 커넥션풀 리소스의 이름 참고하여 데이터소스 객체에 담음 ) //DataSource객체에서 getConnection하여 커넥션 객체에 담는다. //정리 : Context 객체로 리소스 위치와 리소스 이름을 참고하여 미리 설정해둔 타입(데이터소스)으로 커넥션 객체를 얻음



 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    // 회원 한사람에 대한 정보를 저장하는 메소드
    public void insertMember(MemberBean bean) {
        getCon();
 
        try {
 
            // 쿼리 준비하기
            String sql = "insert into member values (?,?,?,?,?,?,?,?) ";
 
            // 쿼리 실행할 객체 선언
            pstmt = con.prepareStatement(sql);
 
            // ?에 값을 대입시켜준다.
            pstmt.setString(1, bean.getId());
            pstmt.setString(2, bean.getPass1());
            pstmt.setString(3, bean.getEmail());
            pstmt.setString(4, bean.getTel());
            pstmt.setString(5, bean.getHobby());
            pstmt.setString(6, bean.getJob());
            pstmt.setString(7, bean.getAge());
            pstmt.setString(8, bean.getInfo());
 
            // 쿼리 실행
            pstmt.executeUpdate();
            con.close();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
}
 
cs



MemberJoinProc.java (회원 처리 서블릿)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package control;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import model.MemberBean;
import model.MemberDAO;
 
@WebServlet("/proc.do") //proc.do url을 매핑한다.
public class MemberJoinProc extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void reqPro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // 빈클래스 객체를 생성하고 각각 값들을 받아서 빈 클래스에 저장한다.
 
        // 빈클래스에 저장하기 위해 빈클래스 객체 생성
        MemberBean bean = new MemberBean();
 
        // request.getParameter메소드를 사용해서 받은 값들을 빈 클래스에 저장시킨다.
 
        bean.setId(request.getParameter("id"));
        String pass1 = request.getParameter("pass1");
        String pass2 = request.getParameter("pass2");
        bean.setPass1(pass1);
        bean.setPass2(pass2);
        bean.setEmail(request.getParameter("email"));
        bean.setTel(request.getParameter("tel"));
 
        // 취미는 여러개를 선택할 수 있기때문에 배열에 담아서 저장하고
        String[] arr = request.getParameterValues("hobby");
        // data의 초기값을 선언
        String data = "";
        // 향상된 for문 arr배열의 원소를 하나씩 출력해 string에 저장한다.
        for (String string : arr) {
            data += string + " "// 하나의 스트링으로 자료를 연결;
        }
 
        bean.setHobby(data);
        bean.setJob(request.getParameter("job"));
        bean.setAge(request.getParameter("age"));
        bean.setInfo(request.getParameter("info"));
 
        // 패스워드가 같을 경우에만 데이터 베이스에 저장
        if (pass1.equals(pass2)) {
            // 데어터베이스 객체 생성
            MemberDAO mdao = new MemberDAO();
 
            mdao.insertMember(bean);
 
            RequestDispatcher dis = request.getRequestDispatcher("MemberList.jsp");
            dis.forward(request, response);
 
        } else // 패스워드가 다를시 메시지를 출력하고 에러페이지로 이동함
        {
            // RequestDispatcher은 특정 자원에 처리를 요청하고 처리 결과를 얻어오는 기능을 수행하는 클래스.
            // 즉 a.jsp 내에서 RequestDispatcher을 사용하여 b.jsp로 요청을 보낼 수 있습니다.
 
            request.setAttribute("msg""패스워드가 일치 하지 않습니다.");
            RequestDispatcher dis = request.getRequestDispatcher("LoginError.jsp");
            dis.forward(request, response);
 
        }
 
        // 데이터베이스 객체 선언한 후에 저장
 
    }
 
}
 
cs


:

19.05.23 고급 서블릿 파라미터 활용 (model 2 동영상 8강)

Back-End/JSP 2019. 5. 23. 11:38

-(Bean 클래스를 활용) 서블릿 파라미터 처리-


use bean은 서블릿에서 사용불가 (자바코드이기 때문에)


requset.getParameter를 사용하지 않고 


빈클래스를 만들어 jsp로 자료를 한번에 넘기기




-예제 및 출력 결과-


Memberjoin2.jsp (회원가입 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <center>
        <h2>회원 가입 양식</h2>
        <form action="MProc2" method="post">
            <!--서블릿 이름 (맵핑할) 클래스 이름이 아님-->
            <table width="400" border="1" bordercolor="gray">
                <tr height="40">
                    <td width="150" align="center">아이디</td>
                    <td width="250"><input type="text" name="id"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">패스워드</td>
                    <td width="250"><input type="password" name="password"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">이메일</td>
                    <td width="250"><input type="email" name="email"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">전화번호</td>
                    <td width="250"><input type="tel" name="tel"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">주소</td>
                    <td width="250"><input type="text" name="address"></td>
                </tr>
 
                <tr height="40">
                    <td width="40" align="center" colspan="2"><input type="submit"
                        value="회원가입"></td>
                </tr>
 
            </table>
        </form>
    </center>
</body>
</html>
cs



MemberJoinProc2.java (회원가입한 회원의 빈 클래스를 사용해서 처리하는 서블릿 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package control;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import model.MemberBean;
 
/**
 * Servlet implementation class MemberJoinProc2
 */
@WebServlet("/MProc2"// Memberjoin2 jsp파일에서 MProc2를 호출하고 있으므로 url도 그거에 맞게끔 변경 (맵핑 한다)
public class MemberJoinProc2 extends HttpServlet {
 
    // doGet와 doPost는 값을 2개 밖에 받지못한다 . (request, response 두개만 받을수 있다. 개수가 넘어갈시에는
    // 넘겨지지 않음)
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void reqPro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // 유즈빈은 자바코드이므로 사용이 불가하다 그러므로 멤버빈 클래스를 활용한다.
 
        // 멤버빈을 사용하기 위해 멤버빈 객체를 생성
        MemberBean bean = new MemberBean();
 
        // 값들을 하나씩 받아와 빈 클래스에 저장함
        bean.setId(request.getParameter("id"));
        bean.setPassword(request.getParameter("password"));
        bean.setEmail(request.getParameter("email"));
        bean.setTel(request.getParameter("tel"));
        bean.setAddress(request.getParameter("address"));
 
        // request 객체에 bean 클래스를 추가
        request.setAttribute("bean", bean);
 
        RequestDispatcher dis = request.getRequestDispatcher("MemberView.jsp");
        dis.forward(request, response);
 
    }
}
 
cs



MemberBean.java (회원가입 빈 클래스)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package model;
 
public class MemberBean {
 
    private String id;
    private String password;
    private String email;
    private String tel;
    private String address;
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public String getTel() {
        return tel;
    }
 
    public void setTel(String tel) {
        this.tel = tel;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
}
 
cs



MemberView.jsp (빈클래스에서 자료를 넘겨받아서 출력하는 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>당신의 아이디는 ${bean.id } 당신의 패스워드는 ${bean.password }
 
 
</body>
</html>
cs




: