随笔-124  评论-49  文章-56  trackbacks-0
 

servlet监听器
在WEB应用中响应特定对象的特定事件
好处:更方便的控制application,session,request对象的发生的特定事件
     可以集中处理特定的事件
-------------------------------------------------------------------
HttpSession监听器接口
1 HttpSessionListener(需要配web.xml)
2 HttpSessionAttributeListener(需要配web.xml)
3 HttpSessionBindingListener
4 HttpSessionActivationListener(需要配web.xml)
-------------------------------------------------------------------
HttpSessionListener
1 sessionCreated()//当session对象产生的时候调用的方法
2 sessionDestroyed()//当session对象消灭的时候调用的方法
web.xml配置
<listener>
 <listener-class>webbook.chapter14.CounterListener(对应的实现类)
 </listener-class>
</listener>
---------------------------------------------------------------------
HttpSessionAttributeListener
1 attributeAdded()//添加时调用
2 attributeReplaced()//替换时调用
3 attributeRemoved()//删除时调用
产生事件的代码
session.setAttribute("username","wangwu");
session.setAttribute("username","lisi");
session.removeAttribute("username");
-----------------------------------------------------------------
HttpSessionBindingListener
1 valueBound();
2 vaoueUnbound();
调用机制
如果一个类实现了HttpSessionBindingListener接口,则当这个类的对象通过session.setAttribute()被绑定到Session对象中时,
则该对象的valueBound()方法被自动调用,当这个对象从Session中删除时(调用session.invalidate()和session.removeAtrribute()
方法,或Session对象过期)valueUnbound()方法将被自动调用.
--------------------------------------------------------------------------------------------------------
HttpSessionActivationListener
1 sessionDidActivate();
2 sessionWillPassivate();
---------------------------------------------------------------------------------
例子:
1 建立CounterListener处理类
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CounterListener implements HttpSessionListener {

 private static long onlineNumber=0;
 public void sessionCreated(HttpSessionEvent se) {
  onlineNumber++;
 }

 public void sessionDestroyed(HttpSessionEvent se) {
  onlineNumber--;
 }
 
 public static long getOnlineNumber(){
  return onlineNumber;
 }
}
2 配置web.xml
<listener>
    <listener-class>com.tags.CounterListener</listener-class>
</listener>
3 JSP页面
<%@page import="com.tags.CounterListener;"%>
<body>
    当前的在线人数:<%=CounterListener.getOnlineNumber() %> <br>
</body>
----------------------------------------------------------------------------
ServletContext监听器接口
ServletContextListener
1 contextInitialized()
2 contextDestroyed()
调用机制
当在web应用中部署了实现该接口的实现类后,在WEB容器加载WEB应用时(如:启动服务器)就会自动调用contextInitialized()方法,
而当WEB容器销毁WEB应用时(如:关闭服务器),会自动调用contextDestroyed()方法.
-----------------------------------------------------------------------------------
ServletContextAttributeListener
1 attributeAdded()
2 attributeReplaced()
3 attributeRemoved()
触发事件的代码
context.setAttribute("counter",new Integer(0));
context.setAttribute("counter",new Integer(100));
context.removeAttribute("counter");
-----------------------------------------------------------
HttpServletRequest监听器
ServletRequestListener
1 requestInitialized();
2 requestDestroyed()
调用机制
与ServletContextListener接口类似,在web应用中部署实现该接口的实现类扣,在HttpServletRequest对象(JSP中的request对象)建立
或者被销毁时,由web容器自动调用requestInitialized()或者requestDestroyed()方法.
--------------------------------------------------------------------------------------
ServletRequestAttributeListener
1 attributeAdded();
2 attributeReplaced();
3 attributeRemoved();
触发事件的代码
request.setAttribute("username","lisi");
request.setAttribute("username","wangwu");
request.removeAttribute("username");

******************************************************************
public class ListenerOnline implements HttpSessionLinstener,ServletContext{
  private  application;
  public void sessionCreated(HttpSessionEvent event){
    Integer n=(Integer)application.getAttrabute("z",1000);
    application.setAttrabute("z",n.IntValue()+1);
   
  }
   public void sessionDestroyed(HttpSessionEvent event){
  }
  public void contextInitialized(ServletContextEvent event){
    application=event.getServletContext();
    application.setAttrabute("z",1000);
  }
   public void contextDestroyed(ServletContextEvent event){
  }
}

