2008年12月13日

简单小程序,就是在页面里显示出POST或者GET

1,request.getMethod(),获得调用页面的方法
2,Enumeration<String> e = request.getParameterNames();接收所有的参数的名称,并且存在一个Enumeration里
3,parameterValue = request.getParameter(parameterName); 循环这句话,获取所有的参数的值



package com.fcp.web2;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowParameter extends HttpServlet {

    
/**
     * 
     
*/
    
private static final long serialVersionUID = -3484338400290863566L;

    
/**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * 
@param request the request send by the client to the server
     * 
@param response the response send by the server to the client
     * 
@throws ServletException if an error occurred
     * 
@throws IOException if an error occurred
     
*/
    
public void doGet(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        response.setContentType(
"text/html");
        PrintWriter out 
= response.getWriter();
        out
                .println(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println(
"  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println(
"  <BODY>");
        
this.printMethod(request, response);
        
this.printParameters(request, response);
        out.println(
"  </BODY>");
        out.println(
"</HTML>");
        out.flush();
        out.close();
    }

    
/**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * 
@param request the request send by the client to the server
     * 
@param response the response send by the server to the client
     * 
@throws ServletException if an error occurred
     * 
@throws IOException if an error occurred
     
*/
    
public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {

        response.setContentType(
"text/html");
        PrintWriter out 
= response.getWriter();
        out
                .println(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println(
"  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println(
"  <BODY>");
        
this.printMethod(request, response);
        
this.printParameters(request, response);
        out.println(
"  </BODY>");
        out.println(
"</HTML>");
        out.flush();
        out.close();
    }
    
    
private void printMethod(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        PrintWriter out 
= response.getWriter();
        out.println(
"Method: " + request.getMethod() + "<br>"); 
    }
    
    
private void printParameters(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        PrintWriter out 
= response.getWriter();
        Enumeration
<String> e = request.getParameterNames();
        String parameterName, parameterValue;
        
while(e.hasMoreElements())
        {
            parameterName 
= e.nextElement();
            parameterValue 
= request.getParameter(parameterName);
            out.println(parameterName 
+ "" + parameterValue + "<br>");            
        }
    }

}

posted @ 2008-12-13 08:47 fcp 阅读(17404) | 评论 (1)编辑 收藏


2008年12月1日

从今天开始,复习原来学过的东东,基本上都忘了,从基础开始
万丈高楼平地起,|||...

手工编写Servlet
1, what is servlet
说白了就一个能响应用户请求的java程序,可以回应给用户HTML代码,当然也可以执行其他任务,比如操纵数据库什么的。

2,编写Servlet
其实就是个Java文件,需要继承HttpServlet这个类,位置是在javax.servlet.http.HttpServlet

package com.fcp.hello;

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;

public class HelloServlet extends HttpServlet
{
    
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    
{
        response.setContentType(
"text/html;charset=utf-8");
        
        PrintWriter out 
= response.getWriter();
        out.println(
"<html>");
        out.println(
"<head>");
        out.println(
"<title>my first servlet</title>");
        out.println(
"</head>");
        out.println(
"<body>");
        
//print time
        out.println(new Date());
        out.println(
"<br>");
        out.println(
"Welcome to my first Servlet!");
        out.println(
"</body>");
        out.println(
"</html>");
        out.flush();
        out.close();
    }

    
    
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    
{
        doGet(request, response);
    }

}

重写doGet和doPost这两个函数,来处理GET和POST请求
response这个变量就是要返回给用户的,所以先设置一下返回数据的类型
response.setContentType("text/html;charset=utf-8");

然后获得PrintWriter这个对象的实例
PrintWriter out = response.getWriter();

恩,现在可以输出我们想输出的内容了
输出完别忘了,flush和close

在doPost方法里调用doGet,这样可以让GET和POST方法得到同样的处理

2,编译程序
因为Tomcat能接受的已经编译的class文件,所以我们要先进行编译
javac -d . HelloServlet.java

运行后有错误。。。。找不到javax.servlet.http.HttpServlet
传输中是没有装j2ee

这个包我们可以在tomcat中找到,导致我现在还不知道正常的装法
重新编译,加上class path
javac -d . -cp c:\tomcat6\lib\servlet-apt.jar HelloServlet.java
编译成功

3,创建tomcat的目录结构
在webapps下建立自己的web应用
-hello
    |-WEB-INF
        |-web.xml
        |-classes
            |-com
                |-fcp
                    |-hello
                        |-HelloServlet.class

4,建立web.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version
="2.5">

    
<servlet>
        
<servlet-name>hello</servlet-name>
        
<servlet-class>com.fcp.hello.HelloServlet</servlet-class>
    
</servlet>
    
    
<servlet-mapping>
        
<servlet-name>hello</servlet-name>
        
<url-pattern>/hello</url-pattern>
    
</servlet-mapping>
    
</web-app>

前面的xml声明是从conf/web.xml中copy的
后面的才是主要内容
<servlet>就是定义servlet,定义servlet的名字和对应的类
<servlet-mapping>就是定义哪个servlet和哪个URL对应

5,启动tomcat,查看对应的URL
http://localhost:8080/htllo/hello
应该就可以看见了

posted @ 2008-12-01 05:19 fcp 阅读(473) | 评论 (0)编辑 收藏


2008年11月30日

一直想继续学习java的东西,可是就是没时间,该死的破课
可是课上学的东西也不能忘了,我这人急性不好,还是写下来的保险

Traffic Shaping就是控制网络的流量
在ubuntu下有两个好用的工具可以完成这个工作
Wonder Shaper和cbq.init
实际上真正起作用的是一个叫tc的linux命令
这个两个工具都是脚本,估计是bash,都在内部调用tc来实现traffic shaping
说白了就是给咱们弄了个简单的接口,不用了解太多内部的东西,就能实现traffic shaping

1,Wonder Shaper
安装 apt-get install wondershaper
使用 wondershaper [NIC] [DOWN] [UP]

NIC: 你要限制的设备名,例如eth0
DOWN: 下载的最大速度,单位Kbps
UP: 上传的最大速度,单位Kbps

例子: wondershaper eth0 1024 512
假设你用eth0连接到Internet,你的下载速度最大到1024kps,上传速度最大到512kps

当然你可以取消限制
wondershaper clear eth0
查看状态
wondershaper eth0

2,cbq.init
这个也是个脚本,比上面的复杂,当然功能也多,
上面这个只能针对网卡进行限制,如果你想对某个IP的地址的流量进行限制的时候就无能为力了
但是这个东东可以

在ubuntu下他叫shaper
安装apt-get install shaper
配置文件在/etc/shaper下,开始是空的

当然你也可以自己下这个脚本的原版
http://sourceforge.net/projects/cbqinit/

这个脚本是根据配置文件里的信息进行限制的,所以第一步是创建配置文件
文件名有固定的格式
cbq-<0002 ~ FFFF>.<name>
例子:cbq-0002.download  cbq-0003.http

文件的内容:
DEVICE=eth0,10Mbit,1Mbit
RATE=1600Kbit
WEIGHT=160Kbit
RULE=192.168.1.100.192.168.1.101
DEVICE就是你要限制的网卡设备名称,网卡的设计带宽
RATE就是你要限制的带宽,但是限制的是谁呢,这个由RULE决定
RULE按照上面的例子就是只限制从192.168.1.100到192.168.1.101的带宽,其他的流量一律不管

当然还有一下其他的参数,高级,还可以跟iptables结合,利用iptables在特定的流量上打标记-j MARK好像是这个
然后在cbq的配置文件里用MAKR指定这个标记,这样就可以不用RULE来判断了

启动:/etc/init.d/shaper compile
/etc/init.d/shaper start

停止:/etc/init.d/shaper stop


不过说实话,我试了好几次,cbq可以正常的启动,但是根本没效果。。。应该是我配置的错误吧

posted @ 2008-11-30 05:43 fcp 阅读(963) | 评论 (0)编辑 收藏


2008年9月13日

这个东东好像是个数据库,但是它还能根据里面的数据生成图片
它好像经常用在监控网络数据,然后生成一个图片来显示当前网络的状况

1,数据库
恒定大小的数据库,也就是说,它限制了存进去的记录的数量,超过这个数量再存数据,就会删除掉最早的记录
存入的数据只能是数字,没存一个数字,要给这个数字陪一个时间,以后画图用
以当前的连接数为例,数据可能是这样的,
15487          9080878800

连接数        时间(1970年开始算的那种)

2,画图,根据上面的数据生成图片


具体的命令大概3步,命令部分有错,懒得改了,大致就是演示一下怎么用
1.create database
rrdtool create test.rrd --start 920804400 \
DS:connections:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:24


2.add data to database
rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423

3,draw a diagram from the data
rrdtool graph connection.png \
--start 920804400 --end 920808000 \
--title Number of connection " \
DEF:t1=$RRD_FILE:connections:AVERAGE \
LINE1:t3#0000ff:"domain" \
-h 200 -w 480 \
-v "number of connection"

生成的图大概是这样的

posted @ 2008-09-13 17:28 fcp 阅读(1061) | 评论 (0)编辑 收藏

一种linux下的可交互式脚本
别的脚本运行ftp或者ssh的时候,如果提示输入密码,就没办法了
但是expect可以对他们进行交互式的操作
例如:等待password这个字符串出现,然后就向这个进程发送你的密码,
判断等待的字符可以使用正则表达式

我现在也不是全明白,这有个中文的教程
http://fanqiang.chinaunix.net/a4/b8/20010912/1000001278.html

Expect home page:
http://expect.nist.gov/

posted @ 2008-09-13 17:16 fcp 阅读(1021) | 评论 (0)编辑 收藏


2008年8月31日

刚装了ubuntu,可是没让我输入root用户的密码,进不到root里

解决方法:给root一个密码

sudo passwd root

之后输入新的root用户的密码,就可以了

posted @ 2008-08-31 05:36 fcp 阅读(266) | 评论 (0)编辑 收藏


2008年7月26日

实际上是用AWT包中的类

1,首先是引入类
import java.awt.Toolkit;

2,获得一个DefaultToolkit,然后调用他的beep方法就成了
Toolkit toolkit = Toolkit.getDefaultToolkit();
toolkit.beep();

posted @ 2008-07-26 08:26 fcp 阅读(585) | 评论 (0)编辑 收藏


2008年7月25日

1,想获得系统所设置的环境变量
System.getenv(); 或者 System.getenv("PATH");

第一个方法返回一个Map,包含了所有的环境变量
第二个方法直接返回String,也就是环境变量的值

所以要列出所有的环境变量的名字和值,就要遍历那个Map


2,遍历Map
    Map envMap = System.getenv();
        
    Iterator it 
= envMap.entrySet().iterator();

    
while(it.hasNext())
    
{
        Map.Entry
<String, String> entry = (Map.Entry<String, String>)it.next();
        String key 
= entry.getKey();
        String value 
= entry.getValue();
            
        System.out.println(
"Environment name: " + key);
        System.out.println(
"Environment value: " + value);
        System.out.println();
    }

首先是获得一个Map,实际上Map是一个接口,获得的是一个实现课Map接口的类
然后调用entrySet方法获得一个Set,这个Set里存放的就是Map.Entry,实际上它也是一个接口啦
有Set就好办了,调用它的iterator()方法,获得Iterator,它也是个接口,怎么都是接口。。。
最后用next方法遍历就成了

posted @ 2008-07-25 02:02 fcp 阅读(682) | 评论 (0)编辑 收藏


2008年7月15日

JSValidation是一个表单验证的框架,可以通过配置xml文件的形式,来完成表单

的验证。下面是个简单的例子。

1,下载JSValidation
http://cosoft.org.cn/projects/jsvalidation


2,建立web项目,把validation-framework.js,validation-config.xml,

validation-config.dtd,这3个文件放入你的项目,我放在js目录下


3,建立含有表单的html页面
在网页的前面加上对JSValidation的引用

<script language="javascript" src="js/validation-framework.js"></script>

然后是表单的onsubmit事件
onsubmit="return doValidate(this)"
doValidate()中传this或者表单的id的字符串都可以
表单一定要有id,并与后面的xml文件中的id相同

完整的html代码

<%@ page language="java" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 
<head>
  
<title>Testing for JSValidation</title>
  
<meta http-equiv="pragma" content="no-cache">
  
<meta http-equiv="cache-control" content="no-cache">
  
<meta http-equiv="expires" content="0">
  
<meta http-equiv="keywords" 

content
="keyword1,keyword2,keyword3">
  
<meta http-equiv="description" content="This is my 

page"
>
  
<!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 
-->

  
<script language="javascript" src="js/validation-

framework.js"
></script>
 
</head>

 
<body>
  username:
<%=request.getParameter("username")%><br>
  password:
<%=request.getParameter("password")%><br>

  
<form id="form1" action="index.jsp" name="form1" 

method
="post"
   onsubmit
="return doValidate(this)">
   username:
   
<input name="username" size="30" maxlength="30" 

type
="text" />
   
<br>
   password:
   
<input name="password" size="30" maxlength="30" 

type
="password" />
   
<br>
   
<input name="submit" value="提交" 

type
="submit">
  
</form>

 
</body>
</html>


4,修改validation-config.xml
将form的id和要验证域的name设置成一致的,每个验证域可以根据自己的需求改变验证方法
下面是xml的代码

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE validation-config SYSTEM "validation-config.dtd">
<validation-config lang="auto">
 
<form id="form1" show-error="alert" show-type="all">
  
<field name="username" display-name="用户名" onfail="">
   
<depend name="required" />
   
<depend name="commonChar" />
  
</field>
  
<field name="password" display-name="密码">
   
<depend name="required" />
   
<depend name="commonChar" />
  
</field>
 
</form>
</validation-config>


5,最后是修改validation-framework.js
将var ValidationRoot = ""; 改为你xml文件所在的路径
例如,我的web应用的是webproject15
那么就改成 var ValidationRoot = "/webproject15/js/";

posted @ 2008-07-15 07:18 fcp 阅读(5206) | 评论 (3)编辑 收藏


2008年7月14日

FCKEditor是一个网页上的编辑器,可以用于博客和论坛内容的输入

首先先下载FCKEditor,http://www.fckeditor.net/

下载后,放入当前的web应用

在要使用的地方加入一下代码
<script type="text/javascript" src="fckeditor/fckeditor.js"></script>

<script type="text/javascript">
    
var oFCKeditor = new FCKeditor('FCKeditor1');
    oFCKeditor.BasePath    
= '/webproject12/fckeditor/';
    
var sSkin;
    sSkin 
= "office2003";
    
var sSkinPath = oFCKeditor.BasePath + 'editor/skins/+ sSkin + '/';
            
    oFCKeditor.Config['SkinPath'] 
= sSkinPath;

    oFCKeditor.Config['PreloadImages'] 
=
                
        sSkinPath 
+ 'images/toolbar.start.gif' + ';' +
                        sSkinPath 
+ 'images/toolbar.end.gif' + ';' +
                        sSkinPath 
+ 'images/toolbar.bg.gif' + ';' +
                        sSkinPath 
+ 'images/toolbar.buttonarrow.gif' ;
            
    oFCKeditor.Create();
</script>
上面的代码中需要修改的2个地方
第一个是第一行,把src改成对应的路径
第二个是BasePath,还成对应的路径

posted @ 2008-07-14 07:48 fcp 阅读(1325) | 评论 (0)编辑 收藏


仅列出标题  

posts - 0, comments - 4, trackbacks - 0, articles - 15

Copyright © fcp