JSP的运行机制:
JSP容器管理JSP页面生命周期的两个阶段:转换阶段和执行阶段。当有一个对JSP页面的客户请求到来时,JSP容器检验JSP页面的语法是否正确,将JSP页面转换为Servlet源文件,然后调用javac工具类编译Servlet源文件生成字节码文件,这一阶段是转换阶段。接下来,Servlet容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,在请求处理完成后,相应对象被JSP容器接收,容器将HTML格式的响应信息发送到客户端,这一阶段是执行阶段。
一个JSP页面由元素和模板数据组成。元素是必须由JSP容器处理的部分,而模板是JSP容器不处理的部分,例如,JSP页面中的HTML内容会直接发送到客户端。在JSP2.0规范中,元素有三种类型:指令元素,脚本元素,动作元素。
1 JSP的指令元素:
指令元素主要用于为转换阶段提供整个JSP页面的相关信息,指令不会产生任何的输出到当前的输出流中。
1.1 page指令:<%@ page attr1="value1" attr2="value2">
page指令有13个属性.
language="java" 指定在脚本元素中使用的脚本语言,默认是Java
extends="className" 指定JSP页面转换后的Servlet类从哪个类继承,属性值是完整的限定类名。通常不需要使用这个属性,JSP ......
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%
String[] cookiename = {"JSESSIONID","SECURE_AUTH_ROOT_COOKIE","SECURITY_AUTHENTICATION_COOKIE"};
for(int index = 0, len = cookiename.length; index < len; index ++) {
javax.servlet.http.Cookie c = new javax.servlet.http.Cookie( cookiename[index], null);
c.setMaxAge(0);
c.setPath("/");
response.addCookie(c);
javax.servlet.http.Cookie c2 = new javax.servlet.http.Cookie( cookiename[index], null);
c2.setMaxAge(0);
c2.setPath(request.getContextPath());
response.addCookie(c2);
}
//System.out.println("clear cookie LtpaToken");
%> ......
和Java一样,JSP是目前比较热门的一个话题。它是一种在服务器端编译执行的Web设计语言,因为脚本语言采用了Java,所以JSP继承了Java的所有优点。可是在使用JSP程序的过程中,常遇到中文乱码问题,很多人为此头疼不已,笔者就深受其害,而且使用平台不同,中文乱码问题的解决方法也不同,无形中增加了学习JSP的难度。其实,在彻底了解相关原因后,问题还是比较容易解决的。以下是笔者总结的解决方法,相信对大家会有一定的借鉴意义。
字符内码
每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展ASCII码、中国的GB2312-80、日本的 JIS 等,作为该国家(区域)信息处理的基础,有着统一编码的重要作用。由于各本地字符集代码范围重叠,相互间信息交换困难,软件本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,做一致性处理,将特殊的本地化处理内容降低到最少,这就是所谓的国际化(I18N)。各种语言信息被规范为本地信息,而底层字符集采用包含了所有字符的Unicode。
字符内码(character code)指的是用来代表字符的内码。我们在输入和存储文档时都要使用内码,内码分为单字节内码和双字节内码。单字节内码的英文全称是Single-By ......
用C写的图形学填充算法已经很多了,看到不少帖子都是在问关于如何用Java编写图形学的填充算法,说来也巧,我刚好要做一个这个方面的实验,用的是扫描线种子填充算法,由于时间仓促,代码质量可能不算很高,希望大家见谅,并希望大家都来为我指点一下,小弟不胜感激~~
好了,废话就不说了,我们先一起来看一下相关的知识~
扫描线种子填充算法思想
首先填充种子所在的尚未填充的一区段,然后确定与这一区段相邻的上下两条扫描线上位于该区段内是否存在需要填充的新区段,如果存在,则依次把每个新区段最右端的象素作为种子放入堆栈。反复这个过程,直到堆栈为空。
扫描线种子填充算法步骤
1、初始化堆栈。
2、种子压入堆栈。
3、While(堆栈非空)从堆栈弹出种子象素。
{
(1)如果种子象素尚未填充,则:
① 求出种子区段:xleft、xright。
② 填充整个区段。
(2)检查相邻的上扫描线的xleft ≤ x ≤ xright区间内,是否存在需要填充的新区段,如果存在,则把每个新区段在xleft ≤ x ≤ xright范围内的最右边的象素,作为新的种子象素依次压入堆栈。
(3)检查相邻的下扫描线的xleft≤x≤xright区间内, ......
import lotus.domino.*;
import java.io.*;
import java.util.Vector;
import jxl.*;
/*******************************************************************************
* @saveSQMessageToOracle
* @作者:徐华祥
* @2009年10月28日
* @说明:Execl文件的导入
******************************************************************************/
public class inputExecl_new extends AgentBase {
public void NotesMain() {
System.out.println("代理开始");
EmbeddedObject ebd = null;
String srcFile = "";
InputStream is = null;
Workbook wb = null;
Sheet st = null;
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Document currentDoc = agentContext.getDocumentContext();
Database currentDB = agentContext.getCurrentDatabase();
Database wjkhDB ......
一个使用了队列的通用实现:
http://blog.csdn.net/chaosllgao/archive/2009/05/23/4211183.aspx
此文描述了一种更简单的模型
1. 同时只有1个生产者和1个消费者
2. 不用队列,同时只有一个产品
3. 生产者每次生产1个0到100之间的随机数,消费者则把该随机数打印出来。如果产生的随机数为0,则生产者、消费者均退出运行
import java.util.Random;
public class ProducerConsumer
{
public static void main(String[] args)
{
Product product = new Product();
Producer producer = new Producer(product);
Consumer consumer = new Consumer(product);
producer.start();
consumer.start();
}
private static class Product
{
public int value = -1; ......