[JAVA] jndi2

JAVA 2017. 11. 28. 10:02

jndi2




Tomcat 5 -이클립스 연동 작업중...


"org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' "


이 발생 하였습니다.


이 메시지를 해결하기 위해 여러 방법을 시도했습니다.



1. server.xml 확인하기.


<Context docBase="Test" path="/Test" reloadable="true"   > 

     <Resource  auth="Container" 

          driverClassName="oracle.jdbc.driver.OracleDriver" 

          loginTimeout="10"

          maxWait="5000"

          name="intermax/jndi1" 

          password="maxgauge" 

          testOnBorrow="true" 

          type="javax.sql.DataSource"   

          url="jdbc:oracle:thin:@192.168.123.233:1522:WASDB3"   

          username="maxgauge"

      />

</Context>




2. context.xml 설정 확인하기.


<Resource name="intermax/jndi1"

auth="Container"

     type="javax.sql.DataSource"

     driverClassName="oracle.jdbc.driver.OracleDriver"                 

     loginTimeout="10"

     maxWait="5000"

     username="maxgauge"

     password="maxgauge"

     testOnBorrow="true"

     url="jdbc:oracle:thin:@192.168.123.233:1522:WASDB3"

/>



3. webapps의 web.xml 설정 확인하기.


<resource-ref>

<description>intermax/jndi1 Test</description>

     <res-ref-name>intermax/jndi1</res-ref-name>

     <res-type>javax.sql.DataSource</res-type>

     <res-auth>Container</res-auth>

</resource-ref>

'JAVA' 카테고리의 다른 글

[JAVA]JUnit 테스트 코드  (0) 2017.11.30
[JAVA]jsp 파일 읽어 저장  (0) 2017.11.30
[JAVA] javaee 오류  (0) 2017.11.27
[JAVA]ip 추려서 true/false return  (0) 2017.11.27
[JAVA] IE11 첨부파일 한글깨짐  (0) 2017.11.27
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA] javaee 오류

JAVA 2017. 11. 27. 16:14

javaee 오류



ava.lang.IllegalArgumentException: Can't convert argument: null


 


1. web.xml 상단 부분을 아래와 같이 변경.

 <web-app xmlns="http://java.sun.com/xml/ns/javaee">



2. web.xml 전체에서 'javaee' prefix를 삭제한다.

<javaee:description> -> <description>으로 변경한다.

'JAVA' 카테고리의 다른 글

[JAVA]jsp 파일 읽어 저장  (0) 2017.11.30
[JAVA] jndi2  (0) 2017.11.28
[JAVA]ip 추려서 true/false return  (0) 2017.11.27
[JAVA] IE11 첨부파일 한글깨짐  (0) 2017.11.27
[JAVA]https 로 변경  (0) 2017.11.27
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

ip 추려서 true/false return 


