月度归档:2008年11月

无法访问 javax.servlet.jsp.PageContext

jsp上传水印:

package zengxiaomeng;

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.swing.ImageIcon;

import com.jspsmart.upload.*;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.*;

import com.sun.image.codec.jpeg.*;

public class UploadServlet extends HttpServlet

{

    private static final long serialVersionUID = 1L;

    private final static long FILE_MAX_SIZE = 4000000;//设置允许上传文件的大小限制

    private final static String FILE_EXTEND_NAME = “jpg,JPG,gif,GIF,png,PNG”;//设置允许上传文件的扩展名

    private final static String UPLOAD_DIRECTORY = “/uploadPhotos/”;//设置上传的路径

    private String path; //上传的绝对路径

    private ServletConfig config;

    final public void init(ServletConfig config) throws ServletException

    {

        this.config = config;

        path = config.getServletContext().getRealPath(UPLOAD_DIRECTORY) + “/”;

    }

    final public ServletConfig getServletConfig()

    {

        return config;

    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

    {

        //PrintWriter out = response.getWriter();

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

    {

        response.setContentType(“text/html;charset=GBK”);

        //PrintWriter out = response.getWriter();

        String filename = upload(config, request, response);

        watermark(filename);//生成水印

        reduce(filename);//生成缩略图

        response.sendRedirect(“/Test.htm”);

    }

    public void destroy()

    {

    }

    //********************************附加的一些自定义方法********************************//

    //上传文件

    private String upload(ServletConfig config, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

    {

        //初始化上传组件

        SmartUpload mySmartUpload = new SmartUpload();

        mySmartUpload.initialize(config, request, response);

        mySmartUpload.setAllowedFilesList(FILE_EXTEND_NAME);

        mySmartUpload.setMaxFileSize(FILE_MAX_SIZE);

        //上传文件

        try

        {

            mySmartUpload.upload();

            //mySmartUpload.save(path);//注释掉此行将用原始文件名来保存

            //以下三行代码利用Calendar对象生成一个随机毫秒数来作为新的文件名保存

            com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);//返回刚刚上传的文件对象

            String filename = String.valueOf(Calendar.getInstance().getTimeInMillis()) + “.” + myFile.getFileExt();//构造文件名

            myFile.saveAs(path + filename, SmartUpload.SAVE_PHYSICAL);//保存文件为新的文件名

            return filename;

        }

        catch (Exception e) { }

        return “0”;

    }

    //生成缩略图

    private void reduce(String filename)

    {

        //设置新文件的宽和高

        int tagImageWidth = 102;

        int tagImageHeight = 120;

        ImageIcon srcFile = new ImageIcon(path + filename);//读入源文件

        Image srcImage = srcFile.getImage();//构造Image对象

        BufferedImage tagImage = new BufferedImage(tagImageWidth, tagImageHeight, BufferedImage.TYPE_INT_RGB);//构造图像缓存对象

        tagImage.getGraphics().drawImage(srcImage, 0, 0, tagImageWidth, tagImageHeight, null);//绘制缩小后的图

        paint(tagImage, “s_” + filename);

    }

    //生成水印

    private void watermark(String filename)

    {

        Color color = Color.RED;//前景色

        Color backgroundColor = Color.WHITE;//背景色

        String word = “zengxiaomeng”;//水印文字

        String wartmarkfilename = “fjsenlogo.jpg”;//水印图片地址

        int watermarkLocationX = 100;

        int watermarkLocationY = 100;

        int wordLocationX = 100;

        int wordLocationY = 100;

        ImageIcon srcFile = new ImageIcon(path + filename);//读入源文件

        Image srcImage = srcFile.getImage();//构造Image对象        

        ImageIcon watermarkFile = new ImageIcon(path + wartmarkfilename);//读入水印文件

        Image watermarkImage = watermarkFile.getImage();//构造水印图片对象        

        BufferedImage tagImage = new BufferedImage(srcImage.getWidth(null), srcImage.getHeight(null), BufferedImage.TYPE_INT_RGB);//构造图像缓存对象

        Graphics2D g = tagImage.createGraphics();

        g.setColor(color);//设置绘图笔的前景色

        g.setBackground(backgroundColor);//设置绘图笔的背景色

        g.drawImage(srcImage, 0, 0, null);//先绘制源图

        g.drawImage(watermarkImage, watermarkLocationX, watermarkLocationY, null); //添加水印图片

        g.drawString(word, wordLocationX, wordLocationY); //添加文字

        g.dispose();

        paint(tagImage, filename);

    }

    private void paint(BufferedImage tagImage, String tagFilename)

    {

        try

        {

            FileOutputStream tagFile = new FileOutputStream(path + tagFilename);

            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tagFile);

            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tagImage);

            param.setQuality(50f, true);

            encoder.encode(tagImage, param);

            tagFile.close();

        }

        catch (Exception e) { }

    }

}

