1)@postconstruct和@preconstruct
从java ee5规范开始,servlet增加了两个影响servlet生命周期的注解(annotation):@postconstruct和@preconstruct。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。
1.1)@postconstruct说明
被@postconstruct修饰的方法会在服务器加载servlet的时候运行,并且只会被服务器调用一次,类似于serclet的inti()方法。被@postconstruct修饰的方法会在构造函数之后,init()方法之前运行。
1.2)@preconstruct说明
被@preconstruct修饰的方法会在服务器卸载servlet的时候运行,并且只会被服务器调用一次,类似于servlet的destroy()方法。被@preconstruct修饰的方法会在destroy()方法之后运行,在servlet被彻底卸载之前。
2)java io的编码问题
2.1)、JAVA读取文件,避免中文乱码。
/**
* 读取文件内容
* @param filePathAndName String 如 c:\\1.txt 绝对路径
* @return boolean
*/
public static String readFile(String filePathAndName) {
String fileContent = "";
try {
File f = new File(filePathAndName);
if(f.isFile()&&f.exists()){
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"UTF-8");
BufferedReader reader=new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
fileContent += line;
}
read.close();
}
} catch (Exception e) {
System.out.println("读取文件内容操作出错");
e.printStackTrace();
}
return fileContent;
}
2.2)、JAVA写入文件,避免中文乱码。
public static void writeFile(String filePathAndName, String fileContent) {
try {
File f = new File(filePathAndName);
if (!f.exists()) {
f.createNewFile();
}
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"UTF-8");
BufferedWriter writer=new BufferedWriter(write);
//PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filePathAndName)));
//PrintWriter writer = new PrintWriter(new FileWriter(filePathAndName));
writer.write(fileContent);
writer.close();
} catch (Exception e) {
System.out.println("写文件内容操作出错");
e.printStackTrace();
}
}
/**
* 本文件名为FileWriterSubstituteSample,实际上是在寻找FileWriter的替代者。
* 因为FileWriter在写文件的时候,其编码方式似乎是System.encoding或者System.file.encoding,
* 在中文win下encoding基本是gb2312,在en的win下基本是iso-8859-1,总之不是utf-8。
* 所以要创建一个utf-8的文件,用FileWriter是不行的。
* 目前不知道如何更改其用来写文件的编码方式,因此对于创建utf-8文件使用如下方式来代替。
*
* 参见:
* http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/
*/
public class FileWriterSubstituteSample {
public static void main(String[] args) {
String path="cn/yethyeth/sample/resources/XML_UTF-8.xml";
try {
OutputStreamWriter out = new OutputStreamWriter(
new FileOutputStream(path),"UTF-8");
out.write("<?xml version="1.0" encoding="utf-8"?><a>这是测试。</a>");
out.flush();
out.close();
System.out.println("success...");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3)Tomcat设为window服务
设置Tomcat为window操作系统的服务介绍。针对解压版的tomcat。
步骤:
3.1). 修改tomcat的bin目录下service.bat文件;
设置服务名和服务显示名称:
set SERVICE_NAME=Tomcat8081 ---服务名
set PR_DISPLAYNAME=Apache Tomcat8081 ---服务的显示名称
【十分重要】:如果想设定此Tomcat使用不同版本JDK,那么就需要在service.bat文件开始处设置JAVA_HOME等参数,这样安装为服务的时候默认就用该JDK版本了。
否则,系统会选择系统默认配置的JAVA_HOME来进行安装。
如:
rem ---------------------------------prj use jdk7------------------------------
echo setting JAVA_HOME by Use default jdk7 path C:\Java\jdk1.7.0_25
set "JAVA_HOME=C:\Java\jdk1.7.0_25"
rem ----------------------------------prj use jdk7-----------------------------
if "%OS%" == "Windows_NT" setlocal
…………
3.2). 在cmd命令窗口,进入tomcat的bin目录,执行service.bat install;
如果不指定服务名,系统会默认设置Tomcat的服务,包括名称和显示名称。
名称取决于service.bat中的设置:
set SERVICE_NAME=Tomcat8081 ---服务名
set PR_DISPLAYNAME=Apache Tomcat8081 ---服务的显示名称
3.3). 在系统“管理”--》“服务” 下找到新添加的tomcat服务,设置为自动可在系统启动的时候自动启动。
【注】:端口不可被其它程序占用,否则启动失败。
4)启停操作
4.1)localstart
set logFullName=G:/log/startService
echo 启动服务实例Tomcat7
net start Tomcat7 >> %logFullName%-node01.txt 2>&1 &
echo 启动服务实例Tomcat8081
echo net start Tomcat8081 >> %logFullName%-node02.txt 2>&1 &
echo 启动日志:%logFullName%
pause
4.2)localstop
set logFullName=G:/log/stopService
echo 停止服务实例Tomcat7
net stop Tomcat7 >> %logFullName%-T7.txt 2>&1 &
echo 停止服务实例Tomcat8081
echo net stop Tomcat8081 >> %logFullName%-T8.txt 2>&1 &
echo 停止日志:%logFullName%
pause
4.3)prdstart
for /f "tokens=1 delims=/ " %%j in ("%date%") do set d1=%%j
for /f "tokens=2 delims=/ " %%j in ("%date%") do set d2=%%j
for /f "tokens=3 delims=/ " %%j in ("%date%") do set d3=%%j
for /f "tokens=1 delims=: " %%j in ("%time%") do set t1=%%j
for /f "tokens=2 delims=: " %%j in ("%time%") do set t2=%%j
for /f "tokens=3 delims=:. " %%j in ("%time%") do set t3=%%j
set rdate=%d1%-%d2%-%d3%_%t1%_%t2%_%t3%
set logFullName=D:/apps/logs/driverplat/startService%rdate%
echo 启动服务实例clustertomcat7_node01 port:9001
net start Tomcat7Driverplat9001 >> %logFullName%-node01.txt 2>&1 &
echo 启动服务实例clustertomcat7_node02 port:9002
net start Tomcat7Driverplat9002 >> %logFullName%-node02.txt 2>&1 &
echo 启动日志:%logFullName%-nodeX.txt
pause
4.4)prdstop
for /f "tokens=1 delims=/ " %%j in ("%date%") do set d1=%%j
for /f "tokens=2 delims=/ " %%j in ("%date%") do set d2=%%j
for /f "tokens=3 delims=/ " %%j in ("%date%") do set d3=%%j
for /f "tokens=1 delims=: " %%j in ("%time%") do set t1=%%j
for /f "tokens=2 delims=: " %%j in ("%time%") do set t2=%%j
for /f "tokens=3 delims=:. " %%j in ("%time%") do set t3=%%j
set rdate=%d1%-%d2%-%d3%_%t1%_%t2%_%t3%
set logFullName=D:/apps/logs/driverplat/stopService%rdate%
echo 停止服务实例clustertomcat7_node01 port:9001
net stop Tomcat7Driverplat9001 >> %logFullName%-node01.txt 2>&1 &
echo 停止服务实例clustertomcat7_node02 port:9002
net stop Tomcat7Driverplat9002 >> %logFullName%-node02.txt 2>&1 &
echo 停止日志:%logFullName%-nodeX.txt
pause
5)huoquipdizhi
/**获取本本地主机地址*/
public static String getLocalHost() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
/**获取远程主机地址*/
public static String getRemoteHost(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
从java ee5规范开始,servlet增加了两个影响servlet生命周期的注解(annotation):@postconstruct和@preconstruct。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。
1.1)@postconstruct说明
被@postconstruct修饰的方法会在服务器加载servlet的时候运行,并且只会被服务器调用一次,类似于serclet的inti()方法。被@postconstruct修饰的方法会在构造函数之后,init()方法之前运行。
1.2)@preconstruct说明
被@preconstruct修饰的方法会在服务器卸载servlet的时候运行,并且只会被服务器调用一次,类似于servlet的destroy()方法。被@preconstruct修饰的方法会在destroy()方法之后运行,在servlet被彻底卸载之前。
2)java io的编码问题
2.1)、JAVA读取文件,避免中文乱码。
/**
* 读取文件内容
* @param filePathAndName String 如 c:\\1.txt 绝对路径
* @return boolean
*/
public static String readFile(String filePathAndName) {
String fileContent = "";
try {
File f = new File(filePathAndName);
if(f.isFile()&&f.exists()){
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"UTF-8");
BufferedReader reader=new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
fileContent += line;
}
read.close();
}
} catch (Exception e) {
System.out.println("读取文件内容操作出错");
e.printStackTrace();
}
return fileContent;
}
2.2)、JAVA写入文件,避免中文乱码。
public static void writeFile(String filePathAndName, String fileContent) {
try {
File f = new File(filePathAndName);
if (!f.exists()) {
f.createNewFile();
}
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"UTF-8");
BufferedWriter writer=new BufferedWriter(write);
//PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filePathAndName)));
//PrintWriter writer = new PrintWriter(new FileWriter(filePathAndName));
writer.write(fileContent);
writer.close();
} catch (Exception e) {
System.out.println("写文件内容操作出错");
e.printStackTrace();
}
}
/**
* 本文件名为FileWriterSubstituteSample,实际上是在寻找FileWriter的替代者。
* 因为FileWriter在写文件的时候,其编码方式似乎是System.encoding或者System.file.encoding,
* 在中文win下encoding基本是gb2312,在en的win下基本是iso-8859-1,总之不是utf-8。
* 所以要创建一个utf-8的文件,用FileWriter是不行的。
* 目前不知道如何更改其用来写文件的编码方式,因此对于创建utf-8文件使用如下方式来代替。
*
* 参见:
* http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/
*/
public class FileWriterSubstituteSample {
public static void main(String[] args) {
String path="cn/yethyeth/sample/resources/XML_UTF-8.xml";
try {
OutputStreamWriter out = new OutputStreamWriter(
new FileOutputStream(path),"UTF-8");
out.write("<?xml version="1.0" encoding="utf-8"?><a>这是测试。</a>");
out.flush();
out.close();
System.out.println("success...");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3)Tomcat设为window服务
设置Tomcat为window操作系统的服务介绍。针对解压版的tomcat。
步骤:
3.1). 修改tomcat的bin目录下service.bat文件;
设置服务名和服务显示名称:
set SERVICE_NAME=Tomcat8081 ---服务名
set PR_DISPLAYNAME=Apache Tomcat8081 ---服务的显示名称
【十分重要】:如果想设定此Tomcat使用不同版本JDK,那么就需要在service.bat文件开始处设置JAVA_HOME等参数,这样安装为服务的时候默认就用该JDK版本了。
否则,系统会选择系统默认配置的JAVA_HOME来进行安装。
如:
rem ---------------------------------prj use jdk7------------------------------
echo setting JAVA_HOME by Use default jdk7 path C:\Java\jdk1.7.0_25
set "JAVA_HOME=C:\Java\jdk1.7.0_25"
rem ----------------------------------prj use jdk7-----------------------------
if "%OS%" == "Windows_NT" setlocal
…………
3.2). 在cmd命令窗口,进入tomcat的bin目录,执行service.bat install;
如果不指定服务名,系统会默认设置Tomcat的服务,包括名称和显示名称。
名称取决于service.bat中的设置:
set SERVICE_NAME=Tomcat8081 ---服务名
set PR_DISPLAYNAME=Apache Tomcat8081 ---服务的显示名称
3.3). 在系统“管理”--》“服务” 下找到新添加的tomcat服务,设置为自动可在系统启动的时候自动启动。
【注】:端口不可被其它程序占用,否则启动失败。
4)启停操作
4.1)localstart
set logFullName=G:/log/startService
echo 启动服务实例Tomcat7
net start Tomcat7 >> %logFullName%-node01.txt 2>&1 &
echo 启动服务实例Tomcat8081
echo net start Tomcat8081 >> %logFullName%-node02.txt 2>&1 &
echo 启动日志:%logFullName%
pause
4.2)localstop
set logFullName=G:/log/stopService
echo 停止服务实例Tomcat7
net stop Tomcat7 >> %logFullName%-T7.txt 2>&1 &
echo 停止服务实例Tomcat8081
echo net stop Tomcat8081 >> %logFullName%-T8.txt 2>&1 &
echo 停止日志:%logFullName%
pause
4.3)prdstart
for /f "tokens=1 delims=/ " %%j in ("%date%") do set d1=%%j
for /f "tokens=2 delims=/ " %%j in ("%date%") do set d2=%%j
for /f "tokens=3 delims=/ " %%j in ("%date%") do set d3=%%j
for /f "tokens=1 delims=: " %%j in ("%time%") do set t1=%%j
for /f "tokens=2 delims=: " %%j in ("%time%") do set t2=%%j
for /f "tokens=3 delims=:. " %%j in ("%time%") do set t3=%%j
set rdate=%d1%-%d2%-%d3%_%t1%_%t2%_%t3%
set logFullName=D:/apps/logs/driverplat/startService%rdate%
echo 启动服务实例clustertomcat7_node01 port:9001
net start Tomcat7Driverplat9001 >> %logFullName%-node01.txt 2>&1 &
echo 启动服务实例clustertomcat7_node02 port:9002
net start Tomcat7Driverplat9002 >> %logFullName%-node02.txt 2>&1 &
echo 启动日志:%logFullName%-nodeX.txt
pause
4.4)prdstop
for /f "tokens=1 delims=/ " %%j in ("%date%") do set d1=%%j
for /f "tokens=2 delims=/ " %%j in ("%date%") do set d2=%%j
for /f "tokens=3 delims=/ " %%j in ("%date%") do set d3=%%j
for /f "tokens=1 delims=: " %%j in ("%time%") do set t1=%%j
for /f "tokens=2 delims=: " %%j in ("%time%") do set t2=%%j
for /f "tokens=3 delims=:. " %%j in ("%time%") do set t3=%%j
set rdate=%d1%-%d2%-%d3%_%t1%_%t2%_%t3%
set logFullName=D:/apps/logs/driverplat/stopService%rdate%
echo 停止服务实例clustertomcat7_node01 port:9001
net stop Tomcat7Driverplat9001 >> %logFullName%-node01.txt 2>&1 &
echo 停止服务实例clustertomcat7_node02 port:9002
net stop Tomcat7Driverplat9002 >> %logFullName%-node02.txt 2>&1 &
echo 停止日志:%logFullName%-nodeX.txt
pause
5)huoquipdizhi
/**获取本本地主机地址*/
public static String getLocalHost() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
/**获取远程主机地址*/
public static String getRemoteHost(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}