網頁

顯示具有 J2EE 標籤的文章。 顯示所有文章
顯示具有 J2EE 標籤的文章。 顯示所有文章

2015年5月24日 星期日

Log4j deploy error: log4j:WARN No appenders could be found for logger

今天在處理一個很舊很舊的Tomcat案子時,因為一時手滑,弄丟了所有的設定,將備份的放進去後,一直發生底下的error

資訊: Deploying web application directory TEST
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
2015/5/23 下午 03:19:43 org.apache.catalina.core.StandardContext start
嚴重的: Error listenerStart
2015/5/23 下午 03:19:43 org.apache.catalina.core.StandardContext start
嚴重的: Context [/TEST] startup failed due to previous errors

總覺得很奇怪,從沒發生過這問題,google了下,看到這篇WARN No appenders could be found for logger的解决方法,有點半信半疑下將web.xml中跟log4j的設定都
org.springframework.web.context.ContextLoaderListener前後再start,就真的正常了,用了快十來年的J2EE,我還真的第一次遇到這問題,再不然就是之前從來沒記錄過吧,哈哈哈

參考網址:
WARN No appenders could be found for logger的解决方法

2013年9月28日 星期六

Spring、J2EE學習筆記-submit中文的問題

同樣的錯又犯了一次,使用spring或j2ee開發的話,若submit的資料中有中文字,要在取得資料時,先執行以下指令,這邊做個紀錄,免得以後又犯

request.setCharacterEncoding("UTF-8");

另外查了下資料,也有幾個地方要注意
1. 在web.xml中要加入
<filter>

    <filter-name>characterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>     <init-param> 
        <param-name>encoding</param-name> 
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>


2. JSP中要加入
<%@page contentType="text/html" pageEncoding="UTF-8"%>

3. server.xml中的conntector要加入useBodyEncodingForURI
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"/>



參考網址:

2013年9月22日 星期日

JSTL學習筆記-jstl比對class name

JSTL使用的越多,就越覺得好用,今天正好遇到想要在jsp檢驗class,通常會想到用instanceof,不過其實有更快的做法,例:

targetObject.class.name == 'class_name'

上述即檢查targetObject是否為class_name的instance

做下記錄

參考網址:
how do i check for instance of a bean using jstl ?

2013年8月20日 星期二

Spring、J2EE學習筆記-更動Tomcat內的jvm options

想要更動tomcat取用的memory量,找半天找不到在哪設,查了下資料才知道在shell script中,步驟如下

Step 1: cd {Tomcat安裝目錄}/bin
Step 2: vim catalina.sh
Step 3: 加入以下(設定是參考Help: Tomcat crashing with "org.apache.jk.common.ChannelSocket processConnection")

#JAVA_OPTS="-server -d64" (我的server不是64位元,所以mark掉)
JAVA_OPTS="$JAVA_OPTS -Xms2048m -Xmx2048m"
JAVA_OPTS="$JAVA_OPTS -XX:PermSize=300m -XX:MaxPermSize=300m"
JAVA_OPTS="$JAVA_OPTS -XX:NewSize=1024m -XX:MaxNewSize=1024m"
JAVA_OPTS="$JAVA_OPTS -XX:TargetSurvivorRatio=90 -XX:SurvivorRatio=5 -XX:MaxTenuringThreshold=12"
JAVA_OPTS="$JAVA_OPTS -XX:+CMSClassUnloadingEnabled"


我其實主要只是想設定2048的memory,哈

參考網址:
Help: Tomcat crashing with "org.apache.jk.common.ChannelSocket processConnection"
tomcat jvm options
add jvm options in tomcat

Spring、J2EE學習筆記-org.apache.jk.common.MsgAjp processHeader 嚴重的: BAD packet signature 18245

查看到log有底下的訊息

2013/8/15 下午 10:00:57 org.apache.jk.common.MsgAjp processHeader
嚴重的: BAD packet signature 18245
2013/8/15 下午 10:00:57 org.apache.jk.common.ChannelSocket processConnection 嚴重的: Error, processing connection
java.lang.IndexOutOfBoundsException
at java.io.BufferedInputStream.read(BufferedInputStream.java:310)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:628)
at org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:585)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:693)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:662)

查了下資料,發現還蠻多人有這狀況,主要是有人查了8009這個socket,用netstat -na看了下,也沒發現有process在用,這倒是讓我覺得有人在掃這個IP,不很好幾個小時一次,看了下資料都是在tomcat的server.xml中將<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />給mark掉即可,稍微看了下ajp是什麼

The Apache Tomcat Connector - AJP Protocol Reference
Apache JServ Protocol(wiki)

看起來是綁定web server和application server的binary protocol,細節沒測試不知道,猜是tomcat和apache綁定80有關,總之拿掉那行後看來是沒有exception了。

參考網址:

2012年11月21日 星期三

Spring、J2EE學習筆記-數字百分比呈現,是double? int?

不知道是不是太久沒寫java的程式了,今天只是想寫個呈現百分比的字串,結果....嗯~先這樣講好了,我寫成以下樣子

int x = 20;
int y = 100;
double z = x / y;
Numberformat nf = Numberformat.getPercentInstance();
nf.setMinimumFractionDigits(2);
Sytem.out.println(nf.format(z));

結果是:0.00%

一看就知道是有問題的 orz,改成底下這樣子


double x = 20;
double y = 100;
double z = x / y;
Numberformat nf = Numberformat.getPercentInstance();
nf.setMinimumFractionDigits(2);
Sytem.out.println(nf.format(z));

結果是:20.00%


這....我該說是我沒注意,還是compiler或run time是要寫明....

2012年11月20日 星期二

Spring、J2EE學習筆記-中文在input傳送的亂碼問題

在J2EE中,傳送input資料時,預設是使用ISO-8895-1編碼,英文傳送是沒問題,但中文傳送就會變成亂碼,解決方式就是在tomcat的server.xml中,收

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/XXX/.key" keystorePass="AAAA" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS" />

改成

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/XXX/.key" keystorePass="AAAA" maxThreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS" URIEncoding="UTF-8" />

不過,在我的狀況,是用8443,若我使用跟參考網址一樣的8080的那個部分,中文一樣會亂碼,猜測這部分也是要看你實際使用的port

參考網址:
http://wenku.baidu.com/view/4148a2e8f8c75fbfc77db25e.html

2012年11月13日 星期二

Spring、J2EE學習筆記-HttpOnly設定

有個案子安全檢測來了個底下這個低風險的問題


[1/2] 在階段作業 Cookie 中遺漏 HttpOnly 屬性 


說實在,第一眼看到時,完全不知道是什麼,總之,就是要我處理掉它(內心os:處理掉不知道會有什麼問題)。

查了下資料,Tomcat 7及spring 3後,都可以在web.xml中的session-config去設定,例如:

<session-config>
        <session-timeout>10</session-timeout>
        <cookie-config>
            <http-only>true</http-only>
            <secure>true</secure>
        </cookie-config>
</session-config>

只是,我用的好像是很舊的,但還是有法子,就是在server.xml中的Context加入

<Context docBase="{你的專案路徑}" path="{你的專案路徑}" reloadable="true" useHttpOnly="true"/>

這樣就ok了,查了下是說防止xss的方法之一,只能說年頭要防的東西太多了

參考網址:
Java EE 6.0 的 Cookie 类已经有设置 HttpOnly 的方法
Spring安全控制
How do you configure HttpOnly cookies in tomcat / java webapps?
HttpOnly介绍以及防止XSS攻击时的作用(转)
How do I set httpOnly and secure cookies with Spring Security?