编译出现以下错误:

UploadServlet.java:60: 无法访问 javax.servlet.jsp.PageContext

未找到 的类文件

                mySmartUpload.initialize(config, request, response);

百度了好久,终于找到答案了,虽然已经把servlet-api.jar加到了classpath里,但是servlet-api.jar的jsp 里都没有内容,原来javax.servlet.jsp.PageContext 这个类放在jsp-api.jar里面,把jsp-api.jar加到classpath问题就解决了!

课程设计"智能双色灯"


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;PowerBy:strouven
;Email:zhongwangxia@163.com
;homepage:http://blog.greycode.cn
;2008年11月14日 12:56:15
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
D1      EQU 50H
D2      EQU 50H
D3      EQU 02H  
Z8279    EQU       212H
D8279    EQU       210H
LEDMOD   EQU       00   ;左边输入,八位显示外部译码八位显示
LEDFEQ   EQU       38H ;扫描频率
DATA    SEGMENT
PB      DB ?
DATA    ENDS
STACK   SEGMENT STACK
STA     DW 50 DUP(?)
TOP     EQU LENGTH STA
STACK   ENDS
CODE    SEGMENT
ASSUME  CS:CODE,DS:DATA
START:  
	PUSH    CS
        POP     DS   
	
        MOV     DX,203H    ;设置为全输出
        MOV     AL,80H
        OUT     DX,AL
        MOV     DX,202H
        MOV     AL,0FFH
        OUT     DX,AL       ;清LED
      
	;MOV     DX,202H       ;全红      
	MOV     AL,0FH;全红
	mov 	dx,202h
        OUT     DX,AL
        CALL    disled3s

        
BG:      
	mov dx,202h
	MOV     AL,10010110B;01101001B   ;南北绿,东西红
        OUT     DX,AL
        call disled15s
 		      
       
        mov     Al,00000110B;OR      AL,90H         ;南北黄
        OUT     DX,AL
        ;MOV     BX,D1
        ;CALL    DLY
	call disled3s
        MOV     AL,01101001B;10010110B  ;南北红,东西绿
        OUT     DX,AL
        MOV     BX,D2
        call disled15s

        mov AL,00001001B;OR      AL,60H
        OUT     DX,AL
        call disled3s ;                                          
        JMP     BG

LED  DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H
      DB  5EH,79H,71H
DLY     PROC NEAR


        PUSH    CX
DDD:    MOV     CX,7ffH		
CCC:    LOOP    CCC
        DEC     BX
        CMP     BX,0
        JNE     DDD
        POP     CX
        RET
        DLY     ENDP


DISLED15s   PROC NEAR
	PUSH DX
	PUSH CX
	MOV       DX,Z8279
	MOV       AL,LEDMOD
	OUT       DX,AL
	
	MOV       AL,LEDFEQ
	OUT       DX,AL
	
	MOV       CX,08H  ;
XZ:  MOV       DX,D8279;
	MOV       AL,00H  ;清〇
	OUT       DX,AL   ;
    LOOP  XZ	
	mov dx,z8279
	mov al,83h
	out dx,al ;右起第四位


	mov dx,d8279
	mov al,06h ;在第四位显示1(十位数)
	out dx,al

	mov cx,05H
loop5s: 
	mov dx,z8279;
	mov ax,82h  ;右起第三位显示个位数
	out dx,al  ;
	
	MOV ax,cx   ;;;;;;;;;;;;;;;;;;;;;
        LEA bx,led  ;
        XLAT        ;个位显示数字54321
        mov dx,d8279;
        OUT dx,al   ; ;;;;;;;;;;;;;;;;;;;
	    MOV     BX,D1
        CALL    DLY
loop loop5s
	mov dx,d8279;;;;;;;;;;;;;;;;;;;;;;;
	mov ax,3fH  ;个位显示0
	out dx,al   ;;;;;;;;;;;;;;;;;;;;;;;
	MOV     BX,D1
    CALL    DLY 
	mov dx,z8279;
	mov ax,83h  ;
	out dx,al   ;
	
	mov dx,d8279;;;;;;;;;;;;;;;
	mov ax,3fh  ;十位显示0
	out dx,al   ;;;;;;;;;;;;;;;
	

	mov cx,09H
