먼저 Activity를 만들어 준다. 

package com.example.ondroid; import android.content.Intent; import android.os.Bundle; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; public class LoadingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(getApplicationContext(),MainActivity.class); startActivity(intent); finish(); } }


인텐트로 넘어가게 한 후 이 화면은 초기에만 나타나게 할 것이므로 finish()를 사용하여 Activity를 없애준다.


그리고 AndroidManifest.xml 에 아래와 같이 등록 하여준다. androi:theme="@style/SplashTheme" 를 넣었으면 style 에 SplashTheme 태크를 넣어줘야한다.


<activity android:name=".LoadingActivity" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>


아래는 src/main/res/values/styles.xml 에 등록하여준다.<style> 태그이므로 기존의 태그가 서로 겹치지 않게 해야한다.


<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/splash_background</item> </style>


위의 splash_background는 drawable폴더에 만들어준다.

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/splash_base"></item> <item android:top="210dp"> <bitmap android:src="@drawable/jamanchulogi" android:gravity="top"/> </item> </layer-list>


그리고 splash_base라는 xml을 drawable 폴더에 둬서 배경색으로 이용할 수 있다.

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#F4FFFF" android:centerColor="#F4FFFF" android:endColor="#F4FFFF" android:angle="90" android:centerY="0.5" /> <corners android:radius="0dp"/> </shape>



안드로이드에서 activity를 만들고 xml에 있는 text 나 버튼 등을 가져올려면 우선 그 xml파일을 activity 자바에서 불러올 필요가 있다.


public class LoadingPage extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_loading_layout);

ImageView logoImage = (ImageView) findViewById(R.id.logoImage);


}
}

위 처럼 이미지 뷰를 xml에서 생성을 하고, 이 레이아웃에 있는 이미지뷰를 엑티비티에서 읽어 들일려면 setContentView(R.layout. xml이름)를 이용하면 된다.


필자는 레이아웃을 start_loading_layout 으로 두었고 위 처럼 적었다.



그리고 activity를 생성 했다면 AndroidManifest.xml 파일에 아래 처럼 작성 해줘야 한다. <application> 태그 안에 <activity> 태그로 activity를 등록하여 주면 되고, ".엑티비티명" 을 넣어주면 된다.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mysns">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity android:name=".LoadingPage"/>


<activity android:name=".LoginPage"/>
</application>

</manifest>



커넥션풀이란?

데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool) 속에 저장해 두고 있다가 필요할 때 커넥션을 풀에서 쓰고 다시 풀에 반환하는 기법을 말한다.

웹 프로그램에서는 데이터베이스의 환경설정과 연결 관리 등을 따로 XML파일이나 속성 파일을 사용해서 관리하고, 이렇게 설정된 정보를 이름을 사용하여 획득하는 방법을 사용한다.

- 웹 컨테이너가 실행되면서 커넥션(connection) 객체를 미리 풀(pool)에 생성해 둔다.

- DB와 연결된 커넥션(connection)을 미리 생성해서 풀(pool) 속에 저장해 두고 있다가 필요할 때에 가져다 쓰고 반환한다.

- 미리 생성해두기 때문에 데이터베이스에 부하를 줄이고 유동적으로 연결을 관리 할 수 있다.

출처: https://devbox.tistory.com/entry/JSP-커넥션-풀-1 [장인개발자를 꿈꾸는 :: 기록하는 공간]

클라이언트에서 다수의 요청이 발생할 경우 데이터베이스에 부하가 발생하게 된다.

이러한 문제를 해결 하기 위해서 커넥션 풀(DataBase Connection Pool)기법을 이용 한다.

IntelliJ 에서 커넥션풀을 연결해볼려고 한다.

tomcat-dbcp.jar 파일은 우리가 받은 tomcat 폴더안의 lib에 있다. (원래는 3개로 나뉘어져 있었다고 하는데 tomcat6.0 이상 부터 저렇게 하나로 통합 됬다고 한다.)

이 jar파일을 앞에도 했듯이 WEB-INF 폴더 안의 lib 폴더에 넣어주자.

이클립스에서는 [Servers] - [Tomcat v6.0 Server at localhost-config] 에 있는 context.xml 파일을 연다.

