반응형
반응형
public static void main(String[] args) {

    String document = "삼성전자 LG전자 화웨이 소니 애플 삼성전자(우) 삼성화재";
    String word = "삼성";

    System.out.println(findIndexes(word, document));

}

public static List<Integer> findIndexes(String word, String document) {

    List<Integer> indexList = new ArrayList<Integer> ();
    int index = document.indexOf(word);

    while(index != -1) {
        indexList.add(index);
        index = document.indexOf(word, index+word.length());
    }

    return indexList;
}

// 출처 : https://needneo.tistory.com/96

 

반응형
반응형
public class LocationDistance {

	public static void main(String[] args) {

		// 마일(Mile) 단위
		double distanceMile = 
			distance(37.504198, 127.047967, 37.501025, 127.037701, "");
		
		// 미터(Meter) 단위
		double distanceMeter = 
			distance(37.49268,126.78442,37.59084,126.78918, "meter");
		
		// 킬로미터(KiloMeter) 단위
		double distanceKiloMeter = 
			distance(37.49268,126.78442,37.59084,126.78918, "kilometer");
		
		System.out.println(distanceMile) ;
		System.out.println(distanceMeter) ;
		System.out.println(distanceKiloMeter) ;
		
	}
	
	
	/**
	 * 두 지점간의 거리 계산
	 * 
	 * @param shoptLat 지점 1 위도
	 * @param shopLngt 지점 1 경도 
	 * @param userLat 지점 2 위도
	 * @param lon2 지점 2 경도
	 * @param unit 거리 표출단위 
	 * @return
	 */
	
	
	private static double distance(double shoptLat, double shopLngt, double userLat, double lon2, String unit) {
		
		double theta = shopLngt - lon2;
		double dist = Math.sin(deg2rad(shoptLat)) * Math.sin(deg2rad(userLat)) 
				+ Math.cos(deg2rad(shoptLat)) * Math.cos(deg2rad(userLat)) * Math.cos(deg2rad(theta));
		
		dist = Math.acos(dist);
		dist = rad2deg(dist);
		dist = dist * 60 * 1.1515;
		
		if (unit == "kilometer") {
			dist = dist * 1.609344;
		} else if(unit == "meter"){
			dist = dist * 1609.344;
		} 

		return (dist);
	}
	

	// This function converts decimal degrees to radians
	private static double deg2rad(double deg) {
		return (deg * Math.PI / 180.0);
	}
	
	// This function converts radians to decimal degrees
	private static double rad2deg(double rad) {
		return (rad * 180 / Math.PI);
	}
}

 

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=akdlakdrn&logNo=221717580886 

반응형
반응형

 

 

📝 Controller

package com.lsj.spring_study;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * Handles requests for the application home page.
 */
@Controller
public class PdfController {
	
