Java 프로젝트 문제 및 예외 요약

1. JSP 페이지 캐시로 인해 ajax 데이터가 새로 고쳐지지 않고 다시 인쇄되지 않습니다.

https://blog.csdn.net/iteye_12528/article/details/81443986

ServletActionContext.getResponse.setHeader("Cache-Control","no-store");   
ServletActionContext.getResponse.setHeader("Pragma","no-cache");   
ServletActionContext.getResponse.setDateHeader("Expires", 0);

2.java 리소스 작업 파일에서 FileNotFoundException 발생

이 문제는 찾기가 쉽지 않은데 개발시 리소스 설정 파일은 폴더에 있는게 일반적이라 Resource#getFile() 은 완전 괜찮지만 퍼블리싱할때 설정 파일을 JAR로 패키징하면 getFile()이 Invalid 가 되니까 배포 환경의 영향을 효과적으로 피할 수 있는 스트리밍 방식으로 읽기

//报错的读取方式
(new DefaultResourceLoader()).getResource("classpath:conf/sys.properties").getFile();

//正确的读取方式
(new DefaultResourceLoader()).getResource("classpath:conf/sys.properties").getInputStream();

3. 요청 받기 - 특수 기호 문제

프로젝트에서는 계정 비밀번호 수정 등 문자열 검증 등의 기능이 종종 있는데,
자바에서의 Get 요청은 인식할 수 없는 특수 기호를 발생시키는 경우가 많으
므로 이러한 문자열 제출 요청은 사후 요청을 사용해야 한다는 점에 유의해야 합니다.

4. NoSuchMethodError 오류, ClassNotFoundException, NoClassDefFoundError를 호출하기 위한 참조 jar

jar가 maven에서 관리되지 않고 타사의 다른 jar가 도입되기 때문에 jar가 업데이트되고 프로젝트에서 호출되는 경우

ClassNotFound 예외: 업데이트 jar에 종속성 패키지가 없습니다.
NoSuchMethodError 오류: 참조된 패키지에 충돌이 있습니다.
예:
1.NoSuchMethodError: org.apache.http.conn.ssl.SSLConnectionSocketFactory

이것은 SSLConnectionSocketFactory의 참조 패키지를 쿼리하고 현재 버전이 이 방법을 지원하지 않는다는 사실을 발견하여 발생합니다.

2. NoClassDefFoundError 다음에는 오류를 보고한 클래스가 옵니다.

제가 겪은 상황은
A.jar과 B.jar을 import 하여 로딩 시 A.jar에 C1.jar, B.jar에 C2.jar이 포함되어 있어
C.jar의 버전 충돌이 발생하는 상황이었습니다.

이런 문제는 어떤 jar 패키지가 호출되었는지 확인하는 문제인데,
도구 클래스를 제공
하고 클래스에 직접 넣어 호출한 jar가 맞는지 확인하는 것입니다.


import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
 
public class SystemUtils {
    
    
 
    /**
     * 获取一个class类的实际位置
     * @param cls
     * @return
     */
    public static URL getClassLocation(final Class<?> cls) {
    
    
 
        //非空判断
        if (cls == null) {
    
    
            throw new IllegalArgumentException("null input: cls");
        }
 
        URL result = null;
        final String clsAsResource = cls.getName().replace('.', '/').concat(".class");
 
        final ProtectionDomain pd = cls.getProtectionDomain();
 
        if (pd != null) {
    
    
            final CodeSource cs = pd.getCodeSource();
            if (cs != null) {
    
    
                result = cs.getLocation();
            }
 
            if (result != null) {
    
    
                if ("file".equals(result.getProtocol())) {
    
    
                    try {
    
    
                        if (result.toExternalForm().endsWith(".jar") || result.toExternalForm().endsWith(".zip")) {
    
    
                            result = new URL("jar:".concat(result.toExternalForm()).concat("!/").concat(clsAsResource));
                        } else if (new File(result.getFile()).isDirectory()) {
    
    
                            result = new URL(result, clsAsResource);
                        }
                    } catch (MalformedURLException ignore) {
    
    
 
                    }
                }
            }
        }
 
        if (result == null) {
    
    
            final ClassLoader clsLoader = cls.getClassLoader();
            result = clsLoader != null ? clsLoader.getResource(clsAsResource) : ClassLoader.getSystemResource(clsAsResource);
        }
 
        return result;
    }
 
}

도구 원문: https://www.bbsmax.com/A/RnJW1bEBdq/

5.weblogic 시작 보고서: java.lang.ClassCastException: com.octetstring.vde.backend.BackendRoot**

Linux 서버에서 루트 계정(일반 사용자 계정이어야 함)은 weblogic 응용 프로그램을 시작하는 데 사용됩니다.

일반 사용자(weblogic 사용자)가 전환을 시작하면 제목의 예외가 보고됨

이유: 루트 사용자로 시작하면 모든 파일 권한이 루트 권한으로 주어지기 때문에 나중에 일반 사용자로 시작할 때 파일을 조작할 수 있는 권한이 부족합니다.

접근하다:


find /home/weblogic/  -user root -exec ls {
    
    } \;  查询 /home/weblogic/(此目录是weblogic 的存放目录) 目录下是root 用户权限的文件

chown -R weblogic:weblogic domains   将domains目录下所有的文件,赋值weblogic 用户权限

위의 작업을 반복하고 대상 디렉토리에서 루트 권한 파일을 찾은 다음 다시 권한을 부여하십시오.

6. 포트는 리눅스에서 점유, 주소는 사용

포트를 점유하고 있는 프로세스 번호를 확인하고 종료합니다(이 포트 번호가 귀하에게만 속한 경우).

ps aux |  grep java | losf -i:7001  | grep LISTEN | awk '{print $2}'   查看java 进程,占用7001 端口的 pid  

netstat -an | grep LISTEN
0.0.0.0的就是每个IP都有的服务,写明哪个IP的就是绑定那个IP的服务。

netstat -tln
用来查看linux的端口使用情况

netstat -tunllp 查所有的端口

sudo netstat -anp|grep "端口号"   ----查使用端口的进程号

kill -9 进程号

추천

출처blog.csdn.net/sinat_34979884/article/details/121125348