loop9s: 
	mov dx,z8279;
	mov ax,82h  ;右起第三位显示个位数
	out dx,al   ;	
	MOV ax,cx   ;;;;;;;;;;;;;;;;;;;;;;;;
        LEA bx,led  ;
        XLAT        ;个位显示数字9876554321
        mov dx,d8279;
        OUT dx,al   ; ;;;;;;;;;;;;;;;;;;;;;;
       MOV     BX,D1
       CALL    DLY
loop loop9s
	mov dx,d8279;;;;;;;;;;;;;;;;;;;;;;;
	mov ax,3fH  ;个位显示0
	out dx,al   ;;;;;;;;;;;;;;;;;;;;;;;

	pop cx
	pop dx
	ret
DISLED15s ENDP


delay proc near
	push cx
	mov cx,0fffh
	loop $
	pop cx
	ret
delay endp
	 
disled3s proc near
	
	push cx
	push dx
	
	MOV       DX,Z8279
	MOV       AL,LEDMOD
	OUT       DX,AL
	
	MOV       AL,LEDFEQ
	OUT       DX,AL
	
	MOV       CX,08H  ;
XZ1:  MOV       DX,D8279;
	MOV       AL,00H  ;清〇
	OUT       DX,AL   ;
LOOP  XZ1	
	mov cx,03H
loop3s: 
	mov dx,z8279;
	mov ax,82h  ;右起第三位显示个位数
	out dx,al   ;
	
	MOV ax,cx   ;;;;;;;;;;;;;;;;;;;;;
        LEA bx,led  ;
        XLAT        ;个位显示数字321
        mov dx,d8279;
        OUT dx,al   ; ;;;;;;;;;;;;;;;;;;;
	    MOV     BX,D1
        CALL    DLY
loop loop3s
	mov dx,d8279;;;;;;;;;;;;;;;;;;;;;;;
	mov ax,3fH  ;个位显示0
	out dx,al   ;;;;;;;;;;;;;;;;;;;;;;;

	pop cx
	pop dx
	ret
disled3s endp


CODE    ENDS
END     START


让Editplus支持汇编语言语法高亮显示

#TITLE=ASM
; ASM syntax file written by kylin.
; This file is required for EditPlus to run correctly.

#DELIMITER=,(){}[]-+*/=~!&|<>?:.
#QUOTATION1='
#QUOTATION2="
#CONTINUE_QUOTE=n
#LINECOMMENT=;
#ESCAPE=\
#CASE=y
#PREFIX3=$
#PREFIX4=@
#PREFIX5=%
#NUMBER_PATTERN=asm
#SPECIAL_STX=asm

#KEYWORD=Reserved words
db
dw
dd
dq
mov
movsx
movzx
xchg
push
pusha
pushad
pop
popa
popad
in
out
xlat
lea
lds
les
lfs
lgs
lss
lahf
sahf
pushf
pushfd
popf
popfd
add
sub
adc
sbb
inc
dec
mul
div
imul
idiv
cbw
cwd
cwde
cdq
cmp
neg
daa
das
aaa
aas
aam
aad
and
or
xor
not
test
shl
sal
rol
ror
rcl
rcr
shld
shrd
movs
movsb
movsw
movsd
cmps
cmpsb
cmpsw
cmpsd
scas
scasb
scasw
scasd
lods
lodsb
lodsw
lodsd
stos
stosb
stosw
stosd
ins
insb
insw
insd
outs
outsb
outsw
outsd
jmp
jc
jnc
jz
je
jnz
jne
js
jns
jo
jno
jp
jpe
jnp
jpo
ja
jneb
jae
jnb
jb
jnae
jbe
jna
jg
jnle
jge
jnl
jl
jnge
jle
jng
jcxz
jecxz
loop
loopz
loope
loopnz
loopne
ret
retn
retf
int
into
iret
iretd
set
clc
stc
cmc
cld
std
cli
sti
hlt
wait
esc
lock
nop
bt
btc
btr
bts
bsf
bsr
bound
enter
leave
lar
lsl
lgdt
lidt
sgdt
sidt
ltr
str
lmsw
smsw
lldt
sldt
arpl
clts
verr
verw
DW
DD
DQ
MOV
MOVSX
MOVZX
XCHG
PUSH
PUSHA
PUSHAD
POP
POPA
POPAD
IN
OUT
XLAT
LEA
LDS
LES
LFS
LGS
LSS
LAHF
SAHF
PUSHF
PUSHFD
POPF
POPFD
ADD
SUB
ADC
SBB
INC
DEC
MUL
DIV
IMUL
IDIV
CBW
CWD
CWDE
CDQ
CMP
NEG
DAA
DAS
AAA
AAS
AAM
AAD
AND
or
XOR
NOT
TEST
SHL
SAL
ROL
ROR
RCL
RCR
SHLD
SHRD
MOVS
MOVSB
MOVSW
MOVSD
CMPS
CMPSB
CMPSW
CMPSD
SCAS
SCASB
SCASW
SCASD
LODS
LODSB
LODSW
LODSD
STOS
STOSB
STOSW
STOSD
INS
INSB
INSW
INSD
OUTS
OUTSB
OUTSW
OUTSD
JMP
JC
JNC
JZ
JE
JNZ
JNE
JS
JNS
JO
JNO
JP
JPE
JNP
JPO
JA
JNEB
JAE
JNB
JB
JNAE
JBE
JNA
JG
JNLE
JGE
JNL
JL
JNGE
JLE
JNG
JCXZ
JECXZ
LOOP
LOOPZ
LOOPE
LOOPNZ
LOOPNE
RET
RETN
RETF
INT
INTO
IRET
IRETD
SET
CLC
STC
CMC
CLD
STD
CLI
STI
HLT
WAIT
ESC
LOCK
NOP
BT
BTC
BTR
BTS
BSF
BSR
BOUND
ENTER
LEAVE
LAR
LSL
LGDT
LIDT
SGDT
SIDT
LTR
STR
LMSW
SMSW
LLDT
SLDT
ARPL
CLTS
VERR
VERW