IntelliJ에서는

1. Project Structure -> Module -> Web -> Add Application Server specific descriptor... -> [클릭] -> Tomcat Server -> [선택]

2. context.xml 이 생성됩니다.

3. <Resource />로 JNDI를 설정하시면 각 개인별 설정이 가능합니다.

물론 META-INF/context.xml 파일은 git, svn에서 제외 시키셔야 각 개인별 사용이 가능합니다.

출처: okky

Ctrl + Alt + Shift + S 를 누른 후, 왼쪽 텝에서 Module을 클릭 후 오른쪽에 Web폴더를 선택하여 주고, 화면 중앙에 Add Application Server specific descriptor... 를 선택하면 뜨는 창에서 첫번째 선택창에 Tomcat Server를 선택하여주면 생성 된다.

Context.xml 은 이렇게 수정하여준다.

<Context> <Resource name="데이터베이스 이름" auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" type="javax.sql.DataSource" url="jdbc:oracle:thin:@ip주소:포트번호:전역 데이터베이스 이름" username="데이터베이스 아이디" password="데이터베이스 비밀번호" maxActive="20" maxIdle="10" maxWait="5000" /> </Context>

이 후 JNDI 를 설정하여 준다.

WEB-INF 의 web.xml에 아래와 같이 <resouce-ref> 태그를 넣어준다.

<resource-ref> <description>Connection</description> <res-ref-name>자신의 데이터베이스 이름</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>

이 후 java나 jsp에서 커넥션풀과 JNDI를 통하여 DB와 연결된 것을 확인 할 수 있다. 반드시 DB 이름은 web.xml의 <res-ref-name>과 같아야 한다.

