#

์ž๋ฐ”ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค์–ด์„œ jarํŒŒ์ผ๋กœ ๋ฐฐํฌํ•˜๊ณ  ์‹คํ–‰ํ• ๋–„ unable to access jarfile ์˜ค๋ฅ˜
- java -jar Test.jar ๋กœ ์‹คํ–‰
- ์ž๋ฐ”๋””์ปดํŒŒ์ผ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ runable jar์™€ ์ผ๋ฐ˜ jar ํŒŒ์ผ ๋น„๊ตํ•ด๋ณด๊ธฐ
JAR ์‹คํ–‰ ํ•œ ํ›„ cmd๋ฅผ ํ™”๋ฉด ์ˆจ๊ธฐ๊ธฐ
https://code.i-harness.com/ko-kr/q/409ef
start javaw
๊ฐ์‚ฌ๋ชจ๋“œ

# ํ†ฐ์บฃ ์„ค์น˜ ์—๋Ÿฌ

๋กœ์ปฌ ์ปดํ“จํ„ฐ์˜ apache tomcat 7.0 tomcat7์„ ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค
Apache Tomcat 8.0 Tomcat8 ์„œ๋น„์Šค๊ฐ€ ์„œ๋น„์Šค ํŠน์ • ์˜ค๋ฅ˜
์ž˜๋ชป๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
msvcr71์„ ํ•ด๋„ ์•ˆ๋จ ์•„๋งˆ๋„ 32๋น„ํŠธ ํ†ฐ์บฃ์„ 64๋น„ํŠธ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ๋œ๋“ฏ

# ์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ-๋‚˜๋งŒ์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋งŒ๋“ค๊ธฐ

1.๊ฐœ๋ฐœํ™˜๊ฒฝ ๋‹ค์šด๋กœ๋“œ  https://www.egovframe.go.kr/EgovDevEnvRelease_300.jsp?menu=3&submenu=2&leftsub=2#
2.์„ธ๋ฏธ๋‚˜ ๊ด€๋ จ ์ž๋ฃŒ  https://open.egovframe.org/oc/docs/pds.do
3.
smart sheet4(WBS์šฉ ์œ ๋ฃŒ )
4.ํ†ตํ•ฉIDE

# ์ž๋ฐ” UI๋กœ ์‚ญ์ œ๋ฒ„ํŠผ ๋งŒ๋“ค๋•Œ :No enclosing instance of type ... is accessible.

The method actionPerformed(ActionEvent) of type DeleteButton must override a superclass method
https://jamong-icetea.tistory.com/65

# JAD ์‚ฌ์šฉ๋ฐฉ๋ฒ•

#### jad ์‚ฌ์šฉ๋ฐฉ๋ฒ• https://javacpro.tistory.com/23

#### jad ๋‹ค์šด๋กœ๋“œ https://varaneckas.com/jad/

#### jar ๋กœ ๋ฌถ์ธํŒŒ์ผ ์ˆ˜์ •ํ•˜๊ธฐ
https://m.blog.naver.com/PostView.nhn?blogId=hero108&logNo=220425280196&proxyReferer=https%3A%2F%2Fwww.google.com%2F

jar -uvf test.jar ./ObjectCache.class
jar -uvf test.jar ./ObjectCache$ExtendedFieldInfo.class

jar -uvf0 test.jar ./ObjectCache.class
jar -uvf0 test.jar ./ObjectCache$ExtendedFieldInfo.class


jar cvf ac.jar -u C:\Test

jar cvf abc.jar -c C:\Users\Test

jar cvf abc.jar -C C:\Users\Test

jar xvf test.jar

jar cvfm abcd.jar META-INF/MANIFEST.MF -C foo/ .

https://priceless.tistory.com/203

1. ํ•ด๋‹น jarํŒŒ์ผ์ด ์žˆ๋Š” ๊ณณ์œผ๋กœ ๋„์Šค ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ด๋™

2.  jar -uvf "๊ธฐ์กด์˜ Jar๋ช…" ๊ต์ฒด๋  ํด๋ž˜์Šค

