一,做一個(gè)最簡(jiǎn)單的Applet:
1,編譯JAVA類(lèi):
{TOMCAT_HOME} = D:\tomcat6
假設(shè)在D:\tomcat6\webapps\testweb\test目錄中新建hello目錄,在hello目錄中新建java類(lèi)HelloWorld.java:
package hello;
import java.awt.*;
import java.applet.*;
//必須繼承Appelet類(lèi)
public class HelloWorld extends Applet {
public void paint(Graphics g )
{
//向外輸出的字符串
g.drawString("Hello HelloWorldd!",5,35);
}
}
在CMD命令行中編譯該類(lèi):
C:\Documents and Settings\Administrator>d:
D:>cd D:\tomcat6\webapps\testweb\test
D:>javac hello\HelloWorld.java
2,在網(wǎng)頁(yè)中嵌入Applet:
在D:\tomcat6\webapps\testweb\test目錄中新建testHello.html文件:
<HTML>
<TITLE>HelloWorld! Applet</TITLE>
<APPLET
codebase="."
CODE="hello.HelloWorld.class"
name="HelloWorld"
WIDTH=200
HEIGHT=100
ALIGN = middle
>
</APPLET>
</HTML>
3,運(yùn)行查看Applet:
appletviewer是一個(gè)專門(mén)用來(lái)運(yùn)行查看applet的工具,直接在命令行上敲打就可以
在CMD命令行中
>d:
>cd D:\tomcat6\webapps\testweb\test
>appletviewer testHello.html
如果啟動(dòng)了TOMCAT,也可以在瀏覽器中瀏覽,不過(guò)有些瀏覽器不支持,需要JAVA插件才可以看到效果,比如遨游,我是在IE6.0中運(yùn)行可以看到。
二,Applet進(jìn)一步處理:
如果想把網(wǎng)頁(yè)中的Applet標(biāo)簽轉(zhuǎn)換成<Object>或者<Embed>形式,需要做以下工作,
4,將hello目錄打包:
>d:
>cd D:\tomcat6\webapps\testweb\test
>jar -cvf hello.jar ./hello
5,使用htmlconverter工具來(lái)轉(zhuǎn)換:
1)下載htmlconverter==>http://java.sun.com/products/plugin/1.3/docs/html_converter.html
2)下載后是一個(gè)壓縮文件,解壓縮后成為一個(gè)jar包,假設(shè)該jar包在D:\tomcat6\webapps\testweb\test下
>d:
>cd D:\tomcat6\webapps\testweb\test
>java -jar htmlconv1_3.jar helloworld.jsp (注:不清楚htmlconverter怎么用的,可以敲命令查看幫助:java -jar htmlconv1_3.jar -help)
此時(shí)helloworld.jsp中的代碼將被轉(zhuǎn)換成如下樣式:
<HTML>
<TITLE>HelloWorld! Applet</TITLE>
<!--"CONVERTED_APPLET"-->
<!-- HTML CONVERTER -->
<OBJECT classid="clsid:E
WIDTH = 200 HEIGHT = 100 NAME = "HelloWorld" ALIGN = middle codebase="http://java.sun.com/products/plugin/
<PARAM NAME = CODE VALUE = "hello.HelloWorld.class" >
<PARAM NAME = CODEBASE VALUE = "." >
<PARAM NAME = ARCHIVE VALUE = "HelloWorld.jar" >
<PARAM NAME = NAME VALUE = "HelloWorld" >
<PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=
<PARAM NAME="scriptable" VALUE="false">
<COMMENT>
<EMBED type="application/x-java-applet;jpi-version=
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
<!--
<APPLET CODE = "hello.HelloWorld.class" CODEBASE = "." ARCHIVE = "HelloWorld.jar" WIDTH = 200 HEIGHT = 100 NAME = "HelloWorld" ALIGN = middle>
</APPLET>
-->
<!--"END_CONVERTED_APPLET"-->
</HTML>
這樣轉(zhuǎn)換就已經(jīng)完成,此時(shí)再用appletviewer去查看,效果和前面一致
常見(jiàn)的 Tomcat 5 表單編碼提交后亂碼的解決方案有很多, 有改 Tomcat Connector 屬性的, 有加過(guò)濾器的. 但是 Tomcat 自帶的那個(gè)過(guò)濾器只解決了 POST 方式的亂碼卻不能處理 GET 方式的亂碼. 在這里那我就給出一個(gè)不需要修改任何 Tomcat 配置文件的完美解決中文問(wèn)題的過(guò)濾器的代碼:
首先是我們的測(cè)試頁(yè)面:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>表單測(cè)試頁(yè)面</title> </head> <body> <form action="action.jsp"> GET 方式: <input type=text name="name" value="GET 中文"> <input type=submit> </form> <form action="action.jsp" method="POST"> POST 方式: <input type=text name="name" value="POST 中文"> <input type=submit> </form> </body> </html>
和普通的表單沒(méi)有任何區(qū)別.
然后就是表單提交頁(yè)面 action.jsp:
<%@ page language="java" pageEncoding="GBK"%> <html> <body> 參數(shù): <%=request.getParameter("name") %> <br> </body> </html>
接著是過(guò)濾器的配置文件 web.xml (用 2.5 版本也可以):
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <filter-name>TomcatFormFilter</filter-name> <filter-class>filters.TomcatFormFilter</filter-class> </filter> <filter-mapping> <filter-name>TomcatFormFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
最后最關(guān)鍵的就是我們的過(guò)濾器代碼了, 對(duì) GET 方式使用請(qǐng)求包裝器, 而 POST 方式則用 setCharacterEncoding():
package filters; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; public class TomcatFormFilter implements Filter { /** * Request.java * 對(duì) HttpServletRequestWrapper 進(jìn)行擴(kuò)充, 不影響原來(lái)的功能并能提供所有的 HttpServletRequest * 接口中的功能. 它可以統(tǒng)一的對(duì) Tomcat 默認(rèn)設(shè)置下的中文問(wèn)題進(jìn)行解決而只需要用新的 Request 對(duì)象替換頁(yè)面中的 * request 對(duì)象即可. */ class Request extends HttpServletRequestWrapper { public Request(HttpServletRequest request) { super(request); } /** * 轉(zhuǎn)換由表單讀取的數(shù)據(jù)的內(nèi)碼. * 從 ISO 字符轉(zhuǎn)到 GBK. */ public String toChi(String input) { try { byte[] bytes = input.getBytes("ISO8859-1"); return new String(bytes, "GBK"); } catch (Exception ex) { } return null; } /** * Return the HttpServletRequest holded by this object. */ private HttpServletRequest getHttpServletRequest() { return (HttpServletRequest)super.getRequest(); } /** * 讀取參數(shù) -- 修正了中文問(wèn)題. */ public String getParameter(String name) { return toChi(getHttpServletRequest().getParameter(name)); } /** * 讀取參數(shù)列表 - 修正了中文問(wèn)題. */ public String[] getParameterValues(String name) { String values[] = getHttpServletRequest().getParameterValues(name); if (values != null) { for (int i = 0; i < values.length; i++) { values[i] = toChi(values[i]); } } return values; } } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpreq = (HttpServletRequest)request; if(httpreq.getMethod().equals("POST")) { request.setCharacterEncoding("GBK"); } else { request = new Request(httpreq); } chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { } }
怎么樣, 是不是很簡(jiǎn)單也很方便呢?
背著東風(fēng)
在異鄉(xiāng)的土壤生根
花兒開(kāi)出了四季
被高大的城墻包圍
銀色的記憶刻在年輪上
像水上的迷宮
找不到出口
那棵十年前種下的榕樹(shù)
倒影在水面上
現(xiàn)出了家的輪廓
我用一片樹(shù)葉將它畫(huà)下
在我經(jīng)過(guò)的每一個(gè)城市
都將留下一片炊煙
那是兒時(shí)的烽火
指引著我歸來(lái)的方向
風(fēng)從石頭的縫隙里鉆出來(lái)
把我的手臂蕩開(kāi)
風(fēng)兒啊,你將帶我去往何方
這里的樓房像沙丘一樣的多
橋梁中間架著堅(jiān)硬的絲網(wǎng)
那個(gè)地方是不是
住著貪睡的貓頭鷹
長(zhǎng)滿白色的蘆葦和水仙
會(huì)不會(huì)看見(jiàn)黃牛賣(mài)弄舌頭
蜜蜂和牽?;☉賽?ài)
風(fēng)兒啊,你是不是要在那里安家
把我所有的幻想和渴望
都種在那片土地上
等待春天的檢閱
... ...
花兒繼續(xù)開(kāi)著
而在到達(dá)之前
我仍將背著東風(fēng)
獨(dú)自萌芽
import java.util.*;
/*
* @author 詩(shī)語(yǔ)江南
* @function 統(tǒng)計(jì)字符串中的重復(fù)部分并整理輸出,
* 我用了兩種方法來(lái)做.
*/
public class StrShowTimes{
public static void main(String[] r){
String str = "帥哥,美女,帥哥,野獸,美女,帥哥";
Map s1 = strTimesWithMap(str);
Set keys = s1.keySet();
Iterator it = keys.iterator();
while(it.hasNext()){
String key = (String)it.next();
int value = (Integer) s1.get(key);
System.out.print(key + ": " + value+ ", ");
}
System.out.println();
strTimesWithArray(str);
}
//使用HashMap的方法,該方法比較簡(jiǎn)單
public static Map strTimesWithMap(String str){
//key: 子字符串 String , value: 重復(fù)次數(shù) Integer
Map strMap = new HashMap();
String[] strArr = str.split(",");
for(int i =0; i< strArr.length ; i++){
String key = strArr[i] ;
if(strMap.containsKey(key)){
int value = (Integer) strMap.get(key);
strMap.put(key,++value);
}else{
strMap.put(key,1);
}
}
return strMap;
}
//使用雙數(shù)組的方法,一個(gè)字符串?dāng)?shù)組存字符串
//一個(gè)整形數(shù)組存與字符串?dāng)?shù)組對(duì)應(yīng)位置上的字符串出現(xiàn)的次數(shù)
public static void strTimesWithArray(String str){
String[] tempArr = str.split(",");
int i , end = 0 , len = tempArr.length;
String[] strArr = new String[len];
int[] intArr = new int[len];
boolean isChange ;
for(i = 0 ; i < len ; i++){
isChange = false;
for(int j = 0 ; j < end ; j++){
if(tempArr[i].equals(strArr[j])){
intArr[j] = intArr[j] +1 ;
isChange = true;
break;
}
}
if(isChange) continue;
strArr[end] = tempArr[i];
intArr[end++] = 1;
}
for(i = 0 ; i < end ; i++){
System.out.print(strArr[i] + ": " + intArr[i] + " ");
}
}
}
package sort;
import java.io.*;
import java.util.*;
/*
* @author NoGodMe
* @function 使用冒泡法排序
*/
public class SortBubble {
public static void main(String[] args) throws IOException {
SortBubble mp = new SortBubble();
int[] intBeforeSort = mp.getIntData();
int[] intAfterSort = mp.sortWithBubble(intBeforeSort);
for(int i:intAfterSort){
System.out.println(i);
}
}
//獲取從命令行輸入的N個(gè)數(shù)字,以-1作為結(jié)束標(biāo)志,并且-1不計(jì)算在內(nèi)
public int[] getIntData() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<Integer> intList = new ArrayList<Integer>();
String temp = null;
while( (temp = br.readLine()) != null ){
if(temp.length() == 0) continue;
int i = Integer.parseInt(temp.trim());
if(i == -1) break;
intList.add(i);
}
int[] intArr = new int[intList.size()];
int count = 0;
for(Integer i:intList){
intArr[count++] = i.intValue();
}
return intArr;
}
//冒泡排序法
public int[] sortWithBubble(int[] data){
int temp;
boolean isChange = false;
for(int i = 0 ; i < data.length - 1 ; i++){
isChange = false;
for(int j = 0 ; j < data.length - 1; j++){
if(data[j] > data[j + 1]){
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
isChange = true;
}
}
if(!isChange) break;
}
return data;
}
}
/*
*@author 詩(shī)語(yǔ)江南
*@function 將字符串反序輸出(測(cè)試形如"My name is 天才"的字符串,反序后為"才天 is name My")
*@parameter 要反序的字符串
*@return 反序后的字符串
*/
public static String rev(String num){
String[] nums = num.split(" ");
StringBuffer sb = new StringBuffer();
for(int i = nums.length-1; i>=0; i--){
StringBuffer sb2 = null;
if(nums[i].length() > 1){
if(isContainZh(nums[i])){
sb2 = new StringBuffer(nums[i]);
sb2.reverse();
}
}
if(sb2 != null)
nums[i] = sb2.toString();
sb.append(nums[i] + " ");
}
return sb.toString();
}
//判斷一個(gè)字符串是否有漢字
public static boolean isContainZh(String str){
boolean b = false;
if(str.length() > 1){
byte[] bs = str.getBytes();
if(bs.length != str.length()){
b = true;
}
}
return b;
}
a) 不在函數(shù)內(nèi)
1、 非法表達(dá)式開(kāi)始
b) 可能:丟失括號(hào) .
2. no data found
a) 可能:setInt(1,100)中,沒(méi)有100這個(gè)值
3. 找不到符號(hào)
a) 可能:沒(méi)導(dǎo)入包
4. 指定了無(wú)效URL
a) 可能:數(shù)據(jù)庫(kù)名或IP錯(cuò)誤,即連接出錯(cuò)
閱讀全文
云絲當(dāng)筆
大地做紙
雨
很安靜的來(lái)
點(diǎn)點(diǎn)滴滴
斷斷續(xù)續(xù)
連成一個(gè)字母
一行語(yǔ)句
一首小詩(shī)
我跟黑客說(shuō)
我在寫(xiě)世界上最優(yōu)雅的代碼
它將蔓延
像愛(ài)滋一樣
侵入每個(gè)人的脈絡(luò)
你們都將成為機(jī)器
成為一塊微小的芯片
我是你們的母體
我是你們
我是你
我在敲打一架鋼琴
看拉
最優(yōu)秀的鋼琴家們
多瑙河的兩岸
藍(lán)色的交響樂(lè)正在上演
沒(méi)有誰(shuí)是真正的領(lǐng)袖
我們都在流浪
唱著屬于自己的歌
編著自己的故事
這個(gè)世界很亂
每個(gè)人都在尋找出路
站在地圖上
游離的電子縱橫交錯(cuò)
我把病毒投進(jìn)河流
整個(gè)天空都被壓縮
我哽咽著
看著自己死去
凌晨四點(diǎn)
屏幕上現(xiàn)出四個(gè)字
--游戲結(jié)束
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
26 | 27 | 28 | 29 | 30 | 31 | 1 | |||
2 | 3 | 4 | 5 | 6 | 7 | 8 | |||
9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
16 | 17 | 18 | 19 | 20 | 21 | 22 | |||
23 | 24 | 25 | 26 | 27 | 28 | 29 | |||
30 | 1 | 2 | 3 | 4 | 5 | 6 |
常用鏈接
留言簿(2)
隨筆分類(lèi)
隨筆檔案
友情連接
搜索
最新評(píng)論

- 1.?re: 將字符串反序輸出
- 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
- --yangge
- 2.?re: 將字符串反序輸出
-
求教+1 qq :418966608 @聆笑
- --紫喵
- 3.?re: 統(tǒng)計(jì)字符串中的重復(fù)部分并整理輸出
-
小弟在瀏覽網(wǎng)頁(yè)時(shí) 突然看到閣下您寫(xiě)的 統(tǒng)計(jì)字符串中的重復(fù)部分并整理輸出
的java程序特別地興奮 十分期待能向閣下“取經(jīng)”。QQ:137206889 - --hello3180
- 4.?re: 統(tǒng)計(jì)字符串中的重復(fù)部分并整理輸出
- ff
- --ff
- 5.?re: JAVA錯(cuò)誤處理大集合
- good
- --ccc