??xml version="1.0" encoding="utf-8" standalone="yes"?> Tomcat 5.5 uses Commons Logging throughout its internal code allowing the developer to choose a logging configuration that suits their needs, e.g java.util.logging or Log4J. Commons Logging provides Tomcat the ability to log hierarchially across various log levels without needing to rely on a particular logging implementation. An important consequence for Tomcat 5.5 is that the <Logger> element found in previous versions to create a ?fn)惯用log4j来配|log信息的输出?/p>
新徏log4j.propertiesQ内容ؓ(f) log4j.rootLogger=info,Console,R log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.logger.org.apache=info, R 最后四行是tomcat的信息,如果改ؓ(f)debug日志文g十分庞大?/p>
这个文件放?{catalina.home}/common/classes下,再将log4j.jar和commons-logging.jar攑օ${catalina.home}/common/lib下,可以在${catalina.home}/logs/下见到日志了?/p>
1.提交表单 2.处理数据 当一个请求发送到servlet容器的时候,容器先会(x)请求的url减去当前应用上下文的路径作ؓ(f)servlet的映?/span>urlQ比如我讉K的是http://localhost/test/aaa.htmlQ我的应用上下文?/span>testQ容器会(x)?/span>http://localhost/testLQ剩下的/aaa.html部分拿来?/span>servlet的映匹配。这个映匹配过E是有顺序的Q而且当有一?/span>servlet匚w成功以后Q就不会(x)ȝ?x)剩下?/span>servlet了(filter不同Q后文会(x)提到Q。其匚w规则和顺序如下:(x) 1. _路径匚w。例子:(x)比如servletA ?/span>url-pattern?/span> /testQ?/span>servletB?/span>url-pattern?/span>/* Q这个时候,如果我访问的url?/span>http://localhost/testQ这个时候容器就?x)?/span>q行_路径匚wQ发?/span>/test正好?/span>servletA_匚wQ那么就去调?/span>servletAQ也不会(x)ȝ?x)其他?/span>servlet了?/span> 2. 最长\径匹配。例子:(x)servletA?/span>url-pattern?/span>/test/*Q?/span>servletB?/span>url-pattern?/span>/test/a/*Q此时访?/span>http://localhost/test/aӞ容器?x)选择路径最长的servlet来匹配,也就是这里的servletB?/span> 3. 扩展匚wQ如?/span>url最后一D包含扩展,容器会(x)Ҏ(gu)扩展选择合适的servlet。例子:(x)servletA?/span>url-patternQ?/span>*.action 4. 如果前面三条规则都没有找C?/span>servletQ容器会(x)Ҏ(gu)url选择对应的请求资源。如果应用定义了一?/span>default servletQ则容器?x)将h丢给default servletQ什么是default servletQ后面会(x)Ԍ?/span> Ҏ(gu)q个规则表,p很清楚的知道servlet的匹配过E,所以定?/span>servlet的时候也要考虑url-pattern的写法,以免出错?/span> 对于filterQ不?x)?/span>servlet那样只匹配一?/span>servletQ因?/span>filter的集合是一个链Q所以只?x)有处理的顺序不同,而不?x)出现只选择一?/span>filter?/span>Filter的处理顺序和filter-mapping?/span>web.xml中定义的序相同?/span> ?/span>web.xml文g中,以下语法用于定义映射Q?/span> l ?/span>??/span>开头和?/span>?*?/span>l尾的是用来做\径映的?/span> l 以前~?.?/span>开头的是用来做扩展映射的?/span> l ??是用来定?/span>default servlet映射的?/span> l 剩下的都是用来定义详l映的。比如:(x) /aa/bb/cc.action 所以,Z么定?/span>?*.action?/span>q样一个看h很正常的匚w?x)错Q因个匹配即属于路径映射Q也属于扩展映射Q导致容器无法判断?/span>
一、saveorUpdate与unsaved-value
Project project = new Project(); 1、默认unsaved-value="null" 2、unsaved-value="none"Q? 3、unsaved-value="any" Hibernate文档中写?
2Q.主键p己来赋?/b>
Project project = new Project(); 1、默认unsaved-value="null" 3、unsaved-value="any" Qsave对象Q?
二、save与update操作
Hibernate文档中写?
三、delete操作
以前删除我是q样写的 如果有联关p,需要把U联的子cM构造出来addq去Q同样可以删除?/p>
好了Q罗嗦的够多了?/p>
1、遍历workbook
2、得到列和单元格
3、设|sheet名称和单元格内容Z?/b>
4、单元格内容未公式或数|可以q样d
7、常用方?/b>
虚线HSSFCellStyle.BORDER_DOTTED
]]>
]]>
]]>
Map接口Q?/strong>
|
+ -- WeakHashMap: 以弱?实现的基于哈希表?Map。在 WeakHashMap 中,当某个键不再正常使用Ӟ自动移除其?br> | 目。更_地说Q对于一个给定的键,其映的存在q不L垃圾回收器对该键的丢弃,q就使该键成为可l止的,被终
| 止,然后被回收。丢弃某个键Ӟ其条目从映射中有效地U除Q因此,该类的行Z其他?Map 实现有所不同?font color=#ff0000>此实?/font>
| 不是同步的?/font>
|
+ -- TreeMap:该映根据其键的自然序q行排序Q或者根据创建映时提供?Comparator q行排序Q具体取决于使用?br> | 构造方法?font color=#ff0000>此实C是同步的?/font>
|
+ -- HashMap:Z哈希表的 Map 接口的实现。此实现提供所有可选的映射操作Qƈ允许使用 null 值和 null 键。(除了
| 非同步和允许使用 null 之外QHashMap cM Hashtable 大致相同。)此类不保证映的序Q特别是它不保证该顺
| 序恒久不变?font color=#ff0000>此实C是同步的?br> |
+-- SortedMap: q一步提供关于键的M排序 ?Map。该映射是根据其键的自然序q行排序的,或者根据通常在创建有
序映时提供?Comparator q行排序。对有序映射?collection 视图Q由 entrySet、keySet ?values Ҏ(gu)q回
Q进行P代时Q此序׃(x)反映出来。要采用此排序方式,q需要提供一些其他操作(此接口是 SortedSet 的对应映
)?br>
Collection接口Q?/strong>
|
+ -- Set接口:一个不包含重复元素?collection。更正式地说Qset 不包含满?e1.equals(e2) 的元素对 e1 ?e2Qƈ
| | 且最多包含一?null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象?br> | |
| + -- HashSet:此类实现 Set 接口Q由哈希表(实际上是一?HashMap 实例Q支持。它不保?set 的P代顺序;
| | 特别是它不保证该序恒久不变。此cd怋?null 元素。此cMؓ(f)基本操作提供了稳定性能Q?font color=#ff0000>此实C是同
| | 步的?/font>
| |
| + -- LinkedHashSet:h可预知P代顺序的 Set 接口的哈希表和链接列表实现。此实现?HashSet 的不同之外在
| | 于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了P代顺序,x照将元素插入?set
| | ?的顺序(插入序Q进行P代。注意,插入序?受在 set 中重新插入的 元素的媄响?font color=#ff0000>此实C是同?/font>
| | 的?
| |
| + -- TreeSet:Z TreeMap ?NavigableSet 实现。用元素的自然序对元素进行排序,或者根据创?set ?br> | 提供?Comparator q行排序Q具体取决于使用的构造方法。此实现为基本操作(add、remove ?containsQ?br> | 提供受保证的 log(n) 旉开销?font color=#ff0000>此实C是同步的?/font>
|
+ -- List接口:有序?collectionQ也UCؓ(f)序列Q。此接口的用户可以对列表中每个元素的插入位置q行_地控制。用?br> | 可以Ҏ(gu)元素的整数烦引(在列表中的位|)讉K元素Qƈ搜烦列表中的元素?br> |
+ -- ArrayList:List 接口的大可变数l的实现。实C所有可选列表操作,q允许包?null 在内的所有元素?br> | 除了实现 List 接口外,此类q提供一些方法来操作内部用来存储列表的数l的大小。(此类大致上等同于
| Vector c,除了此类是不同步的。)每个 ArrayList 实例都有一个容量。该定w是指用来存储列表元素的数
| l的大小。它L臛_{于列表的大。随着?ArrayList 中不断添加元素,其容量也自动增长。ƈ未指定增
| 长策略的l节Q因不只是添加元素会(x)带来分摊固定旉开销那样单?font color=#ff0000>此实C是同步的?/font>
|
+ -- LinkedList:List 接口的链接列表实现。实现所有可选的列表操作Qƈ且允许所有元素(包括 nullQ。除了实
| ?List 接口外,LinkedList c还为在列表的开头及(qing)l尾 get、remove ?insert 元素提供了统一的命名方
| 法。这些操作允许将链接列表用作堆栈、队列或双端队列?font color=#ff0000>提供先进先出队列操作(FIFO)。此实现不是同步的?/font>
|
+ -- Vector:Vector cd以实现可增长的对象数l。与数组一P它包含可以用整数烦引进行访问的lg。但?br> QVector 的大可以根据需要增大或~小Q以适应创徏 Vector 后进行添加或U除的操作?font color=#ff0000>此实现是同步?br> ?/font>
]]>localhost_log
is no longer a valid nested element of <Context>. Instead, the default Tomcat configuration will use java.util.logging. If the developer wishes to collect detailed internal Tomcat logging (i.e what is happening within the Tomcat engine), then they should configure a logging system such as java.util.logging or log4j as detailed next
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L): %m%n
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R
log4j.logger.org.apache.catalina.core=info, R
log4j.logger.org.apache.catalina.session=info, R
]]>
<html>
<body>
<form name
=
"
form
"
method
=
"
post
"
action
=
"
add.jsp
"
>
<input name
=
"
button
"
type
=
button onClick
=
'additem(
"
tb
"
)' value
=
"
d>>
"
>
<table id
=
"
tb
"
>
</table>
<script language
=
"
javascript
"
>
function additem(id)
{
var row
,
cell
,
str
;
row
=
eval(
"
document.all[
"
+'
"
'+id+'
"
'+
"
]
"
).insertRow()
;
if(row !
=
null )
{
cell
=
row.insertCell()
;
str
=
"
<input type=
"
+'
"
'+
"
text
"
+'
"
'+
"
name=
"
+'
"
'+
"
StuName
"
+'
"
'+
"
><input type=
"
+'
"
'+
"
button
"
+'
"
'+
"
value=
"
+'
"
'+
"
删除
"
+'
"
'+
"
onclick='deleteitem(this,
"
+'
"
'+
"
tb
"
+'
"
'+
"
);'>
"
cell.innerHTML
=
str
;
}
}
function deleteitem(obj
,
id)
{
var rowNum
,
curRow
;
curRow
=
obj.parentNode.parentNode
;
rowNum
=
eval(
"
document.all.
"
+id).rows.length -
1
;
eval(
"
document.all[
"
+'
"
'+id+'
"
'+
"
]
"
).deleteRow(curRow.rowIndex)
;
}
</script>
<p>
<input type
=
"
submit
"
name
=
"
submit
"
value
=
"
提交
"
>
</p>
</form>
</body>
</html>
<
body
>
<
table
border
="1"
><
tr
><
td
colspan
="2"
>
eg
</
td
></
tr
>
<%
Enumeration params
=
request.getParameterNames();
while
(params.hasMoreElements()){
String
name
=
(
String
)params.nextElement();
String
[] values
=
request.getParameterValues(name);
if
(name.equals(
"
StuName
"
)){
%>
<
tr
>
<
td
>
<%
=
name
%>
</
td
>
<
td
>
<%
for
(
int
index
=
0
;index
<
values.length;index
++
){
%>
<%
=
values[index]
%>
<%
}}
%>
</
td
>
</
tr
>
</
table
>
</
body
>
]]> 一Q?/font>servlet容器?/span>url的匹配过E:(x)
二,url-pattern详解
]]>
到底是savaq是update
Hibernate需要判断被操作的对象究竟是一个已l持久化q的持久对象q是临时对象?
1Q.主键Hibernate的id generator产生
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="increment" />
</id>
project.setId(XXX);
this.projectDao.saveOrUpdate(project);
主键是对象类型,hebernate判断project的主键是否位nullQ来判断project是否已被持久?/b>
是的话,对project对象发送save(project)Q?
若自p|了主键则直接生成update的sqlQ发送update(project)Q即便数据库里没有那条记录?
主键是基本类型如int/long/double/
自己讄unsaved-null="0"?
所以这L(fng)话save和update操作肯定不会(x)报错?/p>
׃不论主键属性ؓ(f)M|都不可能为noneQ因此HibernateL对project对象发送update(project)
׃不论主键属性ؓ(f)M|都肯定ؓ(f)anyQ因此HibernateL对project对象发送save(project)Qhibernate生成主键?/p>
saveOrUpdate()完成了如下工作:(x)
如果对象已经在这个session中持久化q了Q什么都不用?
如果对象没有标识|调用save()来保存它
如果对象的标识gunsaved-value中的条g匚wQ调用save()来保存它
如果对象使用了版?version或timestamp),那么除非讄unsaved-value="undefined",版本(g)查会(x)发生在标识符(g)查之?
如果q个session中有另外一个对象具有同L(fng)标识W,抛出一个异?
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="assigned" />
</id>
project.setId(XXX);
this.projectDao.saveOrUpdate(project);
q时有所不同Qhibernate?x)根据主键生一个selectQ来判断此对象是否已被持久化
已被持久化则updateQ未被持久化则save?
2、unsaved-value="none"Qupdate对象Q同?/p>
如果自己自己讄的ID在数据库中已存在Q则报错?/p>
昑ּ的用session.save()或者session.update()操作一个对象的时候,实际上是用不到unsaved-value?
在同一SessionQsave没什么可说得
update对象? 最直接的更改一个对象的Ҏ(gu)是load()它,保持Session打开Q然后直接修改即?
Session s =?
Project p = (Project) sess.load(Project.class, id) );
p.setName(“test?;
s.flush();
不用调用s.update(p);hibernate能察觉到它的变化Q会(x)自动更新。当然显C用的话也不会(x)?/p>
update()Ҏ(gu)在下列情形下使用Q?
E序在前面的session中装载了对象
对象被传递到UIQ界面)?
对该对象q行了一些修?
对象被传递回业务?
应用E序在第二个session中调用update()保存修改
删除时直接自己构造一个project卛_删除
this.projectDao.delete(preojct);
public void deleteProject(String id) {
Project project = (Project) this.projectDao.get(Project.class, id);
if (project != null) {
this.projectDao.delete(project);
}
卌样也是可以的
Project project = new Project();
project.setId(id);
this.projectDao.delete(project).
5、设|列宽、行?/b>
6、添加区域,合ƈ单元?/b>
Ҏ(gu)单元g同属性返回字W串数?
8、常用单元格Ҏ(gu)格式
实线HSSFCellStyle.BORDER_THIN
9、设|字体和内容位置
10、插入图?/b>
论坛里看到的
]]>
Jakarta POI 是apache的子目Q目标是处理ole2对象。它提供了一l操UWindows文档的Java API
目前比较成熟的是HSSF接口Q处理MS ExcelQ?7-2002Q对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象Q你可以控制一些属性如sheet,cell{等?/font>
二.HSSF概况
HSSF 是Horrible SpreadSheet Format的羃写,也即“讨厌的?sh)子表格格式”。也许HSSF的名字有Ҏ(gu)E,本质而言它是一个非怸肃、正规的API。通过HSSFQ你可以用纯Java代码来读取、写入、修改Excel文g?/font>
HSSF 取操作提供了两类APIQusermodel和eventusermodelQ即“用h型”和“事?用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多?/font>
三.开始编?/font>
1 Q?准备工作
要求:JDK 1.4+POI开发包
可以?/font> http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 最新的POI工具?/font>
2 Q?EXCEL l构
HSSFWorkbook excell 文档对象介绍
HSSFSheet excell的表?br />HSSFRow excell的行
HSSFCell excell的格子单?br />HSSFFont excell字体
HSSFName 名称
HSSFDataFormat 日期格式
在poi1.7中才有以?:(x)
HSSFHeader sheet?br />HSSFFooter sheet?br />和这个样?br />HSSFCellStyle cell样式
辅助操作包括
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息?/font>
3 Q具体用法实?Q采?usermodel Q?/font>
如何读Excel
dExcel文gӞ首先生成一个POIFSFileSystem对象Q由POIFSFileSystem对象构造一个HSSFWorkbookQ该HSSFWorkbook对象׃表了Excel文档。下面代码读取上面生成的Excel文g写入的消息字Ԍ(x)
try{
POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("d:/workbook.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short) 0);
String msg = cell.getStringCellValue();
System.out.println(msg);
}catch(Exception e){
e.printStackTrace();
}
如何写excelQ?/font>
excel的第一个表单第一行的W一个单元格的值写成“a test”?/font>
POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("workbook.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short)0);
cell.setCellValue("a test");
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
4 Q?可参考文?/font>
POI 主页Q?/font> http://jakarta.apache.org/poi/ Q?/font>
初学者如何快速上手用POI HSSF
http://jakarta.apache.org/poi/hssf/quick-guide.html ?/font>
里面有很多例子代码,可以很方便上手?/font>
四.使用心得
POI HSSF 的usermodel包把Excel文g映射成我们熟(zhn)的l构Q诸如Workbook、Sheet、Row、Cell{,它把整个l构以一l对象的形式保存在内存之中,便于理解Q操作方便,基本上能够满x们的要求Q所以说q个一个不错的选择?/font>
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?br />前面已经讲过利用POIdExcelQ下面是一个用POI向Excel中插入图片的例子?br />
官方文档Q?br />Images are part of the drawing support. To add an image just call createPicture() on the drawing patriarch. At the time of writing the following types are supported:
PNG
JPG
DIB
It is not currently possible to read existing images and it should be noted that any existing drawings may be erased once you add a image to a sheet.
// Create the drawing patriarch. This is the top level container for
// all shapes. This will clear out any existing shapes for that sheet.
通过HSSFPatriarchccreatePictureҎ(gu)的在指定的wb中的sheet创徏囄,它接受二个参敎ͼW一个是HSSFClientAnchorQ设定图片的大小?br />