jar -uvf test-V2.1.jar /bin/com/itcomm/itsfw/core/ObjectCache.class

3. ์ด๋•Œ ํŒจํ‚ค์ง€๋‚ด์˜ ๊ต์ฒด๋  ํด๋ž˜์Šค์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ   ๊ต์ฒด๋  ํด๋ž˜์Šค ํŒŒ์ผ์€ ํ•ด๋‹น ๊ฒฝ๋กœ์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

jar -uvf test.jar
jar -uvf test.jar .\core\database\ObjectCache.class
jar -uvf test.jar ./core/ObjectCache.class
jar -uvf test.jar ./database/ObjectCache.class

jar ํŒŒ์ผ ์••์ถ•ํ•˜๊ธฐ ํ’€๊ธฐ ์˜ต์…˜ http://blog.naver.com/PostView.nhn?blogId=gwang39&logNo=221007458092
jar ํŒŒ์ผ์— ํŠน์ •ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ https://priceless.tistory.com/203

# JSP Setting

VMWare ์„ค์น˜
https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html

CentOS ์„ค์น˜
https://www.centos.org/download/


1.์ž๋ฐ”ํ”„๋กœ์ ํŠธ
-ํŒจํ‚ค์ง€๋งŒ๋“ค๊ธฐ
-syso ์œผ๋กœ ์ถœ๋ ฅ
-ํด๋ž˜์Šค๋งŒ๋“ค๊ณ  get,set  ๋งŒ๋“ฌ

https://dev.mysql.com/downloads/connector/j/

ํ†ฐ์บฃ์„ค์น˜ํด๋”\lib์— ์ €์žฅํ•ด์•ผ connectior/j์˜ ๊ฒฝ๋กœ๋ฅผ (์ดํด๋ฆฝ์Šค์˜) CLASSPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ

# JSP

1. ์›น์„œ๋ฒ„ ์ž‘๋™์›๋ฆฌ
-ํ†ฐ์บฃ ์ž๋ฐ”ํ™˜๊ฒฝ๋ณ€์ˆ˜์„ค์ •
-ํ†ฐ์บฃ์‹คํ–‰
-ํฌํŠธ์„ค๋ช…,conf/server.xml ์›น์„œ๋ฒ„ ํฌํŠธ 80์œผ๋กœ ๋ณ€๊ฒฝ
-web.xml index.html ์‹œ์ž‘ํŽ˜์ด์ง€์„ค์ •

C:\Temp\tomcat\conf
-server.xml > 8080 ํฌํŠธ 80์œผ๋กœ ๋ณ€๊ฒฝ
-web.xml > ์‹œ์ž‘ํŽ˜์ด์ง€๋ฅผ index2.html ๋ณ€๊ฒฝ


2. ์›น์‚ฌ์ดํŠธ๋งŒ๋“ค๊ธฐ
-์›นํ”„๋กœ์ ํŠธ์ƒ์„ฑ
-html <a> <hr>
-๋ฐฐํฌ๋ฐฉ๋ฒ• export> warํŒŒ์ผ๋กœ ๋งŒ๋“ค๊ธฐ
-ํ†ฐ์บฃ์—๋ฐฐํฌ ROOTํŒŒ์ผ๋กœ ๋ณ€๊ฒฝ

# API, SDK

http://skmagic.tistory.com/220

# tomcat manager

The page you tried to access (/manager/loginPw) does not exist.
The Manager application has been re-structured for Tomcat 7 onwards and some of URLs have changed. All URLs used to access the Manager application should now start with one of the following options:
/manager/html for the HTML GUI
/manager/text for the text interface
/manager/jmxproxy for the JMX proxy
/manager/status for the status pages
Note that the URL for the text interface has changed from "/manager" to "/manager/text".
You probably need to adjust the URL you are using to access the Manager application. However, there is always a chance you have found a bug in the Manager application. If you are sure you have found a bug, and that the bug has not already been reported, please report it to the Apache Tomcat team.

