หน้าเว็บ

วันจันทร์ที่ 22 มิถุนายน พ.ศ. 2552

Tomcat เข้าโฟลเดอร์บางชื่อไม่ได้

เมื่อเข้าบาง URL ที่มีโฟลเดอร์อยู่บน webapps แล้วปรากฎ error ดังด้านล่างนี้

The server encountered an internal error () that prevented
it from fulfilling this request.

exception

java.io.FileNotFoundException:
/var/lib/tomcat5/work/Catalina/localhost/dspace/org/apache/jsp/index_jsp.java
(No such file or directory)

java.io.FileOutputStream.open(Native Method)

java.io.FileOutputStream.(FileOutputStream.java:179)

java.io.FileOutputStream.(FileOutputStream.java:70)


org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:188)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:495)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)


org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)


org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)


org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)


org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0 logs.

แต่ว่าถ้าเป็นโฟลเดอร์อื่นจะยังเข้าได้
ซึ่งในกรณีของผมนั้นเกิดจากการที่เคยตั้งโฟลเดอร์นึงไว้ แล้วไปทำอะไรก็ไม่รู้จำไม่ได้ แล้วอยู่ดีๆพอจะเข้า folder นี้มันก็ขึ้น error แบบนี้ซะงั้น แต่ถ้า copy เอา content ไปใส folder อื่นปรากฎว่ามันทำงานได้ซะงั้น

วิธีแก้ไข
ปัญหาเกิดจากการเก็บ cache ของ tomcat ให้แก้โดยการลบไฟล์ใน cache ที่อยู่ที่ /var/cache/tomcat5.5 ทั้งหมดทิ้ง แล้วสั่ง restart tomcat ใหม่

ระบบที่ทดสอบ
OS: Ubuntu 9.04
Tomcat: 5.5

tomcat แสดง encoding เพี้ยน เมื่อส่ง request

เหตุการณ์คือ ระบบ dspace พัฒนาขึ้นนั้น จะมีกล่องสำหรับ search คำ แต่พอผู้ใช้กรอกภาษาไทย แล้วกดปุ่ม search นั้น ระบบกลับแปลง encoding ออกมาเพี้ยน ส่งผลให้หาผล search ไม่เจอด้วย โดยปัญหานี้ต้องแก้ที่ตัว config ของ Tomcat

วิธีแก้
ในไฟล์ server.xml (อยู่ที่ $TOMCAT_HOME/conf/server.xml โดย $TOMCAT_HOME แล้วแต่ระบบ เช่นของผมอยู่ที่ /usr/share/tomcat5.5) ให้ดูที่บรรทัด แล้วเพิ่ม attribute เข้าไปดังนี้
connector port="8080" usebodyencodingforuri="true".......
หรือ
connector port="8080" uriencoding="UTF-8"........
เสร็จแล้วลอง restart tomcat ใหม่อีกรอบเป็นอันใช้ได้

ระบบที่ทดสอบ

OS: Ubuntu Desktop 9.04
Tomcat: Apache Tomcat 5.5 (via apt-get)


ที่มา
http://antikoala.wordpress.com/2007/02/21/tomcat-55-encoding-problem/

Special Thank
@blckct