2017年6月19日
request.setCharacterEncoding("UTF-8")頁面也需要設(shè)置轉(zhuǎn)碼的:
頁面:(.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
response.setContentType("text/html;charset=UTF-8");
處理文件:(.java)
轉(zhuǎn)碼的三種方法:
A 接受參數(shù)時進(jìn)行編碼轉(zhuǎn)換
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8"); 這樣的話,每一個參數(shù)都必須這樣進(jìn)行轉(zhuǎn)碼。很麻煩。但確實(shí)可以拿到漢字。
B 在請求頁面上開始處,執(zhí)行請求的編碼代碼, request.setCharacterEncoding("UTF-8"),把提交內(nèi)容的字符集設(shè)為UTF-8。這樣的話,接受此參數(shù)的頁面就不必在轉(zhuǎn)碼了。直接使用
String str = request.getParameter("something");即可得到漢字參數(shù)。但每頁都需要執(zhí)行這句話。
這個方法也就對post提交的有效果,對于get提交和上傳文件時的enctype="multipart/form-data"是無效的。稍后下面單獨(dú)對這個兩個的亂碼情況再進(jìn)行說明。
C 為了避免每頁都要寫request.setCharacterEncoding("UTF-8"),建議使用過濾器對所有jsp進(jìn)行編碼處理。
新手可以暫時不考慮過濾器的方法,過濾器一般都會涉及到配置開發(fā),要修改web.xml,還算是比較麻煩的,建議接觸java一段時間后再考慮使用過濾器的方法。或者如果應(yīng)用了struts框架,可以查看struts的轉(zhuǎn)碼過濾器配置。
實(shí)際例子:<%request.setCharacterEncoding("UTF-8")%>放在jsp<head></head>之間
jspforward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <% request.setCharacterEncoding("UTF-8");%> </head> <body> <jsp:forward page="/forwardresult.jsp"> <jsp:param name="name" value="李海"></jsp:param> <jsp:param name="age" value="29"></jsp:param> </jsp:forward> </body> </html>
jspresult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <%=request.getParameter("name")%> <%=request.getParameter("age")%> </body> </html>
遇到問題:com.mysql.jdbc.Driver class not found 我在項目中的WEB-INF/lib中添加mysql-connector-java-5.6-bin jar包后在eclipse中選中項目刷新,在lib中選中mysql-connector-java-5.6-bin jar右鍵點(diǎn)擊addbulidPath成功解決問題 完整的代碼如下:
<%@page import="java.sql.DriverManager" import="java.sql.Connection" import="java.sql.Statement"
import="java.sql.ResultSet" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
Statement stmt=conn.createStatement();
String sql="select * from person ";
ResultSet rs=stmt.executeQuery(sql);
%>
<table bgcolor="green" border="1">
<tr>
<td>id</td>
<td>name</td>
<td>sex</td>
<td>age</td>
</tr>
<%
while(rs.next()){
%>
<tr>
<td><%=rs.getString("id") %></td>
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("sex") %></td>
<td><%=rs.getString("age")%></td>
</tr>
<% }%>
</table>
</body>
</html>
第一次沒有找到所以截圖下來
你Eclipse左側(cè)的Project Explorer 最右上角有一個小鈕,鼠標(biāo)移上去時提示"View Menu".

你點(diǎn)一下,在彈出的上下文菜單中選擇"Customize View..." 彈出一個對話框.

你選擇: Content 選項卡,在里面把沒用的去掉就行了 J2EE WEB loading descriptor .
前言:MyEclipse5.5 大小 139M;MyEclipse6.5 大小 451M;MyEclipse7.0 大小 649M!下載服務(wù)器又是國外的。。。下載速度累人也就罷了,只要你工作性能一流。不幸的是,MyEclipse 屬于狂吃內(nèi)存的主,特別是 MyEclipse7.0 運(yùn)行起來,基本上不用干其他工作了,它是一會Quick update,一會 updating indexes ,你耐著性子等它 update 完,它老人家又開始自動 validation 了!
實(shí)在忍無可忍,作者收集了一些關(guān)于解決 MyEclipse 的耗內(nèi)存的辦法,經(jīng)本人測試非常有效,共享出來,希望可以方便更多的朋友。
1 老是彈出Quick update error 、關(guān)閉myeclipse的Quick Update自動更新功能
這個問題的解決辦法是關(guān)閉自動更新
Windows > Preferences > MyEclipse Enterprise Workbench > Community Essentials,
把選項 "Search for new features on startup"的前勾去掉即可。
2 關(guān)閉updating indexes
Window > Preferences > Myeclipse Enterprise Workbench > Maven4Myeclipse > Maven>禁用Download repository index updates on startup 。
3 關(guān)閉MyEclipse的自動validation
validation有一堆,什么xml、jsp、jsf、js等等,我們沒有必要全部都去自動校驗(yàn)一下,只是需要的時候才會手工校驗(yàn)一下,速度立馬提升好幾個檔次
windows > perferences > myeclipse > validation
將Build下全部勾取消
如果你需要驗(yàn)證某個文件的時候,我們可以單獨(dú)去驗(yàn)證它。方法是,在需要驗(yàn)證的文件上( 右鍵 -> MyEclipse -> Run Validation 。
4 啟動優(yōu)化,關(guān)閉不需要使用的模塊
一個系統(tǒng)20%的功能往往能夠滿足80%的需求,MyEclipse也不例外,我們在大多數(shù)時候只需要20%的系統(tǒng)功能,所以可以將一些不使用的模塊禁止 加載啟動。
Window > Preferences > General > Startup andy Shutdown 在這里列出的是MyEclipse啟動時加載的模塊 我這里只讓它加載tomcat5 勾選 MyEclipse EASIE Tomcat 5 。
怎樣才能知道哪些啟動項有用呢?我現(xiàn)在把我知道的啟動項用處說一下,還有很多不懂的,希望大家懂的回復(fù)在下面啊:
WTP :一個跟myeclipse差不多的東西,主要差別是 WTP 是免費(fèi)的,如果使用myeclipse,這個可以取消
Mylyn:組隊任務(wù)管理工具,類似于 CVS ,以任務(wù)為單位管理項目進(jìn)度,沒用到的可以取消
Derby:一種保存成 jar 形式的數(shù)據(jù)庫,我沒用到,取消
一大排以 MyEclipse EASIE 打頭的啟動項:myeclipse 支持的服務(wù)器,只選自己用的,其他取消,比如我只選了tomcat 。
5 去掉MyEclipse的拼寫檢查(如果你覺的有用可以不去)
拼寫檢查會給我們帶來不少的麻煩,我們的方法命名都會是單詞的縮寫,他也會提示有錯,所以最好去掉,沒有多大的用處
Window > perferences > General > Editors > Text Editors > Spelling > 將Enable spell checking復(fù)選框的勾選去掉。
6 去掉MyEclipse繁雜的自帶插件自動加載項
Window > perferences > General > Startup and Shutdown > 將Plug-ins activated on startup 中的復(fù)選框有選擇性的勾選去掉。
7 修改MyEclipse編輯JSP頁面時的編輯工具
Window > perferences > General > Editors > File Associations >
在File types 中選擇 *.jsp > 在Associated editors 中將"MyEclipse JSP Editor"設(shè)置為默認(rèn)。
8 修改MyEclipse安裝目錄的eclipse.ini文件,加大JVM的非堆內(nèi)存
具體內(nèi)容如下:
-clean
-showsplash
com.genuitec.myeclipse.product.ide
--launcher.XXMaxPermSize
256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en
-XX:PermSize=128M
-XX:MaxPermSize=256M
把下面的那個 -XX:MaxPermSize 調(diào)大,比如 -XX:MaxPermSize=512M,再把 -XX:PermSize 調(diào)成跟 -XX:MaxPermSize一樣大
Eclipse導(dǎo)入了一個比較大的項目,出現(xiàn)了an internal error occurred during building workspace錯誤。網(wǎng)上搜了一下,據(jù)說是內(nèi)存溢出問題。可以通過修改eclipse.ini文件解決,
優(yōu)化之后的ini文件內(nèi)容:
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
C:\java\1.6\bin
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
以下為查找得的一些資料,解釋我們在修改的參數(shù)是什么意思。
1.堆(Heap)和非堆(Non-heap)內(nèi)存
按照官方的說法:“Java 虛擬機(jī)具有一個堆,堆是運(yùn)行時數(shù)據(jù)區(qū)域,所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配。堆是在 Java 虛擬機(jī)啟動時創(chuàng)建的。”“在JVM中堆之外的內(nèi)存稱為非堆內(nèi)存(Non-heap memory)”。可以看出JVM主要管理兩種類型的內(nèi)存:堆和非堆。簡單來說堆就是Java代碼可及的內(nèi)存,是留給開發(fā)人員使用的;非堆就是JVM留給自己用的,所以方法區(qū)、JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存(如JIT編譯后的代碼緩存)、每個類結(jié)構(gòu)(如運(yùn)行時常數(shù)池、字段和方法數(shù)據(jù))以及方法和構(gòu)造方法的代碼都在非堆內(nèi)存中。
2.堆內(nèi)存分配
JVM初始分配的內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;JVM最大分配的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。默認(rèn)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時,JVM會減少堆直到-Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、-Xmx相等以避免在每次GC 后調(diào)整堆的大小。
3.非堆內(nèi)存分配
JVM使用-XX:PermSize設(shè)置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4。
4.JVM內(nèi)存限制(最大值)首先JVM內(nèi)存限制于實(shí)際的最大物理內(nèi)存,假設(shè)物理內(nèi)存無限大的話,JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系。簡單的說就32位處理器雖然可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng)下為2G-3G),而64bit以上的處理器就不會有限制了。 舉例說明含義:
-Xms128m 表示JVM Heap(堆內(nèi)存)最小尺寸128MB,初始分配
-Xmx512m 表示JVM Heap(堆內(nèi)存)最大允許的尺寸256MB,按需分配。
說明:如果-Xmx不指定或者指定偏小,應(yīng)用可能會導(dǎo)致java.lang.OutOfMemory錯誤,此錯誤來自JVM不是Throwable的,無法用try...catch捕捉。
PermSize和MaxPermSize指明虛擬機(jī)為java永久生成對象(Permanate generation)如,class對象、方法對象這些可反射(reflective)對象分配內(nèi)存限制,這些內(nèi)存不包括在Heap(堆內(nèi)存)區(qū)之中。
-XX:PermSize=64MB 最小尺寸,初始分配
-XX:MaxPermSize=256MB 最大允許分配尺寸,按需分配
過小會導(dǎo)致:java.lang.OutOfMemoryError: PermGen space
MaxPermSize缺省值和-server -client選項相關(guān)。-server選項下默認(rèn)MaxPermSize為64m
-client選項下默認(rèn)MaxPermSize為32m
PS:不同廠家的jdk垃圾回收算法不一樣。在sun的jdk下,Xms和Xmx設(shè)置一樣,可以減輕伸縮堆大小帶來的壓力,但在ibm的jdk下面,設(shè)置為一樣會增大堆碎片產(chǎn)生的幾率。
下面再簡單的整理一下優(yōu)化MyEclipse速度的主要方法:
1.修改myeclipse.ini。
2.取消自動validation
3.勾掉無用插件。
4.修改啟動加載模塊
下面附上詳細(xì)的優(yōu)化MyEclipse速度方法:(轉(zhuǎn)載)
http://yufenfei.javaeye.com/blog/376464
http://blog.csdn.net/defonds/archive/2009/07/10/4338782.aspx
http://zhangpengshou.javaeye.com/blog/198476
遇到問題:com.mysql.jdbc.Driver class not found 我在項目中的WEB-INF/lib中添加mysql-connector-java-5.6-bin jar包后在eclipse中選中項目刷新,在lib中選中mysql-connector-java-5.6-bin jar右鍵點(diǎn)擊addbulidPath成功解決問題 完整的代碼如下:
<%@page import="java.sql.DriverManager" import="java.sql.Connection" import="java.sql.Statement"
import="java.sql.ResultSet" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
Statement stmt=conn.createStatement();
String sql="select * from person ";
ResultSet rs=stmt.executeQuery(sql);
%>
<table bgcolor="green" border="1">
<tr>
<td>id</td>
<td>name</td>
<td>sex</td>
<td>age</td>
</tr>
<%
while(rs.next()){
%>
<tr>
<td><%=rs.getString("id") %></td>
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("sex") %></td>
<td><%=rs.getString("age")%></td>
</tr>
<% }%>
</table>
</body>
</html>