<listener>
    <listener-class>com.tags.ListenerOnline</listener-class>
</listener>

<meta http-equiv="refresh" content="3"/>

posted @ 2009-11-29 22:47 junly 阅读(312) | 评论 (0)编辑 收藏

-HttpServletRequest request对象

request.getParameter("param");

request.setAttribute("loginname",object);

request.setCharacterEncoding("gb2312");
输入内容转成中文
-HttpServletResponse response对象

response.setContentType("text/html;charset=gb2312");
设置输出为中文
response.sendRediredt("url");

-RequsetDispatcher dispatcher=request.getRequestDispatcher(url);
定义转发器
dispatcher.forward(request,response);

-HttpSession session对象
创建对象的两种方法
HttpSession session = request.getSession(boolean value);
HttpSession session = request.getSession();
方法一:true时,返回该当前请求相关的会话,如果不存在创建一个新的会话,并返回。
     false时,返回该当前请求相关的会话,如果不存在返回null,不创建会话。
方法二:等同于方法一为true时。
HttpSession接口的方法
session.setAttribute(String name,Object value);
session.getAttribute(String name);//返回Object
session.removeAttribute(String name);//删除
session.invalidate()//当前会话关闭
*/

/*
读取xml文件中的参数值
web.xml
<servlet>
  <init-param>
    <param-name>repeat</param-name>
    <param-value>10</param-value>
  </init-param>
</servlet>
servlet.java
int repeat=Integer.parseInt(this.getInitParameter("repeat"));
*/