private boolean isAccessable(HttpServletRequest request){


boolean condition = false;

String userIp = request.getRemoteAddr();

log.debug(">>>>>>>>>>>>>>>>>>>>>>>userIp:" + userIp);

String accessIp = null;

ResourceBundle property = null;

try{

property  = ResourceBundle.getBundle("egovframework.egovProps.conf.accessIp");

accessIp = property.getString("IP");

log.debug(">>>>>>>>>>>>>>>>>>>>>>>accessIp:" + accessIp);

String[] accessIpes = accessIp.split(",");

for(String ip : accessIpes){

if(ip.indexOf("*") > -1){

log.debug(">>>>>>>>>>>>>>>>>>>>>>>ip.indexOf(\"*\"):" + ip);

if( userIp.indexOf(ip.substring(0, ip.indexOf("*"))) > -1 ){

condition = true;

break;

}

}else if(ip.indexOf("~") > -1){

log.debug(">>>>>>>>>>>>>>>>>>>>>>>ip.indexOf(\"~\"):" + ip);

String[] ipes = ip.split("~");

String _ip1 = ipes[0].substring(0, ipes[0].lastIndexOf(".")+1);

log.debug(">>>>>>>>>>>>>>>>>>>>>>>_ip1:" + _ip1);

String _ip2 = ipes[1].substring(0, ipes[1].lastIndexOf(".")+1);

log.debug(">>>>>>>>>>>>>>>>>>>>>>>_ip2:" + _ip2);

String _userIp = userIp.substring(0, userIp.lastIndexOf(".")+1);

log.debug(">>>>>>>>>>>>>>>>>>>>>>>_userIp:" + _userIp);


if(userIp.indexOf(_ip1) > -1 && userIp.indexOf(_ip2) > -1){

String _ip11 = ipes[0].substring(ipes[0].lastIndexOf(".")+1);

String _ip22 = ipes[1].substring(ipes[1].lastIndexOf(".")+1);

String _userIp2 = userIp.substring(userIp.lastIndexOf(".")+1);

if( ( Integer.parseInt(_userIp2) >= Integer.parseInt(_ip11) ) && ( Integer.parseInt(_userIp2) <= Integer.parseInt(_ip22) ) ){

condition = true;

break;

}

}

}else{

log.debug(">>>>>>>>>>>>>>>>>>>>>>>ip:" + ip);

if(userIp.equals(ip)){

condition = true;

break;

}

}

}

}catch(Exception ignored){

condition = false;

}


return condition;

}




'JAVA' 카테고리의 다른 글

[JAVA] jndi2  (0) 2017.11.28
[JAVA] javaee 오류  (0) 2017.11.27
[JAVA] IE11 첨부파일 한글깨짐  (0) 2017.11.27
[JAVA]https 로 변경  (0) 2017.11.27
[JAVA]html를 이미지로 변환  (2) 2017.11.24
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

IE11 첨부파일 한글깨짐



표준 프레임워크 센터에 IE11 첨부파일 한글깨짐이라는 질문을 올리고나서 답변온 내용을 적습니다. 


혹시나 많은 분들이 이런 상황을 겪을수도 있고 저도 개발시 참고하기위해서 메모를 합니다.




안녕하세요. 표준프레임워크센터입니다.


공통컴포넌트 경우 다운로드시 브라우저에 대한 User-Agent를 확인해서 한글이 깨지지 않도록 변환을 해 주고 있습니다.


IE11경우에는 User-Agent를 변경하여(기존 MSIE -> Trident)


egovframework.com.cmm.web.EgovFileDownloadController 클래스에 해당 변경사항을 반영해 주시면 됩니다.


(공통컴포넌트가 아닌경우에는 공통컴포넌트의 EgovFileDownloadController 클래스를 참고하여 해당 내용을 추가하여 작성해 주시기 바랍니다.)


getBrowser 메소드 (브라우저 구분 얻기)


} else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지입니다.

return "Trident";



setDisposition 메소드 (Disposition 지정하기)

} else if (browser.equals("Trident")) {  // IE11 문자열 깨짐 방지입니다.

encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");



private String getBrowser(HttpServletRequest request){


String header = request.getHeader("User-Agent");

if (header.indexOf("MSIE") > -1) {

return "MSIE";

} else if (header.indexOf("Chrome") > -1) {

return "Chrome";

} else if (header.indexOf("Opera") > -1) {

return "Opera";

}

return "Firefix";

}




'JAVA' 카테고리의 다른 글

[JAVA] javaee 오류  (0) 2017.11.27
[JAVA]ip 추려서 true/false return  (0) 2017.11.27
[JAVA]https 로 변경  (0) 2017.11.27
[JAVA]html를 이미지로 변환  (2) 2017.11.24
[JAVA]HASHMAP 돌리기(SORT)  (0) 2017.11.24
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA]https 로 변경

JAVA 2017. 11. 27. 10:42

https 로 변경



import java.net.URL;

import javax.servlet.http.HttpServletRequest;



