java web 常用代码

java web 常用代码
java web 常用代码

java web 常用代码

1. Jdbc的六个编程步骤

1. 注册一个驱动

注册驱动程序有三种方式:

方式一:Class.forName(“oracle.jdbc.driver.OracleDriver”);

JAVA 规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动注册到驱动程序管理器中。

方式二:Driver drv = new oracle.jdbc.driver.OracleDriver();

DriverManager.registerDriver(drv);

方式三:编译时在虚拟机中加载驱动

javac –Djdbc.drivers = oracle.jdbc.driver.OracleDriver xxx.java

java –D jdbc.drivers=驱动全名类名

使用系统属性名,加载驱动 -D 表示为系统属性赋值

附 : mysql 的 Driver 的全名 com.mysql.jdbc.Driver

SQLServer 的 Driver 的全名 com.microsoft.jdbc.sqlserver.SQLServerDriver

2. 取得一个连接

C onn = DriverManager.getConnection(jdbcURL,user N ame,password);

3. 获得一个Statement声明对象

Statement st = conn.createStatement();

PreparedStatement ps = conn.prepareStatement(sql);

CallableStatemetn cs = conn.prepareCall(sql);

4. 通过Statement对象执行Sql语句

sta.execute(String sql); 如果返回一个结果集则返回true,否则返回false。

sta.executeQuery(String sql);返回一个查询结果集。

sta.executeUpdate(String sql);返回值为 int 型,表示影响记录的条数。

将 sql 语句通过连接发送到数据库中执行,以实现对数据库的操作。

5. 若有结果集ResultSet则处理结果集

ResultSetMetaDate rsmd = rs.getMetaData();

int columnCount = rsmd.getColumnCount();

W hile(rs.next()){

for(int i = 1; i <= columnCount; i++)

{

if(i != 1) System.out.print(",");

String name = rsmd.getColumnName(i); //取得第i列的列名称 String value = rs.getString(i); //取得第i列的值

System.out.print(name + "=" + value);

}

}

6. 关闭资源

2. 第一个Jdbc程序

public class AccountDaoBad

{

public void select()

{

Connection con = null;

Statement st = null;

ResultSet rs = null;

try

{

Class.forName("oracle.jdbc.driver.OracleDriver");

/** static init block in OracleDriver*/

String jdbcURL = “jdbc:oracle:thin:@192.168.0.5:1521:tarena”;

con = DriverManager.getConnection(jdbcURL, "sd0703", "sd0703");

st = con.createStatement();

System.out.println(st.getFetchSize());

String sql = "select id,no,owner,pwd,cdate,balance from sd0703_account";

rs = st.executeQuery(sql);

while(rs.next())

{

System.out.print("id=" + rs.getInt(1));

System.out.print(",no=" + rs.getString(2));

System.out.print(",owner=" + rs.getString(3));

System.out.print(",pwd=" + rs.getString(4));

System.out.print(",cdate=" + rs.getDate(5));

System.out.println(",balance=" + rs.getDouble(6));

}

}catch(SQLException e)

{

e.printStackTrace();

throw new RuntimeException(e.getMessage());

}catch(ClassNotFoundException e)

{

e.printStackTrace();

throw new RuntimeException(e.getMessege());

}finally

{

try{ con.close();}catch(Exception e) {e.printStatckTrace();} }

}

3. 常用类

1. Connection, Statement, ResultSet,

4. 2.0新特性

(1)事务管理与图片的存储

public class ImageLibraryService

{

public void addImage(long id, String imageName, String path) throws SQLException

{

Connection con = null;

PreparedStatement ps = null;

ResultSet rs = null;

try

{

con = ConnectionFactory.getConnection();

con.setAutoCommit(false);

String sql = "insert into ImageLibrary(id, name, image)";

sql += " VALUES(?, ?, empty_blob())";

ps = con.prepareStatement(sql);

ps.setLong(1, id);

ps.setString(2, imageName);

ps.executeUpdate();

ps.close();

ps = con.prepareStatement("select image from ImageLibrary WHERE id = ? for update ");

ps.setLong(1, id);

rs = ps.executeQuery();

if (rs.next())

{

Blob image = rs.getBlob(1);

OutputStream out = image.setBinaryStream(0);

BufferedOutputStream bufferedOut = new BufferedOutputStream(out); BufferedInputStream bufferedIn = new BufferedInputStream(new FileInputStream(path));

int c;

while ((c = bufferedIn.read()) != -1)

{

bufferedOut.write(c);

}

bufferedIn.close();

bufferedOut.close();

}

https://www.360docs.net/doc/5713323715.html,mit();

} catch (Exception e)

{

e.printStackTrace();

try

{

con.rollback();

} catch (SQLException se) { }

throw new SQLException(e.getMessage());

} finally

{

JdbcUtil.close(rs, ps, con);

}

}

//以下代码没有进行细致的异常捕获

public void restoreImage(long id, String filename) throws Exception {

Connection con = ConnectionFactory.getConnection();

Statement st = con.createStatement();

String sql = "SELECT image From ImageLibrary Where id = " + id; ResultSet rs = st.executeQuery(sql);

while (rs.next())

{

Blob image = rs.getBlob("image");

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename));

BufferedInputStream in = new

BufferedInputStream(image.getBinaryStream());

int c;

while ((c = in.read()) != -1) out.write(c);

in.close();

out.close();

}

}

}