/*
得到当前servlet相当信息的方法
request.getServerName()//得到当前请求的服务器名子
request.getRemoteAddr()得到当前请求服务器的IP地址
request.getServerPort()得到当前请求服务器的端口号
request.getProtlcol()得到当前请求的协议版本
request.getContextPath()得到当前请求的上下文地址
request.getScheme()得到当前请求的协议类型
request.getMethod()得到当前请求的提交方式GET
request.getRequestURI()得到当前服务器servlet的映射路径,带上下文
request.getServletPath()得到当前服务器servlet的映射路径

servlet的头信息
Enumeration e=request.getHeaderNames();得到包含header名子的Enumeration类形对象
request.getHeader()得到header名子对应的值
例子:
Enumeration e=request.getHeaderNames();
String name="";
while(e.hasMoreElements)
{
  name=(String)e.nextElement();
  System.out.println(name);
  System.out.println(request.getHeader(name));
}

JSValidation验证框架
url:http://cosoft.org.cn/projects/jsvalidateion
修改validation-framwork.js
var ValidationRoot="/webproject2/js/"
配置validation-config.xml

FCKeditor文本编辑组件
http://www.fckeditor.net/download

posted @ 2009-11-29 22:46 junly 阅读(317) | 评论 (0)编辑 收藏

1 在src下建config.properties文件
config.properties
uname=aaa
pwd=123
2
 InputStream in=this.getClass().getResourceAsStream("/config.properties");
 //in=new FileInputStream("D:/config.properties");
 Properties pro=new Properties();
 try{
  pro.load(in);
  pro.loadFromXML();
  pro.getProperty("uname");
  //(String)pro.get("uname");
  pro.put(key,"value");
 }

class
class.forName(String className)
运行中的对象都是class的一个实例,相关技术-反射
class.getResourceAsStream(String fileName)
查找具有给定名称的资源

Result类在java.servlet.jsp.jstl.sql.Result包中,可以在关闭连接的状态下使用
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
Result result=ResultSupport.toResult(rs);
if(result==null){
 System.out.println("无数据");
}
for(int i=0;i<result.getRowCount();i++){
 Map map=result.getRows()[i];
 map.get("username");
}

作业,连接池,配置文件
<embed src=""/>
歌手表,gid,sex,name,love
歌曲表,id,name,gid,typeid,歌词
类型表,typeid,name
url
controls.play()
controls.stop()

posted @ 2009-11-29 22:45 junly 阅读(502) | 评论 (0)编辑 收藏

应该是中文操作系统的原因,eclipse默认的新项目的编码是GBK,出于对编码支持的考虑,项目组中最好统一要求是UTF-8编码进行开发。

修改eclipse的配置,可以使得eclipse的新建项目的默认编码直接为UTF-8

在菜单栏的

Window->Preferences->General->Workspace->Text file encoding

将其改为UFT-8即可。

这个也是安装完Eclipse之后应该立刻做的一件事

但是这种修改只对当前的workspace有效,如果新建或者切换到一个新的workspace下,还是得做同样的步骤。

同样

Window->Preferences->General->Content Types中可以修改具体的不同格式的文件的默认编码,尤其是HTML,CSS,Javascript等文件的编码最好是修改一下,否则默认的ISO- 8859-1无法支持中文。

不知道如何解决默认安装完是GBK的问题,难道一定要用英文操作系统?

myeclipse6.0下怎么样统一全部文件编码:

windows---->preferences---->myeclipse---->file and editors----->jsp--->把这个目录下的encoding选为你要设置的编码(如UTF-8)
这样,你下次再新建一个JSP页面的时候就默认是以你刚才设置的编码了
因为默认情况下新建一个JSP页面的编码是ISO8859-1的,是不能存中文的,要存中文就得手动改为GBK,UTF-8支持中文的编码,每次新建都要修改手动修改一次编码就很麻烦.
经过上面的设置后就可以统一整个项目的编码而不用再手动设置.

posted @ 2009-11-29 22:39 junly 阅读(697) | 评论 (0)编辑 收藏
在window->perferences->General->Appearance->Colors and Fonts->Basic->Text Font 单击change 修改
posted @ 2009-11-29 22:38 junly 阅读(949) | 评论 (0)编辑 收藏

增强Eclipse ,MyEclipse 的代码提示功能,具体怎么样来配置?下面开始说步骤(注意本人用的

MyEclipse 6.0.1做讲解):


1. 打开MyEclipse 6.0.1,然后“window”→“Preferences”

 
2.       选择“java”,展开,“Editor”,选择“Content Assist”。

3.       选择“Content Assist”,然后看到右边,右边的“Auto-Activation”下面的“Auto 

Activation triggers for java”这个选项。其实就是指触发代码提示的就是“.”这个符号。


4.       “Auto Activation triggers for java”这个选项,在“.”后加abc字母,方便后面的查找

修改。然后“apply”,点击“OK”。


5. 然后,“File”→“Export”,在弹出的窗口中选择“Perferences”,点击“下一步”。


6. 选择导出文件路径,本人导出到桌面,输入“test”作为文件名,点击“保存”。


7. 在桌面找到刚在保存的文件“test.epf”,右键选择“用记事本打开”。


8. 可以看到很多配置MyEclipse 6.0.1的信息


9. 按“ctrl + F”快捷键,输入“.abc”,点击“查找下一个”。


10. 查找到“.abc”的配置信息如下:


如下:

 
11. 把“.abc”改成“.abcdefghijklmnopqrstuvwxyz(,”,保存,关闭“test.epf”。


12. 回到MyEclipse 6.0.1界面,“File”→“Import”,在弹出的窗口中选择“Perferences”,点击

“下一步”,选择刚在已经修改的“test.epf”文件,点击“打开”,点击“Finish”。该步骤和上面

的导出步骤类似。


13. 最后当然是进行代码测试了。随便新建一个工程,新建一个类。在代码输入switch,foreach等进行

测试。你立即会发现,果然出了提示,而且无论是敲哪个字母都会有很多相关的提示了,很流畅,很方

便。


总结:

“Auto Activation triggers for java”这个选项就是指触发代码提示的的选项,把“.”改成

“.abcdefghijklmnopqrstuvwxyz(,”的意思,就是指遇到26个字母和.,(这些符号就触发代码提示功

能了。

顺便说一下,修改类名,接口名等以不同颜色高亮的,可以这样配置在“java”→“enditor”→

“syntac”,右边展开“java”→“classes”,勾上“Enable”这个选项,选择自己喜欢的颜色即可。

当然还有其他相关的颜色配置。具体就不说啦。其实,在“Preferences”这个东西,有很多可以配置的

东西,使得MyEclipse 优化的,具体的就要各个人根据自己个人喜好去配置了。

posted @ 2009-11-29 22:37 junly 阅读(6044) | 评论 (0)编辑 收藏

MyEclipse 快捷键

1Ctrl+M切换窗口的大小
2Ctrl+Q跳到最后一次的编辑处
3F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description
           
F3跳到声明或定义的地方。
            F5
单步调试进入函数内部。
            F6
单步调试不进入函数内部,如果装了金山词霸2006则要把取词开关的快捷键改成其他的。
           
F7由函数内部返回到调用处。
            F8
一直执行到下一个断点。
4Ctrl+Pg~对于XML文件是切换代码和图示窗口
5Ctrl+Alt+IJava文件中变量的相关信息
6Ctrl+PgUp对于代码窗口是打开“Show List”下拉框,在此下拉框里显示有最近曾打开的文件
7Ctrl+/ 在代码窗口中是这种//~注释。
            Ctrl+Shift+/
在代码窗口中是这种/*~*/注释,在JSP文件窗口中是<!--~-->
8Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。
9右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。
10Ctrl+I格式化激活的元素Format Active Elements
             