public class SslUtil{


public SslUtil(){


}


public static String toSslUrl(HttpServletRequest request, String uri) throws Exception{


URL url = new URL(request.getRequestURL().toString());


String httpsServerUrl = (new StringBuilder("https://")).append(getHostStr(request, uri)).toString();


return recompositeUrl(request, httpsServerUrl, uri);

}


public static String toHttpUrl(HttpServletRequest request, String uri) throws Exception{


URL url = new URL(request.getRequestURL().toString());


String httpServerUrl = (new StringBuilder("http://")).append(getHostStr(request, uri)).toString();


return recompositeUrl(request, httpServerUrl, uri);

}


private static String getHostStr(HttpServletRequest request, String uri) throws Exception {


URL url = new URL(request.getRequestURL().toString());


return (new StringBuilder(String.valueOf(url.getHost()))).append(url.getPort() == 80 || url.getPort() == 443 ? "" : (new StringBuilder(":")).append(url.getPort()).toString()).toString();

}


private static String recompositeUrl(HttpServletRequest request, String serverUrl, String uri){


if(uri.length() > 0 && uri.charAt(0) == '/'){

return (new StringBuilder(String.valueOf(serverUrl))).append(uri).toString();

}else{

String currPath = ((new StringBuilder(String.valueOf(serverUrl))).append(request.getServletPath()).toString();


currPath = currPath.substring(0, currPath.lastIndexOf("/"));


return (new StringBuilder(String.valueOf(currPath))).append('/').append(uri).toString();

}

}


private static final int DEFAULT_SSL_PORT = 443;

}

'JAVA' 카테고리의 다른 글

[JAVA]ip 추려서 true/false return  (0) 2017.11.27
[JAVA] IE11 첨부파일 한글깨짐  (0) 2017.11.27
[JAVA]html를 이미지로 변환  (2) 2017.11.24
[JAVA]HASHMAP 돌리기(SORT)  (0) 2017.11.24
[JAVA]getBean Test Main  (0) 2017.11.24
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

html를 이미지로 변환


HTML 화면을 이미지로 변환.


HTML 파일을 이미지 파일로 변환 하는 것이 아니라, HTML를 웹브라우저로 열었을 떄 뜨는 화면을 이미지로 변환 하는 것 입니다.


이때 이 HTML 문서는 css 속성이 따로 파일로 존재하면 안되고, 순수 HTML에 모든 속성이 다 적용이 되어야 합니다.

그래야 원하는 HTML 화면을 이미지로 변환해서 볼 수 있습니다.





import java.awt.*;

import java.awt.image.*;

import java.io.*;

import java.net.*;

import javax.imageio.*;

import javax.swing.*;

import javax.swing.text.*;

import javax.swing.text.html.*;


public abstract class Test{


@SuppressWarnings("serial")

static class Kit extends HTMLEditorKit{

public Document createDefaultDocument() {

HTMLDocument doc = (HTMLDocument) super.createDefaultDocument();

doc.setTokenThreshold(Integer.MAX_VALUE);

doc.setAsynchronousLoadPriority(-1);

return doc;

}

}


public static BufferedImage create(String src, int width, int height){

BufferedImage image = null;

JEditorPane pane = new JEditorPane();

Kit kit = new Kit();

pane.setEditorKit(kit);

pane.setEditable(false);

pane.setMargin(new Insets(0,20,0,20));

pane.setContentType("text/html; charset=UTF-8");


try{

pane.setPage(new URL(src));

// HTML 내용을 콘솔창 출력.

System.out.println(pane.getText());

image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics g = image.createGraphics();

Container c = new Container();

SwingUtilities.paintComponent(g, pane, c, 0, 0, width, height);

g.dispose();

}catch (Exception e) {

System.out.println(e);

}

return image;


}


public static void main(String[] args){

BufferedImage ire;

// 서버의 웹서버로 접근.

String url="http://localhost/print.jsp";

//String url="file:///D:\\print.html"; 서버의 파일을 부를 때.

// 저장될 이미지 위치와 이름

String path="D:\\tmp1.jpg";

// 이미지 크기.

ire = Test.create(url, 800, 800);


try{

ImageIO.write(ire, "PNG", new File(path));

}catch(IOException e){

e.printStackTrace();

}catch(IllegalArgumentException e){

e.printStackTrace();

}

}

}

'JAVA' 카테고리의 다른 글

[JAVA] IE11 첨부파일 한글깨짐  (0) 2017.11.27
[JAVA]https 로 변경  (0) 2017.11.27
[JAVA]HASHMAP 돌리기(SORT)  (0) 2017.11.24
[JAVA]getBean Test Main  (0) 2017.11.24
[JAVA]ftp util  (0) 2017.11.24
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA]HASHMAP 돌리기(SORT)

