JAVA经验的一些记录

Cron表达式的配置()开始时间:2008-12-29,结束时间:2009-01-10在这区间的每天晚上的23时59分59秒执行:

String cronExpression = "59 59 23 * * *";  
Trigger trigger = new CronTrigger(name, group, cronExpression);  
java.util.Calendar startTime = java.util.Calendar.getInstance();  
startTime.set(2008, 11, 29);  
java.util.Calendar endTime = java.util.Calendar.getInstance();  
endTime.set(2009, 0, 10);  
trigger.setStartTime(startTime.getTime());  
trigger.setEndTime(endTime.getTime());

 


JSP中实现在某页面停留若干秒后,自动重定向到另一页面:
<meta http-equiv="refresh" content="300; url=target.jsp">
通过setHeader来实现:
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);

 

 


java的GZip解压问题:
BufferedReader gzipReader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream

(fileName))));
            String tmp = null;
            while((tmp=gzipReader.readLine())!=null){
                System.out.println("文件行:"+tmp);
            }

 

 

Hibernate中数据类型:
自定义类型,继承org.hibernate.usertype.UserType类。存储格式可以自己定制,
比如逗号分隔。配置的时候指定用自己定义的类型,比如@Type(type = "com.XXX.StringArrayType")

 

怎么判断是浏览器访问页面?
览器会在发送request的时候,在head部分加一些东西,比如浏览器版本和操作系统版本(User-Agent),
如果是是用手机,还可能有手机号。所以如果你用比如socket之类的方式可能就忽略了这些内容,
如果server端验证这些信息,自然就无法访问了。
在servlet中request.getHeader("User-Agent")可以得到用户的浏览器与操作系统的信息

 

 

 

httpclient怎么才可以不遵守robots.txt:
  HttpClient httpClient = new HttpClient();
  //创建GET方法的实例
  GetMethod getMethod = new GetMethod("http://www.dianping.com");
  //robots.txt是根据User-Agent来判断哪些可以访问,我这里随便设了一个值,就可以获取到页面了
  getMethod.setRequestHeader( "User-Agent", "fake");
  //使用系统提供的默认的恢复策略 \\
 


  字符串生僻字乱码问题:
 使用Character对象控制字符: 16位以外的字符, 需要你做特殊判断。
 char 并不是一个完整的UNICODE实现。 如果要使用Surrogate区域的字符,
 也就是16位以上的字符, 需要用2个char来表示你的一个Surrogate字符, 你要这么写程序:
if(Character.isSurrogatePair(c1, c2)){
  int i = Character.toCodePoint(c1, c2);
  String s = new String(Character.toChars(i));
  system.out.println(s);
}

firefox的不缓存:
response.setHeader("Pragma","No-cache");         
response.setHeader("Cache-Control","no-cache");  
response.setHeader("Cache-Control", "no-store");  
response.setDateHeader("Expires",0); 

 

 

 

HttpURLConnection SetRequestMethod("GET")没有Get请求,服务器端处理都是dopost处理的:
httpurlconnection.setDoOutput(true); 就把请求改变为post请求了,请求头的输出并不需要通过httpurlconnection的输出流,

只要设置就行,httpurlconnection会在你需要得到服务器响应的时候使用socket连接web服务器,将请求头输出到web服务器,所以

