#
์๋ฐํ๋ก๊ทธ๋จ ๋ง๋ค์ด์ 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));
}