Ctrl+Shift+F格式化文件Format Document
11Ctrl+S保存当前文件。
              Ctrl+Shift+S
保存所有未保存的文件。
12Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。
              Ctrl+Shift+O
作用是缺少的Import语句被加入,多余的Import语句被删除。
13Ctrl+Space提示键入内容即Content Assist,此时要将输入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷键(用于切换英文和其他文字)改成其他的。
              Ctrl+Shift+Space
提示信息即Context Information
14)双击窗口的左边框可以加断点。
15Ctrl+D删除当前行。

Alt+当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+
当前行和上面一行交互位置(同上)
Alt+前一个编辑的页面
Alt+
下一个编辑的页面(当然是针对上面那条来说了)

Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性

Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter
在当前行插入空行(原理同上条)

Ctrl+Q 定位到最后编辑的地方
Ctrl+L
定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M
最大化当前的EditView (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O
快速显示 OutLine
Ctrl+T
快速显示当前类的继承结构
Ctrl+W
关闭当前Editer
Ctrl+K
参照选中的Word快速定位到下一个
Ctrl+E
快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)

Ctrl+/(小键盘) 折叠当前类中的所有代码

Ctrl+×(小键盘) 展开当前类中的所有代码

Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)

Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)

Ctrl+J 正向增量查找(按下Ctrl+J,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)

Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)

Ctrl+Shift+F4 关闭所有打开的Editer

Ctrl+Shift+X 把当前选中的文本全部变味小写

Ctrl+Shift+Y 把当前选中的文本全部变为小写

Ctrl+Shift+F 格式化当前代码

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(:一般重构的快捷键都是Alt+Shift开头的了)

Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)

Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)

Alt+Shift+C 修改函数结构(比较实用,N个函数调用了这个方法,修改一次搞定)

Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

Alt+Shift+F Class中的local变量变为field变量 (比较实用的功能)

Alt+Shift+I 合并变量(可能这样说有点不妥Inline)
Alt+Shift+V
移动函数和变量(不怎么常用)
Alt+Shift+Z
重构的后悔药(Undo)


Eclipse快捷键大全
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+D:
删除当前行
Ctrl+Alt+↓
复制当前行到下一行(复制增加)
Ctrl+Alt+↑
复制当前行到上一行(复制增加)

posted @ 2009-11-29 22:36 junly 阅读(225) | 评论 (0)编辑 收藏

http://logging.apache.org/
1 导入log4j的jar包

2 在scr下创建log4j.properties
  log4j.properties
  //输入级别debug<info<warn<error
  log4j.rootLogger=debug[info][warn][error],appender1
  //ConsoleAppender输出到控制台,FileAppender输出到文件
  log4j.appender.appender1=org.apache.log4j.ConsoleAppender[FileAppender]
  //写出的目标文件
  log4j.appender.appender1.File=c:/demllog4j.log[.html]
  //写入文件的格式
  log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout[HTMLLayout]
 
  例1,控制台输出:
  log4j.rootLogger=debug,appender1
  log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
  例2,输出到.log文件:
  log4j.rootLogger=debug,appender1
  log4j.appender.appender1=org.apache.log4j.FileAppender
  log4j.appender.appender1.File=c:/demllog4j.log
  log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
  例3,输出到.html文件:
  log4j.appender.appender1=org.apache.log4j.FileAppender
  log4j.appender.appender1.File=c:/demllog4j.html
  log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
  例4,输出到.html文件同时输出到控制台:
  log4j.rootLogger=error,appender1,appender2
  log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  log4j.appender.appender2=org.apache.log4j.FileAppender
  log4j.appender.appender2.File=c:/demllog4j.html
  log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
  log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
  例5,为不同类定义输出格式
  log4j.rootLogger=debug,appender1
  #log4j.logger.com.liuwei=info,appender1
  log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
  log4j.appender.appender1.layout.ConversionPattern=%r [%t] %p - %c - %l - %m%n