(2)结果集游标的上下游动

con = ConnectionFactory.getConnection();

st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_READ_ONLY);

String sql = "select id,no,owner,pwd,cdate,balance from sd0703_account";

rs = st.executeQuery(sql);

rs.afterLast(); //将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。while(rs.previous())

{

System.out.print("id=" + rs.getInt(1));

System.out.print(",no=" + rs.getString(2));

System.out.print(",owner=" + rs.getString(3));

System.out.print(",pwd=" + rs.getString(4));

System.out.print(",cdate=" + rs.getDate(5));

System.out.println(",balance=" + rs.getDouble(6));

}

注:ResultSet静态常量字段(参见javax.sql.ResultSet)

ResultSet.TYPE_SCROLL_INSENSITIVE

该常量指示可滚动但通常不受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。ResultSet.CONCUR_READ_ONLY

该常量指示不可以更新的 ResultSet 对象的并发模式。

Hibernate部分

1. 两种配置文件

Hibernate配置文件如下:

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"https://www.360docs.net/doc/5713323715.html,/hibernate-configuration-3.0.dtd">

com.mysql.jdbc.Driver

jdbc:mysql://127.0.0.1:3306/shopping_cart chujq

7729

java:comp/env/jdbc/mysql

-->

org.hibernate.dialect.MySQLDialect

true

true

org.hibernate.cache.NoCacheProvider

在以上的配置文件中的内容包括以下部分:

(1)配置数据库连接的信息以及数据库使用的言

(2)运行中SQL语句的显示与格示

(3)是否使用缓存

(4)映射类配置文件

(5)若在META-INF的context.xml中配置数据源则使用:

java:comp/env/jdbc/mysql Context.xml文件如下:

maxActive="10" maxIdle="5" maxWait="-1"

username="root" password="1234"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk "/>

类映射文件Student.hbm.xml

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"https://www.360docs.net/doc/5713323715.html,/hibernate-mapping-3.0.dtd">

2. Hibernate的编程步骤

具体可以分为以下七个步骤:

1.Configuration = new Configuration();

2.SessionFactory sessionFactory = config.configure().buildSessionFactory(); 3.Session session = sessionFactory.openSession();

4.Transaction trans = session.beginTrasation();

5.S ession.save(),session.update(),session.createQuery(hql).executeUpdate()等

6.https://www.360docs.net/doc/5713323715.html,mit()或发生异常时执行trans.rollback()

7.session.close()

说明:其中第五步的session操作可以按以下两种方式进行:

(1)先得到一个Query,再通过Query来执行相关操作,如query.list(),

query.setString().executeUpdate()

hql = "delete from Order where id = :id";

session.createQuery(hql).setInteger("id", 1).executeUpdate();

(2)直接操作session.save(),session.update(),session.delete(),session.get(). session.load(),session.saveOrUpdate()

String hql = "update Employee e set e.salary = e.salary + 1000";