JAVA 2017. 11. 24. 15:37

HASHMAP 돌리기(SORT)



package main.java.com;


import java.util.ArrayList;

import java.util.Collections;

import java.util.Enumeration;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.TreeSet;

import java.util.Vector;


import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;



public class job{


private static Log logger = LogFactory.getLog(job.class);


public static void main(String[] args){

// TODO Auto-generated method stub

HashMap<String,String> hm = new HashMap<String, String>();


hm.put("01", "01String");

hm.put("02", "02String");

hm.put("03", "03String");

hm.put("04", "04String");

hm.put("05", "05String");

hm.put("06", "06String");


Iterator<String> iter = hm.keySet().iterator();

while(iter.hasNext()){

String cnt = iter.next();

logger.debug(hm.get(cnt));

}


// Sort hashtable.

Vector v = new Vector(hm.keySet());

Collections.sort(v);


for(Enumeration e = v.elements(); e.hasMoreElements();){

String key = (String)e.nextElement();

String val = (String)hm.get(key);

System.out.println("Key: " + key + " Val: " + val);

}


HashMap<Integer,VO> hm2 = new HashMap<Integer, VO>();

for(int i=0; i < 1000; i++){

VO v1 = new VO();

v1.setA1("a"+"_"+i);

v1.setA2("b"+"_"+i);

v1.setA3("c"+"_"+i);

hm2.put(i, v1);

}


logger.debug(hm2.get(100).getA1());

}

}


class VO{

private String a1 = "";

private String a2 = "";

private String a3 = "";


public String getA1(){

return this.a1;

}


public String getA2(){

return this.a2;

}


public String getA3(){

return this.a3;

}


public void setA1(String a1){

this.a1 = a1;

}



public void setA2(String a2){

this.a2 = a2;

}



public void setA3(String a3){

this.a3 = a3;

}

}

'JAVA' 카테고리의 다른 글

[JAVA]https 로 변경  (0) 2017.11.27
[JAVA]html를 이미지로 변환  (2) 2017.11.24
[JAVA]getBean Test Main  (0) 2017.11.24
[JAVA]ftp util  (0) 2017.11.24
[JAVA]filter에서 파라미터 받기  (1) 2017.11.23
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA]getBean Test Main

JAVA 2017. 11. 24. 13:27

getBean Test Main



public static void main(String[] args) throws Exception{

String tableName = "TOUR_DATA";

StringBuffer query = new StringBuffer();

query.append("SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE  FROM COLS "); 

query.append("\nWHERE TABLE_NAME = '").append(tableName).append("'");

query.append("\nORDER BY TABLE_NAME, COLUMN_ID");

System.out.println(query.toString());


ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/egovframework/spring/com/context-datasource.xml");

applicationContext.start();


BasicDataSource ds = applicationContext.getBean("dataSource-oracle", BasicDataSource.class); //dataSource-oracle-real_test

JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);

List<Map<String,Object>> columnList = jdbcTemplate.queryForList(query.toString());

System.out.println("\n\n");

CamelCaseTest.convertInsertCC(tableName, columnList);

System.out.println("\n\n");

CamelCaseTest.convertResultMapCC(columnList);

System.out.println("\n\n");

CamelCaseTest.convertUpdateCC(tableName, columnList);

System.out.println("\n\n");

CamelCaseTest.printSelect(tableName, columnList);