https://stackoverflow.com/questions/36462764/accessing-tomcat-manager-throws-404
https://okky.kr/article/441163

# CompletableFuture

CompletableFuture.runAsync -> {

CompletableFuture<Map<String, String>> future = CompletableFuture.supplyAsync(() -> {

// https://umanking.github.io/2020/10/15/java-completable-future/

# spring context-security.xml

<security:intercept-url pattern="/api/test/**" filters="none"/>

# eclipse tomcat build ์œ„์น˜

\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\{appName}

# byte to image

	@SuppressWarnings("unchecked")
	private String restAPI(String url) {

		UriComponents uriComponents = UriComponentsBuilder.fromUriString(url).build();

		String changeString = "";
		try {
			HttpHeaders headers = new HttpHeaders();
	    	headers.setContentType(MediaType.APPLICATION_JSON);
	    	RestTemplate restTemplate = new RestTemplate();
	    	ResponseEntity<byte[]> response = restTemplate.getForEntity(url,  byte[].class);
	    	HttpHeaders httpHeaders = response.getHeaders();
	    	String fileName = httpHeaders.get("Content-Disposition").get(0);
	    	String orgFileName = fileName.replace("attachement;filename=", "");
	    	MediaType contentType = httpHeaders.getContentType();
	    	byte[] body = response.getBody();


	    	Path data = Files.write(Paths.get(orgFileName), body);



	        FileInputStream fis = new FileInputStream(data.toFile().getAbsolutePath());
	        try {
				try (ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream()) {
					int len = 0;
					byte[] buf = new byte[1024];
					while ((len = fis.read(buf)) != -1) {
						byteOutStream.write(buf, 0, len);
					}
					byte[] fileArray = byteOutStream.toByteArray();
					String imageString = new String(Base64.encodeBase64(fileArray));
					changeString = "data:"+contentType+";base64," + imageString;
				}
			} catch (Exception e) {
			} finally {
				fis.close();
			}

		} catch(Exception e) {
			logger.error("Error : " + uriComponents.toString() + "Message - [" + e + "]");
		}
		return changeString;
	}

# spring message convert

๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ๋ณ„๋„๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด Spring ์—์„œ ๋“ฑ๋กํ•˜๋Š” ๋””ํดํŠธ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒ„ํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ByteArrayHttpMessageConverter
, StringHttpMessageConverter
, FormHttpMessageConverter
, SourceHttpMessageConverter

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=moonv11&logNo=220139179955

# Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]

// ํ•ด๊ฒฐ
MultipartHttpServletRequest => HttpServletRequest๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์ฒ˜๋ฆฌ

((HeaderWriterFilter.HeaderWriterRequest) ((HttpServlet3RequestFactory.Servlet3SecurityContextHolderAwareRequestWrapper) document).request).getHeaders("Content-Length")

// ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•
// 1. spring ์„ค์ •์—์„œ multipartResolver๊ฐ€ bean์œผ๋กœ ์ฃผ์ž…์ด ๋˜์—ˆ๋Š”์ง€,
// ex)<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
//
// 2. form์—์„œ enctype์ด multipart/form-data ์œผ๋กœ ๋˜์—ˆ๋Š”์ง€,
// ex)<form id="fileupload" method="post" enctype="multipart/form-data">
//
// 3. Controller์—์„œ Request ๋ฅผ MultipartHttpServletRequest ๋กœ ๋ฐ›๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
// ์˜ฌ๋ ค์ฃผ์‹  ๋‚ด์šฉ๋งŒ์œผ๋กœ๋Š” ํ•ด๋‹น์˜ค๋ฅ˜์˜ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“œ๋‚˜, ๋ณดํ†ต form ํƒœ๊ทธ์— enctype="multipart/form-data" ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด๊ฑฐ๋‚˜, form tag๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š”์ง€, post๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„๋“ค์„ ์žฌ ์ ๊ฒ€ํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
// ์•„๋‹ˆ๋ฉด ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ MultipartHttpServetRequest๋ฅผ ๋„ฃ์ง€ ์•Š๊ณ  HttpServletRequest ๊ฐ์ฒด๋กœ ๋ฐ›์•„ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์บ์ŠคํŒ…์„ ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.


https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000013994
<form
  id="editor_upimage"
  name="editor_upimage"
  method="post"
  enctype="multipart/form-data"
  onSubmit="return false;"
>
  <div id="pop_content2">
    <input type="file" class="upload" id="uploadInputBox" name="Filedata" />
    <p class="dsc" id="info">
      <strong>10MB</strong>์ดํ•˜์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋งŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      <br />
      (JPG, GIF, PNG, BMP)
    </p>
  </div>
</form>


https://dalili.tistory.com/168

# inputstream to multifile

			File file;
            InputStream input = new FileInputStream(file);
            OutputStream os = fileItem.getOutputStream();
            IOUtils.copy(input, os);

//            String defaultPath = request.getSession().getServletContext().getRealPath("/");
//            String filePath = defaultPath + "img" + File.separator + "smarteditor2" + File.separator;
//            File file = new File(filePath);
//            if (!file.exists()) file.mkdirs();
//
//            String autoFileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
//            String rFileName = filePath + autoFileName;
//            InputStream is = request.getInputStream();
//            OutputStream os = new FileOutputStream(rFileName);
//            int num;
//            byte b[] = new byte[Integer.parseInt(request.getHeader("file-size"))];
//            HyFileUtils.copyInputStreamToFile(is, new File(filePath + fileName));
//            if (is != null) is.close();
//            os.flush();
//            os.close();

//            byte b[] = new byte[Integer.parseInt(request.getHeader("file-size"))];
//            while((num = is.read(b,0,b.length)) != -1){
//                os.write(b,0,num);
//            }
//            if(is != null) is.close();
//            os.flush();
//            os.close();


https://ksabs.tistory.com/152
https://dev.umejintan.com/9

# autowired ์—๋Ÿฌ ๊ด€๋ จ

์–‘์ชฝ @Component์ปดํฌ๋„ŒํŠธ์—์„œ ์„œ๋กœ์— @Autowired๋ฅผ ๊ฑฐ๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ๊ฐ€๋Šฅ ์ฃผ์˜ (๋นŒ๋“œ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์„ ์ˆ˜ ๋„ ์žˆ์Œ. ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์ฃผ์˜์ฃผ๊ธฐ!!) ๋˜๋Š” lazy๋ฅผ ๊ฑฐ๋Š”ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ

 Application run failed
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'returnBsl':
 Bean with name 'returnBsl' has been injected into other beans [orderBsl] in its raw version as part of a circular reference,
 but has eventually been wrapped. This means that said other beans do not use the final version of the bean.
 This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example

# substring

public static String splitLength(String text, int length){
	int maxLength = length;
	int textLen = text.length();
	String resultText = "";
	if(textLen > length) {
		resultText = text.substring(0, maxLength);
	} else {
		resultText = text;
	}
	return resultText;
}

public static String relaxSubString(String src, int beginIndex, int endIndex) {
	if(DataUtils.isEmpty(src)) {
		return src;
	}
	if(src.length() < beginIndex) {
		return "";
	}
	if(src.length() < endIndex) {
		return src.substring(beginIndex, src.length());
	}
	return src.substring(beginIndex, endIndex);
}

#

import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;

public class Temp {

    public static void main(String[] args) throws Exception {
        System.out.println("Start");
        var zpl = "\u0010CT~~CD,~CC^~CT~\n" +
                "^XA\n" +
                "~TA000\n" +
                "~JSN\n" +
                "^LT0\n" +
                "^MNW\n" +
                "^MTD\n" +
                "^PON\n" +
                "^PMN\n" +
                "^LH0,0\n" +
                "^JMA\n" +
                "^PR6,6\n" +
                "~SD15\n" +
                "^JUS\n" +
                "^LRN\n" +
                "^CI27\n" +
                "^PA0,1,1,0\n" +
                "^XZ\n" +
                "^XA\n" +
                "^MMT\n" +
                "^PW799\n" +
                "^LL799\n" +
                "^LS0\n" +
                "^BY3,3,160^FT114,255^BCN,,Y,N\n" +
                "^FH\\^FD>;123456789012^FS\n" +
                "^FT151,376^A0N,28,28^FH\\^CI28^FDtest^FS^CI27\n" +
                "^FO0,0^GFA,6113,79900,100,:Z64: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:0293\n" +
                "^PQ3,0,1,Y\n" +
                "^XZ\n";
        for (int index = 0; index < 2; index++){
            // adjust print density (8dpmm), label width (4 inches), label height (6 inches), and label index (0) as necessary
            var uri = URI.create("http://api.labelary.com/v1/printers/6dpmm/labels/10x10/0/");
            var request = HttpRequest.newBuilder(uri)
                    .header("Accept", "application/pdf") // omit this line to get PNG images back
                    .POST(HttpRequest.BodyPublishers.ofString(zpl))
                    .build();
            var client = HttpClient.newHttpClient();
            var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
            var body = response.body();

            if (response.statusCode() == 200) {
                System.out.println("Response");
                String pathName = "label" + index + ".pdf";
                var file = new File(pathName); // change file name for PNG images
                Files.write(file.toPath(), body);
            } else {
                var errorMessage = new String(body, StandardCharsets.UTF_8);
                System.out.println(errorMessage);
            }
            System.out.println("End");
        }
    }
}

# Date

Date date = java.sql.Timestamp.valueOf(ordDate);
ordDateFormat.format(new Date()).substring(0,4);

Calendar pCal = Calendar.getInstance();
pCal.add(Calendar.YEAR, -1);
String pDate = ordDateFormat.format(pCal.getTime()).substring(0,4);

Calendar cCal = Calendar.getInstance();
String cDate = ordDateFormat.format(cCal.getTime()).substring(0,4);

Calendar nCal = Calendar.getInstance();
pCal.add(Calendar.YEAR, 1);
String nDate = ordDateFormat.format(nCal.getTime()).substring(0,4);
String orderDate = ordDateFormat.format(date);

# interceptor

		if(url.toString().contains("validLoginToken") || url.toString().contains("appVersionCheck")){
			Enumeration<String> headerNames = request.getHeaderNames();
			Map<String, String> headersMap = new HashMap<>();
			while (headerNames.hasMoreElements()) {
				String headerName = headerNames.nextElement();
				String headerValue = request.getHeader(headerName);
				headersMap.put(headerName, headerValue);
			}
			for (Map.Entry<String, String> entry : headersMap.entrySet()) {
				System.out.println("Header Name: " + entry.getKey() + ", Value: " + entry.getValue());
			}
		}

# java 1.7 java.security.InvalidKeyException: Illegal key size

// ์˜ค๋ฅ˜๋‚ด์šฉ:java.security.invalidkeyexception: illegal key size
// ๋ฐฉ๋ฒ•1
// ํ•ด๊ฒฐ๋ฐฉ๋ฒ•: ์ •์ฑ…์ ์šฉ๋œ JarํŒŒ์ผ์„ ์ ์šฉ (https://www.oracle.com/java/technologies/javase-jce-all-downloads.html)
// java/jdk1.7.0_80.jdk/Contents/Home/jre/lib/security
// local_policy.jar, US_export_policy.jar

// https://stackoverflow.com/questions/41580489/how-to-install-unlimited-strength-jurisdiction-policy-files
// ๋ฐฉ๋ฒ•2
private String encrypt(String key, String iv, String plainText) throws Exception {
		// ์ œํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ˆ˜์ •
    if (Cipher.getMaxAllowedKeyLength("AES") < 256) {
      try {
        Field field = Class.forName("javax.crypto.JceSecurity").
        getDeclaredField("isRestricted");
        field.setAccessible(true);
        field.set(null, java.lang.Boolean.FALSE);
      } catch (Exception e) {
      }
    }

    SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
    IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
    byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
    return new String(Base64.encodeBase64(encryptedBytes));
}
Last Updated: 4/13/2025, 11:14:44 PM