query.executeUpdate(hql);

3. 5种ID策略

下面以表一个用户名为例:

3.

id_values

current_id

10

说明:在数据库有一个单行单列(current_id)的表(id_values)用于存储一个高位值。4.

users_sc_se

说明:仅适用于支持sequence的数据库,如:Oracle,DB2

5.

users_sc_se

10

说明:(1)sequence的作用相当于使用hilo中表id_values中所存储的currentid,

(2)适用于支持sequence的数据库,如:Oracle,DB2

4. 3种映射关系

1.一对一关联

1.1 共享主键

一个表使用的主键引用另一个表的主键,而不是自己产生的。也就是说一个表主键的产生要依赖另外一个表的主键。所以:

对表中记录而言,只有主表中有相应记录,其从表才可以有记录并使用主表的主键

对类对象而言只有被参照的对象存在了,才能创建参照对象

(1)建表

假设有汽车和引擎两个实体,它们存在着一对一的关系,我们可以通过共享主键来建立两者的关系。其DDL语名如下:

(2)写对象关系映射文件car.hbm.xml和Engine.hbm.xml

汽车类的配置文件:Car.hbm.xml

引擎类的配置文件:E ngine.hbm.xml

car

foreign-key="fk_engine_car_pk"/>

说明:id产生器中指明了使用foreign方式产生,参数指出使用属性car的相关内容。

节中的car属性就是generator参数中的car.该节把类Car对应的表与Engine对就的表关联起来。注意配置文件的依据依然是Car类与Engine类定义的各个属性。

1.2 使用外键关联

(1)建表

(2) 写对象关系映射文件

汽车类的配置文件:Car.hbm.xml

cascade="save-update"/>

注:其中property-ref="car"指定关联类Engine类的car属性与本类主键对应。如果没有指定,会使用对方关联类 Engine的主键关联。它是可选的。

C ascade=”save_update”指出删除不级联。

引擎类的配置文件:Engine.hbm.xml

本身属性car可以多对一。但时在表中使用了Unique限制,且在Car.hbm.xml中也使用了进行了限制.

2.一对多关联

使用订单(Order)与订单项(Item)作为模型来讨论。一个订单包含多个订单项。

单向关联:在单的一方不需要设置存放多方的集合属性。

双向关联:在单的一方需要有一个set属性来存储多的一方

(1)建表

(2)写对象关系映射文件

order_o2m_seq

注意:一定要加上inverse=”true”,来说明关联(那外键约束)只需一方来维护。当关联类Iitem改变时,不会调用Update来更新本类的主键。

建立关联时,只要在关联类中加入属性OrderId作为关联类表的外键,并以此来与本类关联。

item_m2o_seq

3.多对多关联

这时选择班级(TarenaClass)与课程(Course)的对应关系作为讲座多对多关系的模型,不同的班级开设不同的课程。

实质上多对多的关系就相当于两个一对多的关系。

(1)建表

(2) 写对象关系映射文件

说明: a.多对多有双向关联。

b. 多对多引用的是集合对象

c.需要用第三张表来维持多对多关系。

d.写配置文件的时候many-to-many标签要放在set标签内,

总是和本类的主键id对应

d. 同样也要加上inverse=”true”,在多对多关联时,如果一方改变,则会另一方

也会执行额外的操作来维护外键约束.应让一方来维护数据库的完整性即可。

Servlet部分

1. 第一个Servlet程序

package com.allanlxf.serv.basic;

import javax.servlet.*;

import java.io.*;

public class TimeServlet implements Servlet

