반응형
반응형

 

public class Chatting {

	public static void main(String[] args) {
		String name = args[0];
		
		System.out.println(name + "님 어서오세요");
	}
}

file - export - Runnable JAR file

프로젝트 설정과 디렉토리 설정을 합니다.

실행 방법

java -jar jar파일명 파라미터[args[0]] .....

반응형
반응형

pom.xml

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

 

servlet-context.xml

<beans:bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <beans:property name="maxUploadSize" value="5242880000" />
    <beans:property name="maxInMemorySize"
        value="100000000" />
</beans:bean>

 

multipart.java

@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
public void upload(HttpServletRequest request, HttpServletResponse response) 
        throws IllegalStateException, IOException {

    MultipartFile multipartFile = null;

    String originalFileName = null; // 원본 파일 명
    String originalFileExtension = null; // 파일 확장자
    String storedFileName = null; // 저장될 파일 명


    // 파일을 받는 페이지 필요
    MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;

    // 반복자로 파일 이름을 담는다.
    Iterator<String> iterator = multipartHttpServletRequest.getFileNames();

    String uploadPath = "D:\\"; // 예) "D:\\

    // resource/egovframework/spring/context-properties.xml 에 파일업로드 경로 설정
    File file = new File(uploadPath);

    while (iterator.hasNext()) {
        multipartFile = multipartHttpServletRequest.getFile(iterator.next());

        if (multipartFile.isEmpty() == false) {

            originalFileName = multipartFile.getOriginalFilename();
            originalFileName = new String(originalFileName.getBytes("ISO-8859-1"), "UTF-8"); // 한글 깨짐 때문에 씀
            originalFileExtension = originalFileName.substring(originalFileName.lastIndexOf(".")); // .jpg
            storedFileName = UUID.randomUUID().toString() + originalFileExtension;

            file = new File(uploadPath + storedFileName);
            multipartFile.transferTo(file);

            System.out.println("originalFileName : " + originalFileName);
            System.out.println("storedFileName : " + storedFileName);
            System.out.println("type : " + multipartFile.getName());
            System.out.println("filename : " + multipartFile.getOriginalFilename());
            System.out.println("size : " + multipartFile.getSize());

        }
    }
}

 

multipart.js

$(function() {
	$("#sending").on("click", function() {
		sendImage();
	})
});

function sendImage(){

	var fileId = document.getElementById("file_input");
	var file = fileId.files[0];
	
	var formdata = new FormData();
	
	// formdata에 보낼 이미지 정보 담기 (키:값)
	formdata.append("file", file);
	console.log(formdata);

	
	$.ajax({
		type: "POST",
		url: "upload.do",
		data: formdata,
		processData: false, // 데이터를 컨텐트 타입에 맞게 변환 여부 (false 필수)
		contentType: false, // 요청 컨텐트 타입 (false 필수)
		success: function(data) {
			alert("파일이 전송 되었습니다.");
		},
		error: function(data) {
			alert("파일 전송에 실패했습니다.");
		}
	});
	
}

 

multipart.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<h1>
	Hello world!  
</h1>

	<input type='file' id='file_input'>
	<button id='sending'> 보내기 </button>
<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

 

반응형
반응형
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.4.0</version>
</dependency>

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.4.0</version>
</dependency>
@RequestMapping(value = "/qr.do", method = RequestMethod.GET)
public @ResponseBody void client(HttpServletRequest request, HttpServletResponse response, 
	HttpSession session) throws IllegalStateException, IOException, WriterException {

    /** 문제 내기 **/
    int randomCode = (int) (Math.random() * 100) + 1;
    String randomCodeStr = String.valueOf(randomCode);

    String strData = new String(randomCodeStr.getBytes("UTF8"), "ISO-8859-1");

    /** qr 생성 **/
    QRCodeWriter qrCodeWriter = new QRCodeWriter();
    BitMatrix bitMatrix = qrCodeWriter.encode(strData, BarcodeFormat.QR_CODE, 512, 512); // 200,200은 width,
                                                                                            // height
    MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF2e4e96, 0xFFFFFFFF);
    BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);

    /** 생성 qr을 화면에 노출 **/
    response.setContentType("image/png");
    OutputStream out = response.getOutputStream();

    ImageIO.write(bufferedImage, "png", out);

}
반응형
반응형

 

public String getRandomImage(HttpSession session) {

	filePath = "image\\rock_paper_scissor\\rock.JPG";
	URL resource = getClass().getClassLoader().getResource(filePath);
	filePath = resource.getFile();
    
	return filePath;
}

자바에서 파일 경로 불러올 때 경로는 webapp안에 있는 resources가 아닙니다.

 

 

<img src="/resources/image/captcha/rock_paper_scissor/scissor.JPG"/>

JSP 파일 경로를 불러올 때 경로는 webapp 안에 있는 resources입니다.

 

 

반응형
반응형

 

// File file = new File(fileImagePath); // 리사이즈할 파일 정보

public BufferedImage resize(File file, int width, int height) throws IOException {

    /** 이미지 가져오기 **/
    InputStream inputStream = new FileInputStream(file);

    /** 받은 이미지 읽기 **/
    BufferedImage inputImage = ImageIO.read(inputStream);

    /** 리사이징 **/
    BufferedImage outputImage = new BufferedImage(width, height, inputImage.getType());

    Graphics2D graphics2D = outputImage.createGraphics();
    graphics2D.drawImage(inputImage, 0, 0, width, height, null); // 그리기
    graphics2D.dispose(); // 자원해제

    return outputImage;

}

리사이징

 