import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class OracleDBConnector { public static Connection getConnection() throws SQLException, NamingException, ClassNotFoundException { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("ORCL"); //반드시 DB 이름은 web.xml의 <res-ref-name>과 같아야 한다. Connection con = ds.getConnection(); return con; } }

test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.sql.Connection" %> <%@ page import="DataAccess.OracleDBConnector" %> <%@ page import="java.sql.PreparedStatement" %> <%@ page import="java.sql.ResultSet" %> <html> <head> <title>ZeroLab</title> </head> <body> <p>아래는 DB 내용</p> <table border="3" bordercolor="skyblue"> <tr bgcolor="skyblue"><td>id<td>pw</tr> <% // 쿼리문 String query="select * from register"; // 커넥션 연결 Connection conn = OracleDBConnector.getConnection(); // DB에 쿼리문을 보낸다. PreparedStatement pstmt = conn.prepareStatement(query); ResultSet rs = pstmt.executeQuery(); // 결과값을 출력한다. while(rs.next()){ out.println("<tr>"); out.println("<td>"+rs.getString("ID")); out.println("<td>"+rs.getString("PW")); out.println("</tr>"); } %> </table> </body> </html>

이렇게 커넥션 풀을 이용하여 DB의 내용을 읽어오는 DAO 클래스의 함수이다. PreparedStatement를 이용하여 읽어온다.

import java.sql.*; public class MyDAO { private static MyDAO instance; //싱글톤 패턴 public MyDAO(){} public static MyDAO getInstance(){ if(instance == null) instance = new MyDAO(); return instance; } public ArrayList<MyDTO> RegisterSelect(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { StringBuffer query = new StringBuffer(); query.append("SELECT * FROM register"); conn = OracleDBConnector.getConnection(); pstmt = conn.prepareStatement(query.toString()); rs = pstmt.executeQuery(); while(rs.next()){ String id = rs.getString("id"); String pw = rs.getString("pw"); int Num = rs.getInt("num"); String title = rs.getString("title"); String contents = rs.getString("contents"); String date = rs.getString("date"); MyDTO dto = new MyDTO(id, pw, Num, title, contents, date); dtos.add(dto); } return dtos; } catch (Exception sqle) { throw new RuntimeException(sqle.getMessage()); } finally { try{ if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } }

'Java > JSP' 카테고리의 다른 글

Oracle JDBC 연결  (0) 2019.09.12
DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12

Oracle DB 또한 MariaDB를 연결 한 것과 과정은 동일하나 JDK 버전을 알 필요가 있다.

JDK1.8(java 8 버전) 이면 OracleDB12버전을 받아줘야한다.

OracleDB 별 JDBC버전

https://stackoverflow.com/questions/30928813/supported-jdbc-jdk-versions-for-oracle-11g

드라이버

oracle.jdbc.driver.OracleDriver

URL

jdbc:oracle:driver_type:[username/password]@[//]host_name[:port][/XE]

ex) jdbc:oracle:thin:@localhost:1521:xe

'Java > JSP' 카테고리의 다른 글

커넥션풀(DBCP)  (0) 2019.09.12
DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12

'Java > JSP' 카테고리의 다른 글

커넥션풀(DBCP)  (0) 2019.09.12
Oracle JDBC 연결  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12

DAO 와 DTO에 대한 설명을 먼저 알아볼려고 한다.

DAO(Data Access Object) 란 ? - 데이터 베이스에 접속해서 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스

일반적인 JSP 혹은 Servlet 페이지내에 위의 로직을 함께 기술할 수 도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의 DAO클래스를 만들어 사용 한다.

DTO(Data Transfer Object) 란? - DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할수도 있지만, 해당 데이터의 클래스를 만들어 사용 한다. vo(Value Object)와 용어를 혼용해서 많이들 사용한다. 아래는 DTO와 VO에 대한 차이점을 알아볼 수 있다.

구조는 데이터베이스에 있는 정보들을 가져오기 위하여 DAO라는 클래스를 이용하여 데이터베이스에 접속하고, 거기서 나온 결과들을 DTO의 클래스에 저장을 한 후 그 정보들을 필요에 맞게 가공하여 jsp로 보여주는 구조이다.

먼저 DTO를 작성해보도록 하자.

package pack; public class Notice_Board_DTO{ //변수 private String id; private String pw; private int Num; private String title; private String contents; private String date; //생성자 public Notice_Board_DTO(String id, String pw, int Num, String title, String contents, String date){ this.id = id; this.pw = pw; this.Num =Num; this.title = title; this.contents = contents; this.date = date; } //getter, setter public String getID(){ return id; } public String getPW(){ return pw; } public String getTitle(){ return title; } public String getContents(){ return contents; } public int getNum(){ return Num; } public String getDate(){ return date; } public void setID(String id){ this.id = id; } public void setPW(String pw){ this.pw = pw; } public void setNum(int num){ this.Num = num; } public void setTitle(String title){ this.title = title; } public void setContents(String contents) { this.contents = contents; } public void setDate(String date){ this.date = date; } }

처음에는 DTO가 이름만 들어서는 무엇인지 긴가 민가 했었으나, 이렇게 코드를 보니 여태껏 안드로이드를 하면서 많이 봤던 자바빈 같은 것이였다.

DTO는 자신의 DataBase에 있는 테이블에서 가져올 정보들에 맞게 작성해 주면 될 것이다.

다음은 DAO이다.

package pack; import java.sql.*; import java.util.ArrayList; public class Notice_Board_DAO { private Connection con = null; private Statement stmt = null; private ResultSet rs = null; //드라이버 로딩 public Notice_Board_DAO(){ try { Class.forName("org.mariadb.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" !! <JDBC 오류> Driver load 오류: " + e.getMessage()); e.printStackTrace(); } } //select 구문 public ArrayList<Notice_Board_DTO> Notice_Board_Select(){ String server = "localhost"; // 서버 주소 String database = ""; // DATABASE 이름 String user_name = ""; // 서버 아이디 String password = ""; // 서버 비밀번호 ArrayList<Notice_Board_DTO> dtos = new ArrayList<Notice_Board_DTO>(); //연결 try { con = DriverManager.getConnection("jdbc:mysql://" + server + "/" + database + "?useSSL=false", user_name, password); stmt = con.createStatement(); rs = stmt.executeQuery("select * from register"); System.out.println("정상적으로 연결되었습니다."); while(rs.next()){ String id = rs.getString("id"); String pw = rs.getString("pw"); int Num = rs.getInt("num"); String title = rs.getString("title"); String contents = rs.getString("contents"); String date = rs.getString("date"); Notice_Board_DTO dto = new Notice_Board_DTO(id, pw, Num, title, contents, date); dtos.add(dto); } } catch(SQLException e) { System.err.println("con 오류:" + e.getMessage()); e.printStackTrace(); } finally { try{ //종료 if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(con != null) con.close(); }catch (Exception e){ e.printStackTrace(); } } return dtos; } }

위와 같이 코드를 작성하면 select 구문으로 뺄 수 있게 된다.

다음은 JSP에서 DAO와 DTO로 가져온 내용을 확인 하는 코드이다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="pack.Notice_Board_DAO" %> <%@ page import="pack.Notice_Board_DTO" %> <%@ page import="java.util.ArrayList" %> <html> <head> <title>ZeroLab</title> </head> <body> <% Notice_Board_DAO noticeDAO = new Notice_Board_DAO(); ArrayList<Notice_Board_DTO> dtos = noticeDAO.Notice_Board_Select(); for(int i=0; i <dtos.size(); i++){ Notice_Board_DTO dto = dtos.get(i); out.println(dto.getID()); out.println(dto.getPW()); } %> </body> </html>

이렇게 정보를 빼주면 된다.

여기서 가장 주의해야할 점은 DBConnector가 어디에 위치하고 있느냐 인데, 프로젝트명/web/WEB-INF/ 밑에 lib 디렉터리를 생성 해주고 거기 안에 집어 넣어준다. 나는 어느 lib에 존재해야하는 지 몰라서 계속해서 드라이버 로드 오류가 발생했었다.

'Java > JSP' 카테고리의 다른 글

Oracle JDBC 연결  (0) 2019.09.12
DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12
maven 이란?  (0) 2019.09.12

IntelliJ에 DB를 연결하는 방법이다.

MariaDB 다운로드

https://downloads.mariadb.org/

MariaDB와 Java를 연결 시켜주는 Connetcor이다.

https://mariadb.com/kb/en/library/about-mariadb-connector-j/

필자는 MariaDB를 이용하였다.

먼저 intelliJ에서 MariaDB를 연결하여 보겠다.

MariaDB를 받고 설치한 후 다음과 같이 Ctrl + Shift + A 를 눌러준 후 Database를 쳐서 검색하여 클릭하여준다.

이 후 우측에 창이 하나 뜰 텐데, 여기서 + 기호를 눌러 DB를 찾아 준다. ( 필자는 이미 만들어 리스트에 MariaDB가 있지만 텅텅비어있다면 정상이다. )

클릭을 하게 되면 이렇게 Data Sources and Drivers 라는 창이 뜨게 되고 여기서 MariaDB를 선택하여 준 후 Connector/J 를 설치하여 준다.

이 때 연결하는 창이 뜰 텐데, 다른 계정을 만들지 않았다면 User 아이디는 root가 된다. password는 지정한 대로 쳐주면 된다.

아래는 MariaDB로 연결하고 미리 만들어 두었던 notice table을 불러온 모습이다.

이번에는 JDBC 설정을 해볼 것이다. Ctrl + Alt + Shift + S 를 눌러 Project Structure 창을 켜준다. 그리고 + 를 눌러 Java library를 새로 받아 온다.

자신이 다운받은 connector의 위치로 가서 지정하여 준다.

ok 를 눌러준 후 apply이 해준다.

다음과 같이 클래스를 하나 생성 해주고 코드를 넣어 준다.

import java.sql.*; public class MariaDBConnetor { public static void main(String[] args) { Connection con = null; String server = " 서버 주소 "; String database = " DATABASE 이름 "; String user_name = " 서버 아이디 "; String password = " 서버 비밀번호 "; try { Class.forName("org.mariadb.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" 드라이버 로딩 오류 : " + e.getMessage()); e.printStackTrace(); } try { con = DriverManager.getConnection("jdbc:mysql://" + server + "/" + database + "?useSSL=false", user_name, password); // SSL 실행 확인 System.out.println("연결 성공"); } catch(SQLException e) { System.err.println("에러 내용 :" + e.getMessage()); e.printStackTrace(); } try { if(con != null) con.close(); } catch (SQLException e) {} } }

자신이 만든 MariaDB의 아이디와 비밀번호, 주소, 데이터베이스명을 적어 준 후 Ctrl + Shift + F10 을 눌러 개별 실행을 해 보자.

연결 됨을 확인할 수가 있다.

SSL은 True로 하면 에러가 난다. 이 부분은 조금 더 찾아본 후 적용할 수 있는지를 알아보도록 할 것이다.


'Java > JSP' 카테고리의 다른 글

DB별 JDBC 드라이버 명 및 URL 형식  (0) 2019.09.12
DAO , DTO(VO) 작성  (0) 2019.09.12
JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12
maven 이란?  (0) 2019.09.12
JSP, Servlet, 자바빈 등 용어 정리  (0) 2019.09.12

jsp 에서 페이지 설정은 다음과 같다.

<%@ page errorPage="errorPage.jsp" contentType="text/html;charset=UTF-8" language="java" %>

page errorPage="에러페이지 명.jsp" 를 작성하여 주고

<%@ page isErrorPage="true" contentType="text/html;charset=UTF-8" language="java" %> <% response.setStatus(200); %> <html> <head> <title>ZeroLab</title> </head> <body> <br><br><br> <h1 align="center">페이지에 에러가 발생했습니다.<br> 다시 접속하여 주세요.</h1> <p align="right"><%= exception.getMessage()%></p> </body> </html>

이렇게 에러페이지를 구성하여 주면 된다.

하지만 이렇게 jsp에다가 바로 에러페이지를 꾸미게 된다면 jsp마다 에러페이지를 설정하여 줘야해서 귀찮다.

그러므로 web.xml을 수정하여 에러페이지로 이동하는 방법을 사용할려고 한다.

web.xml은 페이지 에러 코드별, Exception 별로 처리가 가능하다.

web.xml을 처리하기전에 알아야할 것들이 있다고 본다. HTTP 에러코드 정리 인데

HTTP 에러코드

에러 메시지

100

Continue

101

Switching Protocols

200

OK, 에러 없이 전송 성공

202

Accepted, 서버가 클라이언트의 명령을 받음

203

Non-authoritative Information, 서버가 클라이언트 요구 중 일부만 전송함

204

Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음

205

Reset Content

206

Patrial Content

300

Multiple Choices, 최근에 옮겨진 데이터를 요청함.

301

Moved Permanently, 요구한 데이터를 변경된 임시 URL에서 찾음

302

Moved Permanently, 요구한 데이터가 변경된 URL에 있음

303

See Other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음

304

Not modified

305

Use Proxy

400

Bad Request, 요청 실패 - 문법상 오류가 있어서 서버가 요청 사항을 이해하지 못함.

401.1

Unauthorized, 권한 없음 - 접속 실패, 이 에러는 서버에 로그온 하려는 요청 사항이 서버에 들어있는 권한과 비교했을 시 맞지 않을 경우 발생. 이 경우, 요청한 자원에 접근할 수 있는 권한을 부여받기 위해서 서버 운영자에게 요청해야 함.

401.2

Unauthorized, 권한 없음 - 서버 설정으로 인한 접속 실패, 이 에러는 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지 않을 경우 발생. 이것은 일반적으로 적절한 www-authenticate head field를 전송하지 않아서 발생함.

402.3

Unauthorized, 권한 없음 - 자원에 대한 ACL에 기인한 권한 없음. 이 에러는 클라이언트가 특정 자원에 접근할 수 없을 때 발생. 이 자원은 페이지가 될 수도 있고, 클라이언트의 주소 입력란에 명기된 파일일 수도 있다. 또한, 클라이언트가 해당 주소로 접속할 때 이용되는 또 다른 파일일 수도 있다. 접근할 전체 주소를 다시 확인해 보고 웹 서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인한다.

401.4

Unauthorized, 권한 없음 - 필터에 의한 권한 부여 실패. 이 에러는 웹 서버가 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미함. 서버에 접속하는데 이용되는 인증 과정이 이런 필터 프로그램에 의해 거부된 것임.

404.5

Unauthorized, 권한 없음 - ISA PI/CGI 어플리케이션에 의한 권한 부여 실패. 이 에러는 이용하려는 웹 서버의 어드레스에 ISA PI나 CGI 프로그램이 설치되어 있어 사용자의 권한을 검증함. 서버에 접속하는데 이용되는 인증 과정이 이 프로그램에 의해 거부됨.

402

Payment Required, 예약됨

403.1

Forbidden, 금지 - 수행 접근 금지. 이 에러는 CGI나 ISA-PI, 혹은 수행시키지 못하도록 되어 있는 디렉터리 내의 실행 파일을 수행시키려고 했을 때 발생함.

403.2

Forbidden, 금지 - 읽기 접근 금지. 이 에러는 브라우저가 접근한 디렉터리에 가용한 디폴트 페이지가 없을 경우에 발생함.

403.4

Forbidden, 금지 - SSL 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생.

403.5

Forbidden, 금지 - SSL 128이 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생. 브라우저가 128비트의 SSL을 지원하는지를 확인해야 함.

403.6

Forbidden, 금지 - IP 주소 거부됨. 이 에러는 서버가 사이트에 접근이 허용되지 않은 IP주소로 사용자가 접근하려 했을 때 발생함.

403.7

Forbidden, 금지 - 클라이언트 확인 필요. 이 에러는 접근하려는 자원이 서버가 인식하기 위해서 브라우저에게 클라이언트 SSL을 요청하는 경우 발생함. 자원을 이용할 수 있는 사용자임을 입증하는데 사용됨.

403.8

Forbidden, 금지 - 사이트 접근 거부. 이 에러는 웹 서버가 요청사항을 수행하고 있지 않거나, 해당 사이트에 접근하는 것을 허락하지 않았을 경우에 발생함.

403.9

Forbidden, 금지 - 연결된 사용자수 과다. 이 에러는 웹 서버가 busy한 상태에 있어서 요청을 수행할 수 없을 경우에 발생함.

403.10

Forbidden, 금지 - 설정이 확실하지 않음. 이 에러는 웹 서버의 설정 부분에 문제가 있을 경우 발생함.

403.11

Forbidden, 금지 - 패스워드 변경. 이 에러는 사용자 인증 단계에서 잘못된 패스워드를 입력했을 경우 발생함.

403.12

Forbidden, 금지 - Mapper 접근 금지. 이 에러는 클라이언트 인증용 맵(map)이 해당 웹 사이트에 접근하는 것을 거부할 경우에 발생.

404

Not Found, 문서를 찾을 수 없음 - 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생함. URL을 다시 잘 보고 주소가 올바로 입력되었는지를 확인함.

405

Method not allowed, 메소드 허용 안 됨 - 이 에러는 Request 라인에 명시된 메소드를 수행하기 위한 해당 자원의 이용이 허용되지 않았을 경우에 발생함.

406

Not Acceptable, 받아들일 수 없음 - 이 에러는 요청 사항에 필요한 자원은 요청 사항으로 전달된 Accept header에 따라 "Not Acceptable" 내용을 가진 사항이 있을 경우에 발생함.

407

Proxy Authentication Required, Proxy 인증이 필요함 - 이 에러는 해당 요청이 수행되도록 proxy 서버에게 인증을 받아야 할 경우에 발생함.

408

Request timeout, 요청 시간이 지남.

409

Conflict

410

Gone, 영구적으로 사용할 수 없음.

411

Length Required

412

Precondition Failed, 선결조건 실패 - 이 에러는 Request-header filed에 하나 이상에 선결 조건에 대한 값이 서버에서의 테스트 결과 false로 나왔을 경우에 발생.

413

Request entity too large

414

Request-URI too long, 요청한 URI가 너무 김 - 이 에러는 요청한 URI의 길이가 너무 길어서 서버가 요청 사항의 이행을 거부했을 경우 발생.

415

Unsupported media type.

500

Internal Server Error, 서버 내부 오류 - 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생함.

501

Not Implemented, 적용 안 됨 - 이 에러는 웹 서버가 요청사항을 수행하는데 필요한 기능을 지원하지 않는 경우에 발생.

502

Bad gateway, 게이트웨이 상태 나쁨 - 이 에러는 게이트웨이 상태가 나쁘거나 서버의 과부하 상태일 때 발생한다.

503

Service Unavailable, 서비스 불가능 - 이 에러는 서비스가 현재 멈춘 상태 또는 현재 일시적인 과부하 또는 관리 상황일 때 발생될 수 있다.

504

Gateway timeout

505

HTTP Version Not Supported

이렇게 에러 코드들이 있다고 한다. 이 중에서 404와 500이 대표적인 JSP 오류라고 한다.

먼저 web.xml 을 처리해 줄 필요가 있겠다.

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>pack.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/Serv1</url-pattern> </servlet-mapping> <error-page> <error-code> 404 </error-code> <location> /errorPage/404errorPage.jsp </location> </error-page> <error-page> <error-code> 500 </error-code> <location> /errorPage/404errorPage.jsp </location> </error-page> </web-app>

이 후에는 저 /errorPage/404errorPage.jsp 이 경로에 맞게 jsp 파일을 만들어 주면 된다. 필자는 errorPage 디렉터리를 만들어 주고 거기에 errorPage.jsp 를 만들어 보았다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% response.setStatus(HttpServletResponse.SC_OK); %> <html> <head> <title>ZeroLab</title> </head> <body> <br><br><br> <h1 align="center">404 <br><br>페이지에 에러가 발생했습니다.<br> 사유 : 요청하신 페이지가 없습니다.</h1> </body> </html>

위는 404errorPage.jsp 코드이다.

서버를 돌려서 404에러를 한번 내서 에러페이지가 잘 작동하는지 확인해 볼 필요가 있다.

이런 페이지가 뜨게 할려면 말이다. 간단하다. 다음과 같은 코드를 입력하여 주자.

<% page errorPage="" contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>ZeroLab</title> </head> <body> <ul> <li><a href="intro.php">소개</a></li><br><!-- 헛페이지 링크를 만들어 보자--> </ul> </body> </html>

다음은 500 에러 페이지 이다. 방금 위의 코드에 삽입해보자.

<% int i =1 / 0 // 왜 이게 에러가 나는지는 설명을 하지 않아도 알 수 있어야 한다. %>

500 에러페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% response.setStatus(HttpServletResponse.SC_OK); %> <html> <head> <title>ZeroLab</title> </head> <body> <br><br><br> <h1 align="center">500 <br><br>페이지에 에러가 발생했습니다.<br> 사유 : 내부 문제</h1> </body> </html>

'Java > JSP' 카테고리의 다른 글

DAO , DTO(VO) 작성  (0) 2019.09.12
IntelliJ-JDBC-MariaDB연결하기(JDBC)  (0) 2019.09.12
maven 이란?  (0) 2019.09.12
JSP, Servlet, 자바빈 등 용어 정리  (0) 2019.09.12
JSP 에서 Post로 Servlet 에 parameter 넘기기  (0) 2019.09.12

컴포넌트 : JSP, Servlet, HTML 등의 웹어플리케이션을 구현하기 위한 구성요소

JSP(Java Server Page) : HTML 파일 내에서 JAVA언어를 삽입한 문서

Servlet(Server Applet) : JAVA언어로 이루어진 웹프로그래밍 문서

웹서버 : 클라이언트의 요청에 의해 정보를 제공해 주는 서버( Aphach, IIS). 별도의 구현이 필요한 로직이 있을 경우 웹어플리케이션 서버에 요청

웹브라우저 : 웹서버에 정보를 요청하고, 웹서버로부터 정보를 받는 매개체. 이때 HTTP 프로토콜을 사용함.

자바빈즈 : 동적 컨텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법. 즉, JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것. (JSP 표준 액션 태그로 접근할 수 있는 자바 클래스)

'Java > JSP' 카테고리의 다른 글

JSP 에러페이지, HTTP 에러코드 정리  (0) 2019.09.12
maven 이란?  (0) 2019.09.12
JSP 에서 Post로 Servlet 에 parameter 넘기기  (0) 2019.09.12
intellij 에서 Servlet 생성하기  (0) 2019.09.12
intellij 에서 Tomcat 적용하기  (0) 2019.09.12

+ Recent posts