??xml version="1.0" encoding="utf-8" standalone="yes"?>
*
*/
public static String doEncrypt(String xmlStr) {
try {
return URLEncoder.encode(xmlStr, "GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "加密错误";
}
/**
* 解密
* @param saveFile
*/
public static void decrypt(File saveFile) {
try {
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(saveFile));
String tempString = null;
String str2 =null;
while ((tempString = reader.readLine()) != null) {
str2=URLDecoder.decode(tempString);
}
FileOutputStream fos = new FileOutputStream(saveFile);
fos.write(str2.getBytes());
fos.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println(URLDecoder.decode("C:\\Documents and Settings\\chenchangqing\\Desktop\\实物转移_20110824030821.xml", "GBK"));
}
static {
System.out.println("static自由块被执行"); //先执行静态块
counter = 1;
}
public static int getTotalCount() {
return counter;
}
public Count() {
counter++;
serialNumber=counter;
}
public static void main(String[] args)
{
System.out.println("main() invoked");
System.out.println("counter = "+Count.counter);
Count t=new Count();
System.out.println("counter = "+Count.counter+" "+t.serialNumber);
}
}
java.lang.Math是一个finalc,不可被承,final变量是引用变量,则不可以改变它的引用对象Q但可以改变对象的数据,finalҎ(gu)不可以被覆盖Q但可以被重载?br />
如:(x)
class Aclass
{
int a;
//构造器
public Aclass()
{
a = 100;
}
final public void paint(){
System.out.println("55555555");
}
final public void paint(int i){
System.out.println(i);
}
public void setA(int theA)
{
a = theA;
}
public int getA()
{
return a;
}
}
//定义一个类来测?br />
public class TestFinal
{
//如果final变量是引用变量,则不可以改变它的引用对象Q但可以改变对象的数?br />
final Aclass REF_VAR=new Aclass();
public static void main(String[] args)
{
TestFinal tf = new TestFinal();
tf.REF_VAR.setA(1);
System.out.println(tf.REF_VAR.getA());
tf.REF_VAR.paint();
tf.REF_VAR.paint(1);
}
}
1Q微软目前没有发布针对SQL Server 2008专用的JDBC驱动E序Q用SQL Server 2005 的就可以了,但是Q需要注意:(x) SQL Server 2008的新功能无法使用Q这个必ȝ专用的JDBC发布之后才能使用。下载地址Q?
Microsoft SQL Server 2005 JDBC Driver 1.2
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=c47053eb-3b64-4794-950d-81e1ec91c1ba
2Q设|端口ؓ(f)固定端口Q?/p>
SQL Server 配置理器,按图讄卛_
注意Q动态端口设为空Q即可禁用动态端?/p>
q接的写法:(x)
jdbc:sqlserver://192.168.3.6:1368;databaseName=数据库名U?user=用户?password=密码
需要注意:(x)
1. 最连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,会(x)有大量数据库q接资源被浪贏V?br />
2. 最大连接数是连接池能申L(fng)最大连接数Q如果数据库q接h过此数Q后面的数据库连接请求将被加入到{待队列中,q会(x)影响之后的数据库操作?/p>
数据库连接池的两个Q务:(x)
1. 限制每个应用或系l可以拥有的最大资源,也就是确定连接池的大(PoolSizeQ?br />
2. 在连接池的大(PoolSizeQ范围内、最大限度地使用资源Q羃短数据库讉K的用周期?/p>
例如Q?物理q接?00个,每个q接提供250个StatemetQ那么ƈ发的StatementL?00*250=50000个?/p>
Java开源连接池Q?br />
Jakarta DBCP 可直接在应用E序中用。(比较常用Q集成在Tomcat和Struts中)(j)
C3P0是Hibernate的默认数据库q接池。(常用QHibernateQ?br />
其他的还有Proxool、DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnectionPoolManager?/p>
DBCP代码实现Q?br />
//创徏数据?br />
public static DataSource setupDataSource(String connectURI) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(org.gjt.mm.mysql.Driver);
ds.setUsername("username");
ds.setPassword("password");
ds.setUrl(connectURI);
return ds;
}
//关闭数据?br />
public static void shutdownDataSource(DataSource ds) throws SQLException {
BasicDataSource bds = (BasicDataSource)ds;
bds.close();
}
//数据源的使用
DataSource dataSource = getDataSource();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = dataSource.getConnection();
pstmt = conn.prepareStatement("select * from users");
rs = pstmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getInt("id"));
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
在Tomcat中配|数据库q接池:(x)
我们使用Tomcat中lib文g夹下的tomcat-dbcp.jar?br />
1. 修改server.xml文g?lt;Service>中写入以下代?
<Context path="/WebProject" docBase="WebProject" reloadable="true" crossContext="true">
<Resource auth="Container" name="jdbc/CompanyDB" type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DataBaseName=Company"
username="sa"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000"
removeAbandoned=“true”
removeAbandonedTimeOut="10"
logAbandoned="true"/>
</Context>
pathQ工E\径?br />
docBaseQ工E名字?br />
nameQJNDI的名字?br />
typeQ数据源的类?br />
factoryQ指定生成的DataReource的factorycdQ默认DBCP工厂cR?br />
driverClassNameQ数据库驱动名?br />
urlQ数据库q接的URL?br />
usernameQ数据库用户名?br />
passwordQ数据库密码?br />
maxActiveQ最大连接数据库敎ͼ设ؓ(f)0表示没有限制?br />
maxIdleQ最大等待数量,设ؓ(f)0表示没有限制?br />
maxWaitQ最大等待秒敎ͼ单位为ms?br />
removeAbandonedQ是否自我中断,默认为false?br />
removeAbandonedTimeOutQ几U后?x)自我中断,removeAbandoned必须为true?br />
logAbandonedQ是否记录中断事Ӟ默认为false?/p>
2. 修改web.xml文gQ增加一个标{,输入以下代码Q?br />
<resource-ref>
<description>Company Connection</description>
<res-ref-name>jdbc/CompanyDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
res-ref-nameQ指定JNDI的名字?br />
res-typeQ指定资源类名?br />
res-authQ指定资源的Manager?br />
3. 代码中用JNDI代码q行获取Q?br />
Context ctx = new InitalContext()Q?br />
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/CompanyDB");
Connection conn = ds.getConnection();
注意Qjava:comp/env/ 是java中JNDI固定写法?/span>
注意Q如果该配置出现错误Q采用另一U方式进行配|?/span>
在tomcat中的server.xml不进行配|,而在context.xml中进行设|?br />
代码如下Q?br />
<Resource name="jdbc/CompanyDB" type="javax.sql.DataSource" password="root"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxIdle="2" maxWait="5000" username="sa" url="jdbc:sqlserver://localhost:1433;DataBaseName=Company" maxActive="100"/>
web.xml的设|同上一个配|一栗?br />
request(h)
//获取h属性的?br />
request.getParameter("属性名");
多用于表单提交和URL参数的传递的取?/p>
JSp内置对象生命周期Q?br />
out 只在本jsp面使用 无生命周?br />
request 生命周期 一ơ请?
response 生命周期 一ơ响?br />
session 生命周期 目览器关闭时Q生全周期结束,默认不操作项目超q?0分钟生命周期l束
application 生命周期 当开启Tomcat服务器时创徏Q关闭Tomcat服务器时l束生命周期 (作用Q统计服务器讉K人数或流?
面跌{:
response.sendRedirect("admin/one.jsp") 重定?br />
RequestDispatcher h跌{
两者实现的效果相同
二者的区别Q?br />
1?br />
URL 地址的变化用response.sendRedirectӞRequestDi.spatcher不会(x)使URL地址q行变化?br />
RepuestDispatcher 是服务器端请求机制的跌{
response.sendRedirect 是客L(fng)h机制的重定向
2?br />
RequestDispatcher传值通过JSP-Servlet-JSp形式直接传入C一个JSp面
response.sendRedirect 传值通过JSP-Servlet-JSP形式Q只能够传递到h机制重定向这之前
3?br />
如果目要蟩转到另外一个服务器的页面时Q用response.sendRedirectq行重定?br />
4?br />
我们量使用RequestDispatcher方式Q因为是服务器响应,所以在web容器执行效率较高
RequestDispatcher什么时候用呢Q?br />
目中不q行面的交互蟩转的时候,例如一个界面的增、删、改、查Q或者相兌同类型模块之间的跌{
response.sendRedirect重定向什么时候用呢Q?br /> 无关联的不同模块间蟩转用,例如Q用L(fng)面模块蟩转到产品信息界面模块
5?br />
RequestDispatcher基本上认定用在Servlet里面
response.sendRedirect 用在Servlet和JSP面较多
重定向传?只媄(jing)响requestQ不影响session的传?/p>
session何时使用?
传值时量不要使用session
购物车的实现必须使用session对象
session.removeAttribute("name") 全部删除物品
如果选择性删除?
传入要删除的购物信息主键id|Ҏ(gu)id值支查找集合中的对应信息Q然后做集合中的删除操作
for(Product product : list){
if(deleteid==product.getid()){
list.remove(product);
}
}
session.setAttribute("gouwu",list)
post提交方式q处理
中文q问题
request.setcharacterEncoding("UTF-8");
处理get方式提交的ؕ码方式处?br />
String names=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")
package com.qhit.s2.t13.dao;
import java.util.List;
import com.qhit.s2.t13.javaben.User;
public interface IUserDAO {
public List<User> findAll();
}
2、JavaBeanQ?br />
package com.qhit.s2.t13.javaben;
public class User {
private Integer id;
private String username;
private String password;
public User() {
super();
}
public User(Integer id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3、数据库q接Q?/p>
package com.qhit.s2.t13.dao.impl;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private java.sql.Connection conn = null;
// public final static String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
// public final static String URL = "jdbc:sqlserver://localhost:1433;DataBaseName=Company";
// public final static String DBUSER = "sa";
// public final static String DBPASS = "root";
public java.sql.Connection getConnection() {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;DataBaseName=Company",
"sa", "root");
return conn;
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
public void closeConnection() {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4、实现接口:(x)
package com.qhit.s2.t13.dao.impl;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.qhit.s2.t13.dao.IUserDAO;
import com.qhit.s2.t13.javaben.User;
public class UserDAOImpl implements IUserDAO {
public List<User> findAll() {
List<User> userList = new ArrayList<User>();
String sql = "select * from users";
DBConnection db = new DBConnection();
try {
// System.out.println(db.getConnection());
PreparedStatement ps = db.getConnection().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs != null) {
while(rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("userName"));
user.setPassword(rs.getString("password"));
userList.add(user);
}
}
rs.close();
ps.close();
db.closeConnection();
return userList;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
5、工?/p>
package com.qhit.s2.t13.dao.impl;
import com.qhit.s2.t13.dao.IUserDAO;
public class DAOFactory {
public static IUserDAO getUserDAO() {
return new UserDAOImpl();
}
}
6、主函数Q?/p>
package main;
import java.util.List;
import com.qhit.s2.t13.dao.impl.DAOFactory;
import com.qhit.s2.t13.javaben.User;
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<User> list = DAOFactory.getUserDAO().findAll();
if(list != null) {
System.out.println("chenggong");
} else {
System.out.println("shipai");
}
}
}