System.out.println("\n\n");

CamelCaseTest.printDelete(tableName);

}

'JAVA' 카테고리의 다른 글

[JAVA]html를 이미지로 변환  (2) 2017.11.24
[JAVA]HASHMAP 돌리기(SORT)  (0) 2017.11.24
[JAVA]ftp util  (0) 2017.11.24
[JAVA]filter에서 파라미터 받기  (1) 2017.11.23
[JAVA]Filter를 이용한 request 파라미터 변경 방법  (0) 2017.11.23
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA]ftp util

JAVA 2017. 11. 24. 13:16

ftp util


// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.

// Jad home page: http://www.kpdus.com/jad.html

// Decompiler options: packimports(3)

// Source File Name:   NetFTP.java


package kr.co.raysystem.util;


import com.oreilly.servlet.MultipartRequest;

import java.io.*;

import java.util.ArrayList;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import kr.co.raysystem.common.UniqueFileRenamePolicy;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPReply;


public class NetFTP

{


    public NetFTP()

    {

        FTP_ID = "tmax";

        FTP_PASS = "tmax";

        FTP_IP = new String();

    }


    public void XMLFileUPLoad(HttpServletRequest request, String fileName, String path, String FTPPath)

    {

        ArrayList list = new ArrayList();

        list.add("203.128.238.174");

        list.add("203.128.238.175");

        if(request.getLocalAddr() != null && request.getLocalAddr().equals("98.0.38.88")){

            FTP_IP = "98.0.38.89";

            FTP_PASS = "qhdks@89";

}else{

            FTP_IP = "98.0.38.88";

            FTP_PASS = "qhdks@88";

        }

        execute(FTP_IP, FTP_ID, FTP_PASS, fileName, path, FTPPath, true);

        //for(int i = 0; i < list.size(); i++)

        //    execute(list.get(i).toString(), FTP_ID, FTP_PASS, fileName, path, FTPPath, true);


    }


    public MultipartRequest fileUpload(HttpServletRequest request, String path, String FTPPath)

    {

        int sizeLimit = 0x7a1aca00;

        if(request.getLocalAddr() != null && request.getLocalAddr().equals("98.0.38.88")){

            FTP_IP = "98.0.38.89";

            FTP_PASS = "qhdks@89";

}else{

            FTP_IP = "98.0.38.88";

            FTP_PASS = "qhdks@88";

        }

        MultipartRequest multi = null;

        Enumeration formNames = null;

        String formName = null;

        String Cfile[] = (String[])null;

        try

        {

            UniqueFileRenamePolicy dfrp = new UniqueFileRenamePolicy();

            multi = new MultipartRequest(request, path, sizeLimit, "euc-kr", dfrp);

            ArrayList newFile = new ArrayList();

            for(formNames = multi.getFileNames(); formNames.hasMoreElements();)

            {

                formName = (String)formNames.nextElement();

                newFile.add(multi.getFilesystemName(formName));

                File file = multi.getFile(formName);

                HttpSession session = request.getSession(true);

                if(file != null)

                    session.setAttribute("RAY_FILESIZE", String.valueOf(file.length()));

            }


            Cfile = new String[newFile.size()];

            for(int i = 0; i < newFile.size(); i++)

                if(newFile.get(i) == null)

                {

                    Cfile[i] = "";

                } else

                {

                    Cfile[i] = (String)newFile.get(i);

                    execute(FTP_IP, FTP_ID, FTP_PASS, Cfile[i], path, FTPPath, true);

                }


        }

        catch(IOException e)

        {

            System.out.println(e.toString());

            e.printStackTrace();

        }

        return multi;

    }


    public void delete(HttpServletRequest request, String path, String FTPPath)

    {

        if(request.getLocalAddr() != null && request.getLocalAddr().equals("98.0.38.88")){

            FTP_IP = "98.0.38.89";

            FTP_PASS = "qhdks@89";

}else{

            FTP_IP = "98.0.38.88";

            FTP_PASS = "qhdks@88";

        }

        File file = new File(path);

        if(file.exists())

            file.delete();

        execute(FTP_IP, FTP_ID, FTP_PASS, null, path, FTPPath, false);

    }


