2007年9月28日
一,做一个最简单的Applet:
1,编译JAVA类:
{TOMCAT_HOME} = D:\tomcat6
假设在D:\tomcat6\webapps\testweb\test目录中新建hello目录,在hello目录中新建java类HelloWorld.java:
package hello;
import java.awt.*;
import java.applet.*;
//必须继承Appelet类
public class HelloWorld extends Applet {
public void paint(Graphics g )
{
//向外输出的字符串
g.drawString("Hello HelloWorldd!",5,35);
}
}
在CMD命令行中编译该类:
C:\Documents and Settings\Administrator>d:
D:>cd D:\tomcat6\webapps\testweb\test
D:>javac hello\HelloWorld.java
2,在网页中嵌入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,运行查看Applet:
appletviewer是一个专门用来运行查看applet的工具,直接在命令行上敲打就可以
在CMD命令行中
>d:
>cd D:\tomcat6\webapps\testweb\test
>appletviewer testHello.html
如果启动了TOMCAT,也可以在浏览器中浏览,不过有些浏览器不支持,需要JAVA插件才可以看到效果,比如遨游,我是在IE6.0中运行可以看到。
二,Applet进一步处理:
如果想把网页中的Applet标签转换成<Object>或者<Embed>形式,需要做以下工作,
4,将hello目录打包:
>d:
>cd D:\tomcat6\webapps\testweb\test
>jar -cvf hello.jar ./hello
5,使用htmlconverter工具来转换:
1)下载htmlconverter==>http://java.sun.com/products/plugin/1.3/docs/html_converter.html
2)下载后是一个压缩文件,解压缩后成为一个jar包,假设该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)
此时helloworld.jsp中的代码将被转换成如下样式:
<HTML>
<TITLE>HelloWorld! Applet</TITLE>
<!--"CONVERTED_APPLET"-->
<!-- HTML CONVERTER -->
<OBJECT classid="clsid:E19F9331-3110-11d4-991C-005004D3B3DB"
WIDTH = 200 HEIGHT = 100 NAME = "HelloWorld" ALIGN = middle codebase="http://java.sun.com/products/plugin/1.3.0_02/jinstall-130_02-win32.cab#Version=1,3,0,2">
<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=1.3.0_02">
<PARAM NAME="scriptable" VALUE="false">
<COMMENT>
<EMBED type="application/x-java-applet;jpi-version=1.3.0_02" CODE = "hello.HelloWorld.class" CODEBASE = "." ARCHIVE = "HelloWorld.jar" NAME = "HelloWorld" WIDTH = 200 HEIGHT = 100 ALIGN = middle scriptable=false pluginspage="http://java.sun.com/products/plugin/1.3.0_02/plugin-install.html"><NOEMBED>
</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>
这样转换就已经完成,此时再用appletviewer去查看,效果和前面一致
posted @
2007-12-12 13:19 诗语江南 阅读(4703) |
评论 (0) |
编辑 收藏
本文转自BeanSoft:
http://www.blogjava.net/beansoft/archive/2007/10/09/151368.html
常见的 Tomcat 5 表单编码提交后乱码的解决方案有很多, 有改 Tomcat Connector 属性的, 有加过滤器的. 但是 Tomcat 自带的那个过滤器只解决了 POST 方式的乱码却不能处理 GET 方式的乱码. 在这里那我就给出一个不需要修改任何 Tomcat 配置文件的完美解决中文问题的过滤器的代码:
首先是我们的测试页面:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>表单测试页面</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>
和普通的表单没有任何区别.
然后就是表单提交页面 action.jsp:
<%@ page language="java" pageEncoding="GBK"%>
<html>
<body>
参数: <%=request.getParameter("name") %> <br>
</body>
</html>
接着是过滤器的配置文件 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>
最后最关键的就是我们的过滤器代码了, 对 GET 方式使用请求包装器, 而 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
* 对 HttpServletRequestWrapper 进行扩充, 不影响原来的功能并能提供所有的 HttpServletRequest
* 接口中的功能. 它可以统一的对 Tomcat 默认设置下的中文问题进行解决而只需要用新的 Request 对象替换页面中的
* request 对象即可.
*/
class Request extends HttpServletRequestWrapper
{
public Request(HttpServletRequest request) {
super(request);
}
/**
* 转换由表单读取的数据的内码.
* 从 ISO 字符转到 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();
}
/**
* 读取参数 -- 修正了中文问题.
*/
public String getParameter(String name)
{
return toChi(getHttpServletRequest().getParameter(name));
}
/**
* 读取参数列表 - 修正了中文问题.
*/
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 {
}
}
怎么样, 是不是很简单也很方便呢?
posted @
2007-10-14 22:16 诗语江南 阅读(434) |
评论 (0) |
编辑 收藏
我是在寻找一个家园
背着东风
在异乡的土壤生根
花儿开出了四季
被高大的城墙包围
银色的记忆刻在年轮上
像水上的迷宫
找不到出口
那棵十年前种下的榕树
倒影在水面上
现出了家的轮廓
我用一片树叶将它画下
在我经过的每一个城市
都将留下一片炊烟
那是儿时的烽火
指引着我归来的方向
风从石头的缝隙里钻出来
把我的手臂荡开
风儿啊,你将带我去往何方
这里的楼房像沙丘一样的多
桥梁中间架着坚硬的丝网
那个地方是不是
住着贪睡的猫头鹰
长满白色的芦苇和水仙
会不会看见黄牛卖弄舌头
蜜蜂和牵牛花恋爱
风儿啊,你是不是要在那里安家
把我所有的幻想和渴望
都种在那片土地上
等待春天的检阅
... ...
花儿继续开着
而在到达之前
我仍将背着东风
独自萌芽
posted @
2007-10-06 23:22 诗语江南 阅读(219) |
评论 (0) |
编辑 收藏
import java.util.*;
/*
* @author 诗语江南
* @function 统计字符串中的重复部分并整理输出,
* 我用了两种方法来做.
*/
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的方法,该方法比较简单
public static Map strTimesWithMap(String str){
//key: 子字符串 String , value: 重复次数 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;
}
//使用双数组的方法,一个字符串数组存字符串
//一个整形数组存与字符串数组对应位置上的字符串出现的次数
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] + " ");
}
}
}
posted @
2007-10-05 13:36 诗语江南 阅读(1668) |
评论 (3) |
编辑 收藏
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个数字,以-1作为结束标志,并且-1不计算在内
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;
}
}
posted @
2007-09-28 00:14 诗语江南 阅读(298) |
评论 (0) |
编辑 收藏