这样写就可以了:
public static void doPost() {
try {
url = new URL("http://www.XXXX.com/blogs/list");

httpurlconnection = (HttpURLConnection) url.openConnection();
//httpurlconnection.setDoOutput(true); 这一句不要
//httpurlconnection.setRequestMethod("GET"); 这一句不要,缺省就是get
// httpurlconnection.getOutputStream().write(getFileString().getBytes());

 


enum类型时,我们应该注意到enum类型有如下的一些特征。

1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。

2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义变量一样定义其它

任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。
3.Enum默认实现了java.lang.Comparable接口。

4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.

5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自

己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。
6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。

7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里

Color.Red.ordinal()返回0。
 


防止SQL注入的正则表达式:(不能有',;,or,OR,AND) %27 ',%3B ;
2.1、检测SQL meta-characters的正则表达式 /(\%27)|(\')|(\-\-)|(\%23)|(#)/ix
2.2、修正检测SQL meta-characters的正则表达式 /((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|(:))/i
2.3、典型的 SQL 注入攻击的正则表达式 /\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
2.4、检测SQL注入,UNION查询关键字的正则表达式 /((\%27)|(\'))union/ix(\%27)|(\') - 单

 

JSP是使用如下的语法格式来创建cookie的:   
Cookie cookie_name =new Cookie("Parameter","Value");   例如:
Cookie newCookie =new Cookie("username","wolf");
response.addCookie(newCookie);   
解释:JSP是调用Cookie对象相应的构造函数Cookie(name,value)用合适的名字和值来创建Cookie,然后 Cookie可以通过

HttpServletResponse的addCookie方法加入到Set-Cookie应答头

 


如果在同一个窗口来调用Servlet,这时客户端已经有了一个临时Cookie,就是JSESSIONID,因此,会将这个Cookie放到HTTP头的

Cookie字段中发送给服务端。服务端在收到这个HTTP请求时就可以从Cookie中得到JSESSIONID的值.但是在不同的窗口打开Servlet

时,将会得到不同的SESSION,我们可以使用永久Cookie将这个Session ID保存在Cookie文件中,这样就算在新的IE窗口,也可以共

享Session对象
Cookie cookie = new Cookie("JSESSIONID", session.getId());  
cookie.setMaxAge(3600);  
response.addCookie(cookie);  Cookie对象将JSESSIONID写入了Cookie文件,并使用setMaxAge方法将Cookie超时时间设为3600秒

 

 

 

一个类实现了 Serializable接口, 我们就可以把它往内存地写再从内存里读出而"组装"成一个跟原来一模一样的对象. 不过当序列

化遇到单例时,这里边就有了个问题: 从内存读出而组装的对象破坏了单例的规则. 单例是要求一个JVM中只有一个类对象的, 而现

在通过反序列化,一个新的对象克隆了出来.
解决方法:
1.在单例类中覆写private Object readResolve() throws ObjectStreamException { 直接返回单例对象。这样当JVM从内存中反序

列化地"组装"一个新对象时,就会自动调用这个 readResolve方法来返回我们指定好的对象
2。调用ObjectInputStream的readUnshared方法 从 ObjectInputStream 读取“非共享”对象。

 

 

 

java 启动时设置代理:

普通代理:

System.getProperties().put("proxySet","true");    //是否通过代理进行连接

System.getProperties().put("proxyHost","192.168.0.26");  //代理服务器

System.getProperties().put("proxyPort","808"); //代理监听的端口

Socket4 代理:

   

 

 

代理在授权用户访问因特网之前,要求用户输入用户名和口令:

URLConnectionconnection=url.openConnection();
Stringpassword="username:password";
StringencodedPassword=base64Encode(password);
connection.setRequestProperty("Proxy-Authorization",encodedPassword);

借助用户名和口令进行认证的方法不起作用。应将"Basic"置于认证字符串的开头;例如:
StringencodedPassword=base64Encode(password);
应该是:
StringencodedPassword="Basic"+base64Encode(password);

 

FTP代理

System.getProperties()..put("ftpProxySet","true");
System.getProperties()..put("ftpProxyHost","proxy-host-name");
System.getProperties()..put("ftpProxyPort","85");

 

System.getProperties().put("socksProxySet","true");   

System.getProperties().put("socksProxyHost","192.168.0.26");  

System.getProperties().put("socksProxyPort","808");

 

 

 

CAS单点登陆:

CAS用来标志用户的token是存在它自己的域名下的,不是存在web应用的域名下的.CAS判断用户登录由agent决定,agent验证用户信息有两种处理.
1.如果这个用户是以前没登录过的,也就是说这个web应用的域名下没有一个agent颁发的sessionid(在cookie里)的话,那么它会跳转到CAS server的登录界面(这里由CAS server决定是否显示登录界面,还是直接就跳转回来,也就是不是每次都要求输入密码登录的).
2.CAS的登录界面会有两种处理.如果以前没登录过,也就是在CAS server自己的域名下,没有用户的token的话,就要求登录.如果有token的话,就返回一个ticket(也就是不显示登录界面直接重定向返回了).
然后接第一步里面,agent收到ticket以后就提交给CAS server验证,并取得返回信息(是个xml,cas的协议规定的,也可以用saml之类的,这个地方可以取得除了用户姓名以外的信息,这样就可以做同步了,权限的问题可以这么解决).然后agent就保存此时的session,把sessionid放到该web应用域名下的cookie里.
以上逻辑说明了,标志用户身份的token在CAS server的域名下,每个web应用不保存用户身份.因此跨域是绝对没问题的.只是single sign off就需要CAS server的配合了,要把那个token删掉.
不过如果标志身份的token不存在,而sessionid存在,那还是被认为是登录的,只不过是在等待那个session timeout而已.

 

apache更改日志级别:

打开conf/httpd.conf找到LogLevel就可以更改日志等级啦.

Level  Description  Example 
emerg  紧急 - 系统无法使用。 "Child cannot open lock file. Exiting"
alert  必须立即采取措施。 "getpwuid: couldn’t determine user name from uid"
crit  致命情况。 "socket: Failed to get a socket, exiting child"
error  错误情况。 "Premature end of script headers"
warn  警告情况。 "child process 1234 did not exit, sending another SIGHUP"
notice  一般重要情况。 "httpd: caught SIGBUS, attempting to dump core in …"
info  普通信息。 "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers

 

你可能感兴趣的:(java,应用服务器,正则表达式,SQL Server,socket)