public void drawBlackBox(BufferedImage blackBoxImage, int blackBoxWidth, int blackBoxHeight, HttpSession session) {

    int cutXPoint = 10; // 왼쪽 상단 X좌표
    int cutYPoint = 10; // 왼쪽 상단 Y좌표

    /** 도형 그리기 **/
    Graphics graphics = blackBoxImage.getGraphics();
    graphics.setColor(Color.BLACK); // 색상 설정
    graphics.fillRect(cutXPoint, cutYPoint, blackBoxWidth, blackBoxHeight); // 채우기 사각형
    // graphics.drawRect(cutXPoint, cutYPoint, blackBoxWidth, blackBoxHeight); // 테두리 사각형
   
    // graphics.fillOval(xPoint, yPoint, ovalWidth, ovalHeight); // 채우기 원
    // graphics.drawOval(xPoint, yPoint, ovalWidth, ovalHeight); // 테두리 원
    graphics.dispose();
}

도형 그리기

 

public BufferedImage getWhitePaper(StringImageVO customImage) {

    // 종이 크기 설정
    int width = customImage.getImageWidth();
    int height = customImage.getImageHeight();

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
	
    // 예시
    // BufferedImage mergedImage = new BufferedImage(550, 100, BufferedImage.TYPE_INT_RGB);

    return image;
}

하얀 배경 그리기

public void draw(BufferedImage image, String question) {

    Color color = new Color(255, 0, 0); // 글자 색
    Font font = new Font("TimeRoman", Font.PLAIN, 35); // 이미지 글체
    
    // 글자 이미지가 생성될 위치 선정
    int left = 240;
    int top = 300;

    // Graphics2D 와 BufferedImage는 연동 된 느낌?
    Graphics2D graphics = image.createGraphics();

    // 글자색과 글자체 설정
    graphics.setColor(color);
    graphics.setFont(font);

    // 해당 내용으로 그리기 작업
    graphics.drawString(question, left, top);
    graphics.dispose();

}

글자 그리기

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

    /** 화면 준비 **/
    OutputStream out = response.getOutputStream();

    /** 준비된 이미지 **/
    BufferedImage img = new BufferedImage(550, 100, BufferedImage.TYPE_INT_RGB);

    /** 화면에 뿌리기 **/
    response.setContentType("image/png");
    ImageIO.write(img, "png", out);
}

화면에 노출시키기

 

BufferedImage cutImage = resizedImage.getSubimage(cutXPoint, cutYPoint, cutWidth, cutHeight); // 잘린 이미지

이미지 자르기

 

반응형
반응형
public String checkReferer(HttpServletRequest request, HttpServletResponse response) {

    String referer = request.getHeader("Referer");

    if (referer.equals(rightReferer)) return "올바른 접근";
    else return "올바르지 않은 접근";

}

HTTP 리퍼러(HTTP referer)는 웹 브라우저로 월드 와이드 웹을 서핑할 때, 하이퍼링크를 통해서 

각각의 사이트로 방문시 남는 흔적을 말한다.

예를 들어 A라는 웹 페이지에 B 사이트로 이동하는 하이퍼링크가 존재한다고 하자. 

이때 웹 사이트 이용자가 이 하이퍼링크를 클릭하게 되면 웹 브라우저에서 B 사이트로 참조 주소(리퍼러)를 전송하게 된다. 

B 사이트의 관리자는 이 전송된 리퍼러를 보고 방문객이 A 사이트를 통해 자신의 사이트에 방문한 사실을 알 수 있다.

웹 사이트의 서버 관리자가 사이트 방문객이 어떤 경로로 자신의 사이트에 방문했는지 알아볼 때 유용하게 사용된다.

하지만, 리퍼러는 조작또한 가능하기 때문에 리퍼러 정보를 사용할 때에는 보안에 항상 주의해야 한다

반응형
반응형
$("#userAnswer").keydown(function(key) {
	if (key.keyCode == 13) {
		// 동작할 내용
	}
});
반응형
반응형
$(document).ready(function() {
	links = ["A", "B", "C"];
	shuffle(captchaLinks);

	console.log(links);
});

function shuffle(array) {
	array.sort(() => Math.random() - 0.5);
}

 

반응형
반응형

로깅(Logging)

  정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동.

 

System.out.print()

  하지만 이는 프로그램의 성능을 떨어트리고 로그를 파일에 저장하는 것이 불가능


java.util.logging

  외부 라이브러리 사용 없이 로깅이 가능

  다른 라이브러리와 비교했을 때 퍼포먼스 (속도) 가 느리다.

  나만의 custom 레벨을 만들면 메모리 누수가 일어난다.
  타 라이브러리에 비해 기능이 부족하다.

 

log4j

  log4j는 가장 오래된 로깅 프레임워크로써 Apache의 Java기반 로깅 프레임 워크이다.

  콘솔 및 파일 출력의 형태로 로깅을 도와주며 xml, properties로 환경을 구성할 수 있다.

  현재는 2015년 기준으로 개발이 중단되었다.

  퍼포먼스가 최적화되어있다.

  log4j2 가장 최신에 나온 로깅 프레임워크로써 Apache의 log4j의 다음 버전

 

 

SLF4J

  SLF4J(Simple Logging Facade for Java)는 이름에서 확인할 수 있듯이.

  java.util.logging, logback 및 log4j와 같은 다양한 로깅 프레임 워크에 대한 추상화(인터페이스) 역할을 하는 라이브러리

  즉 DI할 수 있게 있는 상위 인터페이스

  (slf4j를 사용하여 설정에 따라 다른 로깅 라이브러리를 사용할 수 있게 된다.)

  (slf4j 사용 후 Implementation은 logback이나 log4j2를 사용)

 

참고자료 : https://www.fwantastic.com/2019/12/javautillogging-vs-log4j-vs-slf4j.html

반응형