	/**
	 * @why : 자바로 pdf 파일 생성
	 */
	@RequestMapping(value = "pdf", method = RequestMethod.PUT)
	public void makePdfFile() throws DocumentException, IOException {
		

		String filePath = "C://test.pdf";
		String contents = "자바로 pdf 파일 생성";
		
	    Document document = new Document();
	    PdfWriter.getInstance(document, new FileOutputStream(filePath));

	    document.open();
	    
	    /** 표 그리기 **/ 
//	     PdfPTable table = new PdfPTable(4); 
//	     for(int i = 0; i < 16; i++){
//	      	table.addCell("cellNumber:" + i); 
//	    }

	    /** 글자 넣기 (WEB-INF/classes/font에 폰트를 넣어주세요 (참고 : 한글이 안 나오는 글씨체도 있음) **/ 
	    // C:\Windows\Fonts\휴먼매직체 보통(HMKMMAG.TFF 파일 사용)
	    BaseFont bfKorean = BaseFont.createFont("font/HMKMMAG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
	    
	    Font FontKorean = new Font(bfKorean, 10, Font.NORMAL);
	    document.add(new Paragraph(contents, FontKorean));
	    document.close();
		
	}
	
	/**
	 * @why : pdf 파일 다운로드
	 */
    @RequestMapping(value = "/download/pdf", method = RequestMethod.GET)
    public void downloadPdf(HttpServletResponse response) throws IOException {
    	
    	FileInputStream fis = null;
    	BufferedOutputStream bos = null;
    	
    	String pdfFileName = "C:/test.pdf";
    	
    	try {

    		/** Pdf Open **/
	    	File pdfFile = new File(pdfFileName);
	    	fis = new FileInputStream(pdfFile);

	    	/** Header 설정 (Download) **/
	    	response.addHeader("Content-Disposition", "attachment; filename=" + pdfFile.getName() + ".pdf");
	    	
	    	/** Pdf 내용을 Read [버퍼에 담기] **/
	    	int size = fis.available(); 
	    	byte[] buf = new byte[size]; 
	    	int readCount = fis.read(buf);
	    	
	    	/** 버퍼에 담은 내용 웹에 출력 **/
	    	response.flushBuffer();

	    	bos = new BufferedOutputStream(response.getOutputStream());
	    	bos.write(buf, 0, readCount);
	    	bos.flush();
	
    	} catch(Exception e) {

    		e.printStackTrace();

    	} finally {

	    	if (fis != null) fis.close();
	    	if (bos != null) bos.close();

    	}
    }


	/**
	 * @why : pdf 파일 웹에 띄우기
	 */
    @RequestMapping(value = "pdf", method = RequestMethod.GET)
    public void readPdf(HttpServletResponse response) throws IOException {
    	
    	FileInputStream fis = null;
    	BufferedOutputStream bos = null;
    	
    	String pdfFileName = "C:/test.pdf";
    	
    	try {

    		/** Pdf Open **/
	    	File pdfFile = new File(pdfFileName);
	    	fis = new FileInputStream(pdfFile);

	    	/** Content Type 설정 **/
	    	response.setContentType("application/pdf");

	    	/** Pdf 내용을 Read [버퍼에 담기] **/
	    	int size = fis.available(); 
	    	byte[] buf = new byte[size]; 
	    	int readCount = fis.read(buf);
	    	
	    	/** 버퍼에 담은 내용 웹에 출력 **/
	    	response.flushBuffer();

	    	bos = new BufferedOutputStream(response.getOutputStream());
	    	bos.write(buf, 0, readCount);
	    	bos.flush();
	
    	} catch(Exception e) {

    		e.printStackTrace();

    	} finally {

	    	if (fis != null) fis.close();
	    	if (bos != null) bos.close();

    	}
    }
    
    
	/**
	 * @why : pdf 파일 웹에 띄우기
	 */
    @RequestMapping(value = "board", method = RequestMethod.GET)
    public String pdf() {
    	
    	return "board";
    }
}

 

 

📝 Maven

<!-- make pdf lib -->
<dependencies>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.4.2</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>5.5.7</version>
</dependency>

 

📝 View

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>

<body>
<h1> 웹화면에 PDF 출력해보기 </h1>
<embed src="/pdf" type="application/pdf" width=1500px height=1500px/>
</body>
</html>

 

 

📝 출력 화면

 

🔗 참고 및 출처

https://blog.naver.com/onandme/220529022550

https://lee-mandu.tistory.com/87

반응형
반응형
    File file = new File("D:\\contents.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

    String line = null;

    while (true) {
        if ((line = br.readLine()) != null) content += line + "\n";
        else break;
    }

    br.close();

파일 읽기

 

OutputStream output = new FileOutputStream("D://filePathList.txt");
byte[] contentByte = allPath.getBytes();
output.write(contentByte);

output.close();

파일 쓰기

 

 

반응형
반응형
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>com.jsp.study.Filter</filter-class>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

xml에서 설정하는 방법입니다.

package com.jsp.study;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter("/*") // 모든 url 호출에 대해서 이 필터를 거친다.
public class Filter implements javax.servlet.Filter {



	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {

		response.setCharacterEncoding("UTF-8");			// 서블릿에서 직접 브라우저에 출력해줄 경우 쓴다 (out.print를 사용할 시)
		response.setContentType("text/html; charset=UTF-8");	// HTML이 UTF-8 형식이라는 것을 브라우저에게 전달한다.
		request.setCharacterEncoding("UTF-8");			// 파라미터에 해당하는 값을 UTF-8로 보내준다는 의미 (해당 로직에 POST 방식으로 데이터 보낼시)

		 System.out.println("before filter");
		 chain.doFilter(request, response); // 중간에 다른 Filter로 전이 시킬 수 있다.
		 System.out.println("after filter");
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// 서블릿 컨테이너가 필터를 초기화 시킨다.
		
	}

	@Override
	public void destroy() {
		// 인스턴스를 소멸하기 전에 호출하는 메소드
	}


}

annotation을 이용한 방법입니다.

 

- 동작 방식

init으로 서블릿 컨테이너가 필터를 초기화시킵니다. 그 후 doFilter로 원하는 행위를 진행 시킨 후에 ServletRequest(Controller)에 전달합니다. 처리 후 destory를 실행시킵니다. 만약 종료하기 전에 해주고 싶은 행위가 있으면 destory를 실행하면 됩니다.

 

반응형
반응형

톰캣만 가지고 진행하도록 하겠습니다.

 

📝톰캣으로 페이지 띄우기

 

톰캣 경로 : C:\tomcat9

경로 : C:\tomcat9\conf\server.xml

 

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="it" docBase="C:\tomcat9\webapps\ITWeb" privileged="true"/>
....

 

 

페이지에 띄울 텍스트파일 경로 : C:\tomcat9\webapps\ITWeb\nana.txt

nana.txt 내용 : 안녕하세요

페이지 호출 URL : http://localhost:8080/it/nana.txt

 

📝클래스파일 만들기

 

test.java 내용 :

 

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;


public class test extends HttpServlet {
	public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
		System.out.println("hello Servlet");
    }
}

 

cmd 후 test.java 있는 경로로 이동 (c드라이브에서는 안 되고 c드라이브 하위디렉토리가 있어야함)

javac -cp C:\tomcat9\lib\servlet-api.jar test.java

 

WEB-INF안에 있는 파일은 직접 요청이 불가능하다.

 

 

📝web.xml로 URL 호출 매핑 만들기

 

 

WEB-INF 호출하기 위한 설정 파일 경로 : C:\tomcat9\webapps\ROOT\WEB-INF\web.xml

실행시킬 class파일 : C:\tomcat9\webapps\ROOT\WEB-INF\classes\test.class

 

 

<servlet>
	<servlet-name>testing</servlet-name>
	<servlet-class>test</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>testing</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

 

 

hello라는 url 요청이 오면 testing이라는 서블릿의 이름을 가진 애를 실행시켜라

testing이라는 이름을 가지는 서블릿의 클래스파일은 test이다

 

 

이렇게 매핑정보를 xml으로 할수도 있지만(2.x) annotation(3.x)으로도 사용 가능하다.

 

annotation 방식을 이용하고 싶을 경우 metadata-complete를 false로 바꿔줘야 web.xml 뿐만 아니라 annotation도 인식한다. (@WebServlet)

경로 : C:\tomcat9\webapps\ROOT\WEB-INF\web.xml

 

<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_4_0.xsd"
version="4.0"
metadata-complete="false">

 

 

반응형
반응형

 

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);

}
반응형