#KEYWORD=Register
flat
stdcall
casemap
none
dup
proto
call
local
invoke
eax
ax
ah
al
ebx
bh
bl
bx
ecx
cx
ch
cl
edx
dx
dh
dl
esi
si
edi
di
ebp
bp
esp
sp
carry
overflow
parity
sign
zero
true
false
FLAT
STDCALL
CASEMAP
NONE
DUP
PROTO
CALL
LOCAL
INVOKE
EAX
AX
AH
AL
EBX
BH
BL
BX
ECX
CX
CH
CL
EDX
DX
DH
DL
ESI
SI
EDI
DI
EBP
BP
ESP
SP
CARRY
OVERFLOW
PARITY
SIGN
ZERO
TRUE
FALSE

#KEYWORD=Statements
386
model
option
data
const
stack
code
proc
endp
struc
ends
end
include
includelib
if
else
elseif
endif
while
endw
repeat
break
continue
until
null
386
MODEL
OPTION
DATA
CONST
STACK
CODE
PROC
ENDP
STRUC
ENDS
END
INCLUDE
INCLUDELIB
IF
ELSE
ELSEIF
ENDIF
WHILE
ENDW
REPEAT
BREAK
CONTINUE
UNTIL
NULL

#KEYWORD=Description
ds
cs
es
ss
fs
gs
addr
offset
byte
word
dword
ptr
DS
CS
ES
SS
FS
GS
ADDR
OFFSET
BYTE
WORD
DWORD
PTR

#KEYWORD=Symbols
=
:
@
(
)
,
.
;
/
+
-
*
%

#

Java Properties 类读取配置文件信息

Java Properties 类读取配置文件信息

Java Properties 类读取配置文件信息在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的。java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便。从中可以看到如何读取properties文件,并应用读取出来的值,是学习操作properties文件的好例子。

  • 获取JVM的系统属性

Java代码 复制代码
  1. import java.util.Properties;   
  2.     
  3. class PropTest {   
  4.     public static void main(String[] args) {   
  5.     Properties pps = System.getProperties();   
  6.     pps.list(System.out);   
  7.     }   
  8. }  

引用
结果:
— listing properties —
java.runtime.name=Java(TM) 2 Runtime Environment, Stand…
sun.boot.library.path=C:\Program Files\Java\jdk1.5.0_04\jre…
java.vm.version=1.5.0_04-b05
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=CN
sun.os.patch.level=Service Pack 2
java.vm.specification.name=Java Virtual Machine Specification
…以下略

  • 读取配置文件

配置文件config.ini

Xml代码 复制代码
  1. author=ZJ  
  2. user=all  
  3. copyright=2006-2007   