    public void execute(String rmoteServerIP, String id, String pass, String filename, String path, String FTPPath, boolean flag)

    {

        FTPClient ftpClient = null;

        try

        {

            ftpClient = new FTPClient();

            ftpClient.setControlEncoding("euc-kr");

            System.out.println("rmoteServerIP:["+rmoteServerIP+"]");

            ftpClient.connect(rmoteServerIP);

            int reply = ftpClient.getReplyCode();

            if(!FTPReply.isPositiveCompletion(reply))

            {

                ftpClient.disconnect();

            } else

            {

                ftpClient.setSoTimeout(10000);

                ftpClient.login(id, pass);

                ftpClient.setFileType(2);

                ftpClient.setFileTransferMode(10);

                if(flag)

                {

                    boolean result = false;

                    InputStream inputStream = null;

                    java.io.OutputStream outputStream = null;

                    File put_file = new File(path + File.separator + filename);

                    inputStream = new FileInputStream(put_file);

                    ftpClient.makeDirectory(FTPPath);

                    ftpClient.changeWorkingDirectory(FTPPath);

                    result = ftpClient.storeFile(put_file.getName(), inputStream);

                    inputStream.close();

                    if(result)

                        System.out.println("put successful");

                    else

                        System.out.println("put failure!");

                } else

                {

                    ftpClient.deleteFile(FTPPath);

                }

                System.out.println(path + File.separator + filename);

                System.out.println("FTP \uD30C\uC77C\uACBD\uB85C " + FTPPath);

                ftpClient.logout();

            }

        }

        catch(Exception e)

        {

            System.out.println(e);

            e.printStackTrace();

        }

        if(ftpClient != null && ftpClient.isConnected())

            try

            {

                ftpClient.disconnect();

            }

            catch(IOException ioe)

            {

                ioe.printStackTrace();

            }

    }


    private String FTP_ID;

    private String FTP_PASS;

    private String FTP_IP;

}

블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

filter에서 파라미터 받기



web.xml의 <web-app>안에 추가해야할 문장입니다.


<filter>

<filter-name>timer</filter-name>

<filter-class>com.filter.TimerFilter</filter-class>

</filter>


<filter-mapping>

<filter-name>timer</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>




TimeFilter.java


package com.filter;


import java.io.IOException;


import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;


import javax.servlet.http.HttpServletRequest;



public class TimerFilter implements Filter {


private FilterConfig config;


@Override


public void destroy(){


}


@Override

public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {


//req 필터


long begin= System.currentTimeMillis();       // 요청받았을 때의 시간 찍힘.


// 다음 필터 또는 필터의 마지막이면 jsp나 servlet 실행.


chain.doFilter(req, resp);


//resp 필터

long end=System.currentTimeMillis();    // 응답할 때의 시간 찍힘.


String uri;


if(req instanceof HttpServletRequest){


HttpServletRequest request=(HttpServletRequest)req;  // ServletRequest에는 uri가 없으므로 다운캐스팅함.


uri=request.getRequestURI();


    String msg=uri=uri+":"+(end-begin)+" ms";


    config.getServletContext().log(msg);  //getServletContext()의 log메소드를 이용한 콘솔창 출력. 


//system.out.print 가 아닌 log를 이용하여 확인.


 

}


}


@Override


public void init(FilterConfig config)throws ServletException {

this.config = config;

}

}


// web.xml로 인하여 클라이언트의 모든 요청이 이곳의 TimerFilter클래스로 진입하여 doFilter()를 실행합니다.

// req 필터(요청된거 먼저) 이곳의 진입 시간을 찍고(long begin= System.currentTimeMillis();) 

//  chain.doFilter(req, resp); => 다음 필터실행, 실행할 필터가 없으면 jsp나 servlet실행하라는 명령입니다.