3 编写代码

public class Test {
 //参数为当前类的类名,得到logger
 private static Logger logger=Logger.getLogger(Test.class);
 
 public static void main(String[] args) {
                //输出信息
  //if(log.isDebugEnabled()){
       logger.debug("sssssssss");
       logger.info("ssssssss");
       logger.error("ssssssssss");
  //}
 }
}
--------------------------------------------------------------------
log4j核心
 
1 Logger 完成日志信息的处理

  输出级别:
    debug 错误信息     if(log.isDebugEnabled()){log.debug("x="+x);}
    info 日常信息      if(log.isDebugEnabled()){log.info("System started at"+new Date());}
    warn 警告信息      if(log.isDebugEnabled()){log.warn("Server down-returnning");}
    error 程序出错信息 if(log.isDebugEnabled()){log.error("Could not access server",e);}
 
2 Appender 设置日志信息的去向

  org.apache.log4j.ConsoleAppender(控制台)
  org.apache.log4j.FileAppender(文件)
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
  org.apache.log4j.WriterAppender(将日志讯息以串流格式发送到任意指定的地方)
  org.apache.log4j.JdbcAppender(将日志讯息保存到数据库中)

3 Layout 设置日志信息的输出样式

  org.apache.log4j.HTMLLayout (以HTML表格形式布局)
  org.apache.log4j.SimpleLayout (包含日志讯息的级别和讯息字符串)
  org.apache.log4j.TTCCLayout (包含日志产生的时间、执行者、类别等等讯息)
  org.apache.log4j.PatternLayout (可以灵活地指定布局模式)
 
  PatternLayout:
     -%p 输出优先级,即debug,info,warn,error
     -%r 输出自应用启到到输出该日志讯息所耗费的毫秒数
     -%t 输出产生该日志事件的线程名
     -%f 输出日志讯息所属的类的类别名
     -%c 输出日志讯息所属的类的全名
     -%d 输出日志时间点的日期或时间,指定格式的方式:%d{yyyy-MM-dd HH:mm:ss}
     -%l 输出日志讯息所属发生位置,即输出日志讯息的语句处于它所在的类别的第几行
     -%m 输出代码中指定的讯息,如log(message)中的message
     -%n 输出一个换行符号

配置文件
  log4j.properties/log4j.xml

posted @ 2009-11-29 22:34 junly 阅读(293) | 评论 (0)编辑 收藏
     摘要:  1.Linux进入与退出系统 进入Linux系统: 必须要输入用户的账号,在系统安装过程中可以创建以下两种帐号:   1.root--超级用户帐号(系统管理员),使用这个帐号可以在系统中做任何事情。   2.普通用户--这个帐号供普通用户使用,可以进行有限的操作。   一般的Linux使用者均为普通用户,而系统管理员一般使用超级用户帐号完成一些系统管理的工作。如果只需要完成一...  阅读全文
posted @ 2009-11-29 22:32 junly 阅读(431) | 评论 (0)编辑 收藏

request.setCharacterEncoding("gbk");
response.setCharacterEncoding("text/html;charset=gbk");
String name=request.getParameter("username");

name=new String (name.getBytes("iso-8859-1"),"gbk");

1 过滤器
HttpServletRequest req=(HttpServletRequest)request;
request.setCharacterEncoding("gbk");
china.do();
2 子控制器
public class ToChinese extends RequestProcessor{
 public boolean processProcess(HttpServletRequest req,HttpServletRespone rep){
  request.setCharacterEncoding("gb2312");
  return true;
 }
}
struts-config.xml
<controller processorClass="com.org.ToChinese"/>

posted @ 2009-11-29 22:30 junly 阅读(229) | 评论 (0)编辑 收藏
仅列出标题
共18页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last