{

private ServletConfig config;

public TimeServlet()

{

System.out.println("TimeServlet()");

}

public void init(ServletConfig config) throws ServletException

{

this.config = config;

System.out.println("init(" + config + ")");

}

public void service(ServletRequest request, ServletResponse response)

throws ServletException, IOException

{

System.out.println(this);

System.out.println("service(" + request + "," + response + ")"); getServletConfig();

PrintWriter out = response.getWriter();

out.println("

");

out.println(new java.util.Date());

out.println("

");

out.close();

}

public void destroy()

{

System.out.println("destroy");

}

public String getServletInfo()

{

return "time servlet by allan version 1.0";

}

public ServletConfig getServletConfig()

{

return config;

}

}

2. 编写及布署Servlet类

(1)编写一个类继承自HttpServlet

package com.allanlxf.serv.basic;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class HttpTimeServlet extends HttpServlet

{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("");

out.println("");

out.println("currentTime");

out.println("");

out.println("");

out.println("

Current Time is

");

out.println("


");

out.println(new java.util.Date());

out.println("");

out.println("");

out.close();

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

doGet(request, response);

}

}

(2)在Tomcat中布署一个myFirst-app web应用

---Tomcat

---webapps

---myFirst-app

---WEB-INF

---classes

---web.xml

---shoppingCart

(3)配置Web.xml

xmlns:xsi="https://www.360docs.net/doc/5713323715.html,/2001/XMLSchema-instance"

xsi:schemaLocation="https://www.360docs.net/doc/5713323715.html,/xml/ns/j2ee

https://www.360docs.net/doc/5713323715.html,/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

ActionServlet

org.apache.struts.action.ActionServlet 1

time

com.allanlxf.serv.basic.TimeServlet

1

HttpTimeServlet

com.allanlxf.serv.basic.HttpTimeServlet

ActionServlet

*.do

time

/basic/time

HttpTimeServlet

/basic/http/time

com.chu.shoppingCart.web.shoppingCartListner

3. 常用类介绍

(1)Filter类

public class CharacterEncodingFilter implements Filter

{

private FilterConfig config;

public void init(FilterConfig config) throws ServletException

{

this.config = config;

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

{

String encoding = config.getInitParameter("encoding");

if(encoding == null)

{

encoding = "gbk";

}

request.setCharacterEncoding(encoding);

response.setCharacterEncoding(encoding);

chain.doFilter(request, response);

}

public void destroy()

{

}

}

Jsp部分

<%@page contentType="text/html;charset=gbk" %>

<%@taglib uri="https://www.360docs.net/doc/5713323715.html,/jsp/jstl/core" prefix="c"%>

<%@taglib uri="https://www.360docs.net/doc/5713323715.html,/jsp/jstl/functions" prefix="fn" %>

ums-modify

ref="stylesheet" type="text/css">

刷新按钮二 回首页按钮 弹出警告框 状态栏信息 背景色变换

打开新窗口 窗口最小化 ..”.中,各属性间必须用空..........格隔开。.... 色彩的表示方法有两各种:1.RGB 模式,用16进制的红(Red)、绿(Green)、蓝(Blue)的

值来表示,格式为“#RRGGBB”,字符包括数字0~9和字母A~F,如红色为“#FF0000” 2.用英文单词表示彩色,如红色“red”。 二、常用的HTML标记及其属性制作网页①: 1.页面属性、排版标志 ⑴.标题标记: 格式:..., 其中“#”的取值国为1(字体最大)~6(字体最小)。 作用:设置文档的各级标题。 常见属性:align,用于定义标题的对齐方式,默认为左对齐, 标题标记属性:(如表) ⑵.版面格式标记 ①.分段与换行:(如表) ①.以下标记都出现在中出现,标记必须以成对出现,如....

网页制作经验编写高效率的HTML网页代码

网页制作经验编写高效 率的H T M L网页代码 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

许多网站设计者最常犯的错误便是当其网页能够在IE下正常显示便认为其代码正确无误,甚至常看到有人在抱怨其网站排名不理想,到其网站简单看一下便可发现 HTML代码中充斥各种各样的错误,在那样的代码基础上无论付出多少努力去优化网站结果都可能是付诸流水的啊!事实上,IE是一款对HTML代码容错能力甚高的的浏览器,——说句题外话,尽管我们可以有各式各样的理由可以攻击微软,但微软对其产品操作的易手性及可用性方面所做的努力是不容抹杀的。——Web页面能够在IE下正常显示绝不意味着页面的HTML代码没有问题,甚至可以推而广之,Web页面在多种浏览器下均可正常显示也不意味着HTML代码完全合法有效,毕竟哪个浏览器都要保证基本的容错的功能,不然,就会发生即使仅仅因为网络传输中的一点导致导致 HTML页面显示不正常了,而这在网络带宽仍然紧张的今天仍是频繁发生的。什么是合法有效的HTML代码 简单说来,我们的Web页面是由HTML(Hypertext Markup Language :超文本链接标示语言)元素构成的,即使对于ASP、PHP之类的动态页面,其也是由SERVER将ASP或PHP语句渲染成相应的HTML元素并下传到客户机上;对于JavaScript之类则由客户端将其转换为HTML。 同其他语言一样,HTML也有自己的语法规则,无论是浏览器还是搜索引擎的Spider都在根据这些规则来分析网页代码中的内容。但很多时候,即使对熟练人员来说,在HTML页面构建时仍然难免出些HTML代码上的错误,更别提大部分所见即所得编辑器造成的HTML冗余臃肿问题了。

网页设计与制作(代码介绍)

网页设计与制作 一、HTML基本语言: 基本语法:(如图) ....:表示HTML文档的开始和结束 …:表示HTML文档的头部。最常用的标记是,标记中的内容对应浏览窗口标题的信息。 <body>…</dody>:<body>标记之内的内容对应的是浏览器中的内容。 2.<body>标记的使用:(如图) Bgcolor="颜色":设置页面背景色。 Background="图像文件的名字及路径":设置背景文件。 Text="颜色":设置页面文字默认颜色。 标记属性用来对标记之间的内容修饰,标记其属性必须放到 ...................................“.< > ..”.中,各属性间必须用 空格隔开。 ..... 色彩的表示方法有两各种:模式,用16进制的红(Red)、绿(Green)、蓝(Blue)的值来表示,格式为“#RRGGBB”,字符包括数字0~9和字母A~F,如红色为“#FF0000”2.用英文单词表示彩色,如红色“red”。 二、常用的HTML标记及其属性制作网页①: 1.页面属性、排版标志 ⑴.标题标记: 格式:<h#>...<h#>, 其中“#”的取值范国为1(字体最大)~6(字体最小)。 作用:设置文档的各级标题。 常见属性:align,用于定义标题的对齐方式,默认为左对齐, ①.以下标记都出现在<body>中出现,标记必须以成对出现,如<body>...</dody>.</p><p>标题标记属性:(如表) ⑵.版面格式标记 ①.分段与换行:(如表) ②.文本对齐标记 可以在标记中使用align属性指定文本对齐方式。另外,居中对齐可以通过居中对齐方式进行设置。 格式:<center>…<center> 作用:使标记间的内容以居中对齐方式显示。 ③.水平线标记 格式:<hr> 作用:在文档中插入水平线。 常用水平线标记属性:(如表) ④.字体标记 格式:<font>…</font> 作用:设置标记间文体的字体、大小、颜色等。 常用字体标记属性:(如表)</p><h2>网页设计 html 代码 标签 大全</h2><p>1.结构性定义 文件类型<HTML></HTML>(放在档案的开头与结尾) 文件主题<TITLE>(必须放在「文头」区块内) 文头(描述性资料,像是「主题」) 文体(文件本体) (由浏览器控制的显示风格) 标题(从1到6,有六层选择) 标题的对齐 区分

区分的对齐
引文区块
(通常会内缩) 强调(通常会以斜体显示) 特别强调(通常会以加粗显示) 引文(通常会以斜体显示) 码(显示原始码之用) 样本 键盘输入 变数 定义(有些浏览器不提供) 地址
大字 小字 与外观相关的标签(作者自订的表现方式)

加粗 斜体 底线(尚有些浏览器不提供) 删除线(尚有些浏览器不提供) 下标 上标 打字机体(用单空格字型显示) 预定格式

(保留文件中空格的大小) 预定格式的宽度
(以字元计算)向中看齐
(文字与图片都可以) 闪耀(有史以来最被嘲弄的标签) 字体大小(从1到7) 改变字体大小 基本字体大小(从1到7; 内定为3)字体颜色 说明(浏览器不会显示) 3. 2秒后自动载入指定网页 <head> <meta http-equiv="refresh" content="2;URL=http://你的网址"> </head> 4.节日、重大事件倒计时 5. 不同时间段显示不同问候语