//  resp 필터(응답 나중 )실행 long end=System.currentTimeMillis(); 실행합니다.




web.xml의 <web-app>안에 추가해야할 문장



<filter>


<filter-name>CharacterEncoding</filter-name>


   <filter-class>com.filter.CharacterEncodingFilter</filter-class>


   <init-param>


       <param-name>charset</param-name> <!-- 해당경로에서만 사용할 수 있는 속성을 미리 정의함 (charset이라는 key로 utf-8이라는 값으로 정의함)


       <param-value>utf-8</param-value>


    </init-param>


</filter>


<filter-mapping>


<filter-name>CharacterEncoding</filter-name>


<url-pattern>/*</url-pattern>


</filter-mapping>




CharacterEncodingFilter.java


package com.filter;


import java.io.IOException;


import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;



public class CharacterEncodingFilter implements Filter{


private String charset;


@Override


public void destroy() {


}


@Override


public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {


// req 필터.


req.setCharacterEncoding(charset);


chain.doFilter(req, resp);


//resp 필터(없음).

}


@Override


public void init(FilterConfig config) throws ServletException {


charset=config.getInitParameter("charset"); //web.xml의 param을 통해 보낸 인자값을 getInitParameter을 통해서 받습니다.


if(charset == null || charset.lenght() == 0)


charset="utf-8";

}

}


// TimerFilter가 먼저 실행 : web.xml에서 먼저 작성되있기 때문입니다.




web.xml의 <web-app>안에 추가해야할 문장

<filter>


<filter-name>login</filter-name>


<filter-class>com.filter.LoginFilter</filter-class>


</filter>


<filter-mapping>


<filter-name>login</filter-name>


<url-pattern>/*</url-pattern>


</filter-mapping>




LoginFilter.java


package com.filter;


import java.io.IOException;


import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.RequestDispatcher;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;


import javax.servlet.http.HttpServletRequest;


import javax.servlet.http.HttpSession;



public class LoginFilter implements Filter {


@Override


public void destroy() {


}


@Override


public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {


if(req instanceof HttpServletRequest){

HttpServletRequest request = (HttpServletRequest)req;


HttpSession session=request.getSession();


String uri=request.getRequestURI();


boolean flag = false;


String[] u={


"/sbbs/created.kp","/sbbs/created_ok.kp" // 어떤 페이지를 로그인 해야만 접근할 수 있는지를 명시합니다.


};


for(String s:u){

if(uri.indexOf(s) != -1){

flag = true;


break;

}

}


if(session != null && flag){

// login에서 member라는 이름으로 로그인 정보를 저장한 경우입니다.

if(session.getAttribute("member") == null){


String p="/WEB-INF/views/member/login.jsp";  // 로그인 페이지의 경로를 적어줍니다.


RequestDispatcher rd = req.getRequestDispatcher(p);


rd.forward(req, resp);


return;

}

}


}


chain.doFilter(req, resp);

}


@Override


public void init(FilterConfig config) throws ServletException {


}


}


Filter의 실행 구조


implemente filter를 한 후에 destroy(), doFilter(ServletRequest req, ServletResponse resp,FilterChain chain),  init(FilterConfig config) 3개의 메소드를 재정의해줍니다.


web.xml을 통하여 web.xml에 가장 먼저 작성된 순서로 명시된 Filter의 클래스로 돌아오게 되면 doFilter메소드를 실행합니다.


doFilter의 req명령을 실행하다가 중간에 chain.doFliter(req.resp); 만나게 되면 web.xml에 명시된 다음 Filter로 넘어갑니다. 만약 다음에 실행할 filter가 없으면 jsp나 servlet과 같은 클라이언트의 직접적인 요청을 처리하고 가장 나중에 실행된 filter부터 반대순으로 chain.doFilter(req,resp); 다음의 명령들을 실행하고 실행이 모두 끝나면 계속 반대순으로 처음에 시작했던 filter의 resp필터요청까지 끝냅니다.

블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,