Java代码 复制代码
  1. import java.io.FileInputStream;   
  2. import java.util.Enumeration;   
  3. import java.util.Properties;   
  4.     
  5. class PropTest {   
  6.     public static void main(String[] args) {   
  7. Properties pps=new Properties();    
  8.     try {   
  9.         pps.load(new FileInputStream("config.ini"));   
  10.         Enumeration enum1 = pps.propertyNames();   
  11.         while (enum1.hasMoreElements()) {   
  12.        String strKey = (String) enum1.nextElement();   
  13.        String strValue = pps.getProperty(strKey);   
  14.        System.out.println(strKey + "=" + strValue);   
  15.         }   
  16.     } catch (Exception e) {   
  17.         e.printStackTrace();   
  18.     }   
  19.     }   
  20. }  

引用
结果:
user=all
copyright=2006-2007
author=ZJ
  • 另外一个用JAVA操作properties文件的实例

Java代码 复制代码
  1. package control;   
  2.   
  3. import java.io.BufferedInputStream;   
  4. import java.io.FileInputStream;   
  5. import java.io.FileOutputStream;   
  6. import java.io.IOException;   
  7. import java.io.InputStream;   
  8. import java.io.OutputStream;   
  9. import java.util.Enumeration;   
  10. import java.util.Properties;   
  11.   
  12. public class TestMain {   
  13.     
  14.  //根据key读取value   
  15.  public static String readValue(String filePath,String key) {   
  16.   Properties props = new Properties();   
  17.         try {   
  18.          InputStream in = new BufferedInputStream (new FileInputStream(filePath));   
  19.          props.load(in);   
  20.          String value = props.getProperty (key);   
  21.             System.out.println(key+value);   
  22.             return value;   
  23.         } catch (Exception e) {   
  24.          e.printStackTrace();   
  25.          return null;   
  26.         }   
  27.  }   
  28.     
  29.  //读取properties的全部信息   
  30.     public static void readProperties(String filePath) {   
  31.      Properties props = new Properties();   
  32.         try {   
  33.          InputStream in = new BufferedInputStream (new FileInputStream(filePath));   
  34.          props.load(in);   
  35.             Enumeration en = props.propertyNames();   
  36.              while (en.hasMoreElements()) {   
  37.               String key = (String) en.nextElement();   
  38.                     String Property = props.getProperty (key);   
  39.                     System.out.println(key+Property);   
  40.                 }   
  41.         } catch (Exception e) {   
  42.          e.printStackTrace();   
  43.         }   
  44.     }   
  45.   
  46.     //写入properties信息   
  47.     public static void writeProperties(String filePath,String parameterName,String parameterValue) {   
  48.      Properties prop = new Properties();   
  49.      try {   
  50.       InputStream fis = new FileInputStream(filePath);   
  51.             //从输入流中读取属性列表(键和元素对)   
  52.             prop.load(fis);   
  53.             //调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。   
  54.             //强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。   
  55.             OutputStream fos = new FileOutputStream(filePath);   
  56.             prop.setProperty(parameterName, parameterValue);   
  57.             //以适合使用 load 方法加载到 Properties 表中的格式,   
  58.             //将此 Properties 表中的属性列表(键和元素对)写入输出流   
  59.             prop.store(fos, "Update '" + parameterName + "' value");   
  60.         } catch (IOException e) {   
  61.          System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");   
  62.         }   
  63.     }   
  64.   
  65.     public static void main(String[] args) {   
  66.      readValue("info.properties","url");   
  67.         writeProperties("info.properties","age","21");   
  68.         readProperties("info.properties" );   
  69.         System.out.println("OK");   
  70.     }   
  71. }  

删除XP的administrator

第一、 只能设置一个用户,客户账户打开与否不受影响。打开“控制面板/用户账户”对话框,删除其它不需要的用户,只保留一个想要登录的用户。

第二、 不要设置任何密码。在“用户账户”对话框中双击图标,进行删除密码操作。

第三、 必须使用Windows XP的登录画面,不能用传统的登录画面。在“用户账户”对话框中选“更改用户登录或注销的方式”并进入,此时出现“用户账户”小对话框,单击“取消”然后在“使用欢迎屏幕”复选框中打勾。

或则:

在Windows XP中单击“开始→运行”,输入“rundll32 netplwiz.dll,UsersRunDll”(注意大小写及空格),然后进入“用户账户”操作窗口,取消对“要使用本机,用户必须输入用户名及密码”项的选择。在接下来弹出的对话框中输入你想让电脑每次自动登录的账户名及其密码。对于Windows 2000,直接在“控制面板→用户帐户”中做上述修改即可。