RequestDumpUtil.java
packageexamples.jsf.util;
importjava.util.Collections;
importjava.util.Enumeration;
importjava.util.Iterator;
importjava.util.Locale;
importjava.util.SortedSet;
importjava.util.TreeSet;
importjavax.servlet.ServletContext;
importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpSession;
publicclassRequestDumpUtil{
publicstaticvoiddumpRequestHeaders(finalStringBuffersb,
finalHttpServletRequestrequest,finalStringlf,
finalStringindent){
for(finalIteratorit=toSortedSet(request.getHeaderNames())
.iterator();it.hasNext();){
finalStringname=(String)it.next();
finalStringvalue=request.getHeader(name);
sb.append(indent);
sb.append("[header]").append(name);
sb.append("=").append(value);
sb.append(lf);
}
}
publicstaticvoiddumpContextAttributes(finalStringBuffersb,
finalServletContextservletContext,finalStringlf,
finalStringindent){
if(servletContext==null){
return;
}
for(finalIteratorit=toSortedSet(servletContext.getAttributeNames())
.iterator();it.hasNext();){
finalStringname=(String)it.next();
finalObjectattr=servletContext.getAttribute(name);
sb.append(indent);
sb.append("[context]").append(name).append("=").append(attr);
sb.append(lf);
}
}
publicstaticvoiddumpCookies(finalStringBuffersb,
finalHttpServletRequestrequest,finalStringlf,
finalStringindent){
Cookiecookies[]=request.getCookies();
if(cookies==null){
cookies=newCookie[0];
}
for(inti=0;i<cookies.length;i++){
sb.append(indent);
sb.append("[cookie]").append(cookies[i].getName());
sb.append("=").append(cookies[i].getValue());
sb.append(lf);
}
}
publicstaticvoiddumpRequestAttributes(finalStringBuffersb,
finalHttpServletRequestrequest,finalStringlf,
finalStringindent){
for(finalIteratorit=toSortedSet(request.getAttributeNames())
.iterator();it.hasNext();){
finalStringname=(String)it.next();
finalObjectattr=request.getAttribute(name);
sb.append(indent);
sb.append("[request]").append(name).append("=").append(attr);
sb.append(lf);
}
}
publicstaticvoiddumpSessionAttributes(finalStringBuffersb,
finalHttpServletRequestrequest,finalStringlf,
finalStringindent){
finalHttpSessionsession=request.getSession(false);
if(session==null){
return;
}
for(finalIteratorit=toSortedSet(session.getAttributeNames())
.iterator();it.hasNext();){
finalStringname=(String)it.next();
finalObjectattr=session.getAttribute(name);
sb.append(indent);
sb.append("[session]").append(name).append("=").append(attr);
sb.append(lf);
}
}
privatestaticSortedSettoSortedSet(finalEnumerationenu){
finalSortedSetset=newTreeSet();
set.addAll(Collections.list(enu));
returnset;
}
publicstaticvoiddumpRequestParameters(finalStringBuffersb,
finalHttpServletRequestrequest,finalStringlf,
finalStringindent){
for(finalIteratorit=toSortedSet(request.getParameterNames())
.iterator();it.hasNext();){
finalStringname=(String)it.next();
sb.append(indent);
sb.append("[param]").append(name).append("=");
finalStringvalues[]=request.getParameterValues(name);
for(inti=0;i<values.length;i++){
if(i>0){
sb.append(",");
}
sb.append(values[i]);
}
sb.append(lf);
}
}
publicstaticvoiddumpRequestAndContextProperties(finalStringBuffersb,
finalHttpServletRequestrequest,finalServletContextcontext,
finalStringlf,finalStringindent){
finalHttpSessionsession=request.getSession(false);
sb.append(indent);
sb.append("Requestclass="+request.getClass().getName()).append(
",instance=").append(request);
sb.append(lf);
sb.append(indent);
sb.append("RequestedSessionId=")
.append(request.getRequestedSessionId());
sb.append(lf);
sb.append(indent);
if(session!=null){
sb.append("SessionSessionId=").append(session.getId());
sb.append(lf).append(indent);
}
sb.append("REQUEST_URI=").append(request.getRequestURI());
sb.append(",SERVLET_PATH=").append(request.getServletPath());
sb.append(lf).append(indent);
if(session!=null){
sb.append("Session::CreationTime=").append(
session.getCreationTime());
sb.append(",LastAccessedTime=").append(
session.getLastAccessedTime());
sb.append(",MaxInactiveInterval=").append(
session.getMaxInactiveInterval());
sb.append(lf).append(indent);
}
sb.append("CharacterEncoding="+request.getCharacterEncoding());
sb.append(",ContentLength=").append(request.getContentLength());
sb.append(",ContentType=").append(request.getContentType());
sb.append(",Locale=").append(request.getLocale());
sb.append(",Locales=");
finalEnumerationlocales=request.getLocales();
booleanfirst=true;
while(locales.hasMoreElements()){
finalLocalelocale=(Locale)locales.nextElement();
if(first){
first=false;
}else{
sb.append(",");
}
sb.append(locale.toString());
}
sb.append(",Scheme=").append(request.getScheme());
sb.append(",isSecure=").append(request.isSecure());
sb.append(lf).append(indent);
sb.append("SERVER_PROTOCOL=").append(request.getProtocol());
sb.append(",REMOTE_ADDR=").append(request.getRemoteAddr());
sb.append(",REMOTE_HOST=").append(request.getRemoteHost());
sb.append(",SERVER_NAME=").append(request.getServerName());
sb.append(",SERVER_PORT=").append(request.getServerPort());
sb.append(lf);
sb.append(indent);
sb.append("ContextRealPath=").append(context.getRealPath("/"));
sb.append(lf).append(indent);
sb.append("SERVER_SOFTWARE=").append(context.getServerInfo());
sb.append(",ServletContextName=").append(
context.getServletContextName());
sb.append(",MajorVersion=").append(context.getMajorVersion());
sb.append(",MinorVersion=").append(context.getMinorVersion());
sb.append(lf).append(indent);
sb.append("ContextPath=").append(request.getContextPath());
sb.append(",REQUEST_METHOD=").append(request.getMethod());
sb.append(",QUERY_STRING=").append(request.getQueryString());
sb.append(",PathInfo=").append(request.getPathInfo());
sb.append(",RemoteUser=").append(request.getRemoteUser());
sb.append(lf);
}
}
app.dicon
<?xmlversion="1.0"encoding="Shift_JIS"?>
<!DOCTYPEcomponentsPUBLIC"-//SEASAR//DTDS2Container2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<includepath="jsf.dicon"/>
<includepath="teeda.dicon"/>
<includepath="dao.dicon"/>
<includepath="examples/jsf/dicon/allaop.dicon"/>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<propertyname="instanceDef">
@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST
</property>
<initMethodname="addClassPattern">
<arg>"examples.jsf.action.impl"</arg>
<arg>".*ActionImpl"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister"
>
<propertyname="interceptor">actionInterceptorChain</property>
<initMethodname="addClassPattern">
<arg>"examples.jsf.action.impl"</arg>
<arg>".*ActionImpl"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<propertyname="instanceDef">
@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST
</property>
<initMethodname="addClassPattern">
<arg>"examples.jsf.dto"</arg>
<arg>".*Dto"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"
>
<initMethodname="addClassPattern">
<arg>"examples.jsf.logic.impl"</arg>
<arg>".*LogicImpl"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister"
>
<propertyname="interceptor">logicInterceptorChain</property>
<initMethodname="addClassPattern">
<arg>"examples.jsf.logic.impl"</arg>
<arg>".*LogicImpl"</arg>
</initMethod>
</component>
</components>
appMessages.properties和appMessages_ja.properties暂为空。
convention.dicon
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEcomponentsPUBLIC"-//SEASAR//DTDS2Container2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<componentclass="org.seasar.framework.convention.impl.NamingConventionImpl"/>
</components>
jdbc.dicon(本例中未使用数据库,可按实际情况更改配置)
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEcomponentsPUBLIC"-//SEASAR//DTDS2Container2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<componentsnamespace="jdbc">
<includepath="jta.dicon"/>
<includepath="jdbc-extension.dicon"/>
<componentclass="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<componentclass="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
<arg>
<componentclass="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
</arg>
<propertyname="fetchSize">100</property>
<!--
<propertyname="maxRows">100</property>
-->
</component>
<!--
<componentclass="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
<componentclass="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
-->
<!--forHSQLDB-->
<componentname="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<propertyname="driverClassName">
"org.hsqldb.jdbcDriver"
</property>
<propertyname="URL">
"jdbc:hsqldb:hsql://localhost:9001"
<!--
"jdbc:hsqldb:file:"
+@org.seasar.framework.util.ResourceUtil@getBuildDir(@org.seasar.extension.dbcp.impl.ConnectionPoolImplTest@class).getCanonicalPath()
+"/data/demo"
-->
</property>
<propertyname="user">"sa"</property>
<propertyname="password">""</property>
</component>
<!--forOracle-->
<!--
<componentname="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<propertyname="driverClassName">
"oracle.jdbc.driver.OracleDriver"
</property>
<propertyname="URL">
"jdbc:oracle:thin:@xxx:1521:xxx"
</property>
<propertyname="user">"xxx"</property>
<propertyname="password">"xxx"</property>
</component>
-->
<!--forPostgreSQL-->
<!--
<componentname="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<propertyname="driverClassName">
"org.postgresql.Driver"
</property>
<propertyname="URL">
"jdbc:postgresql://localhost/TEST"
</property>
<propertyname="user">"xxxx"</property>
<propertyname="password">"xxxx"</property>
</component>
-->
<!--MySQL
-MySQL4.0以下でマルチバイト文字を扱う場合には,URL指定の後に,
以下の接続パラメータを追加で指定してください.
useUnicode=true
characterEncoding=[MySQLのエンコーディングに対応した
Javaのエンコーディング名]
例:"jdbc:mysql://localhost:3306/test?useUnicode=true"+
"&characterEncoding=Windows-31J"
-MySQL5.0以降で,エンコーディングがeucjpmsの列を扱う場合には,
URL指定の後に,以下の接続パラメータを追加で指定してください.
characterEncoding=UTF-8またはWindows-31J
characterSetResults=UTF-8またはWindows-31J
例:"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"+
"&characterSetResults=UTF-8"
この指定をしない場合,Java側でUCS-2⇔EUC_JP_Solarisの変換が
行なわれるため,ユーザー定義外字などの一部の文字が化けます.
この指定をすることで,MySQL側でeucjpms⇔ucs2⇔utf8(cp932)の
変換が行なわれ,Java側でUCS-2⇔UTF-8(Windows-31J)の変換が
行なわれるようになります.この結果,文字化けを防げます.
なおJISX0212(補助漢字)を使用する場合は,Windows-31Jではなく
UTF-8を指定する必要があります.
-上記以外の場合は,my.cnfでdefault-character-setの設定を適切に
(cp932やutf8など.デフォルトのlatin1は不可)行なっていれば,
文字化けは防げます.
<componentname="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<propertyname="driverClassName">
"com.mysql.jdbc.Driver"
</property>
<propertyname="URL">
"jdbc:mysql://localhost:3306/test"
</property>
<propertyname="user">"xxx"</property>
<propertyname="password">"xxx"</property>
</component>
-->
<!--forSQLServer-->
<!--
<componentname="xaDataSource"
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<propertyname="driverClassName">
"net.sourceforge.jtds.jdbc.Driver"
</property>
<propertyname="URL">
"jdbc:jtds:sqlserver://localhost/TEST;instance=SQLEXPRESS"
</property>
<propertyname="user">"xxxx"</property>
<propertyname="password">"xxxx"</property>
</component>
-->
<componentname="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<propertyname="timeout">600</property>
<propertyname="maxPoolSize">10</property>
<propertyname="allowLocalTx">true</property>
<destroyMethodname="close"/>
</component>
<componentname="DataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl"
/>
<!--fromJNDI-->
<!--
<componentname="DataSource"
class="javax.sql.DataSource">
@org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:comp/env/jdbc/DataSource")
</component>
-->
</components>
分享到:
相关推荐
接着,下载并解压S2xxx.zip文件,然后在Eclipse中通过"文件→导入→既存的工程"引入seasar2目录。使用Seasar2的基本功能(如S2Container和S2AOP)时,需要在CLASSPATH下包含一系列特定的JAR文件,包括aopalliance、...
S2Dao是Seasar2框架的一个重要组成部分,作为一个轻量级的持久化解决方案,它的主要特点是简化了Object-Relational Mapping(O/R映射)的过程,无需繁琐的XML配置。S2Dao的核心优势在于: 1. **无需XML配置**:与...
首先,S2Container是Seasar框架的核心,它是一个轻量级的IoC(Inversion of Control)容器。IoC容器负责管理和装配对象,使得开发者可以专注于业务逻辑,而不是对象的创建和依赖关系。S2Container提供了声明式依赖...
标题 "sa_framework, s2-tiger, s2-extension2.4 日文的API" 暗示了我们正在探讨的是Seasar2框架的一个特定版本,包括s2-tiger和s2-extension2.4的组件,这些组件都有日文的API文档。Seasar2是一个Java企业级应用...
Seasar2是一个开源的Java应用框架,其核心组件之一就是S2Tiger,你提到的"S2Tiger-2.3.23.zip"应该是Seasar2的一个版本更新,主要聚焦于依赖注入(DI)和面向切面编程(AOP)。在深入探讨这些知识点之前,我们先了解...
在这个过程中,我们将学习Seasar2中的核心组件之一——`S2Container`。 ##### 登场人物 - **问候语类** (`Greeting`):接口形式,用于定义问候语的行为。 - **问候客户端类** (`GreetingClient`):接口形式,用于...
标题中的“s2-dao-1.0.49.zip”指的是Seasar2项目中的一个特定版本,DAO(Data Access Object)模块的压缩包。Seasar2是一个Java平台上的开源框架,它旨在简化企业级应用的开发过程,尤其是数据库相关的操作。DAO层...
S2-DAO是Seasar框架中的一个重要部分,全称为"Seasar2 Data Access Object",它提供了数据访问层的抽象,使得开发者能够更方便地进行数据库操作,而无需直接编写SQL语句。这个"seasar框架的讲解s2-dao"压缩包,显然...
这份幻灯片的内容主要围绕S2Struts展开,S2Struts是Seasar2框架的一个组件,它结合了Seasar2的强大功能和Struts的灵活性。 ### S2Struts概述 S2Struts是一个基于Seasar2的Web应用开发框架,它融合了Struts的一些...
《S2Flex2-1.1.0:Seasar2框架与Flex交互的深度解析》 在现代Web应用开发中,交互性和用户体验是至关重要的因素。S2Flex2-1.1.0是一个专为Flash播放器设计的软件库,它使得开发者能够利用Adobe Flex这一强大的...
Seasar2框架包含多个组件,如S2Container(容器)、S2DAO(数据访问对象)、S2Action(动作)以及S2Remoting(远程调用)等。这些组件相互协作,构建出一个强大的企业级应用开发环境。 1. S2Container:作为Seasar2...
8. **配置文件**:Seasar2项目中通常包含多个配置文件,如`s2-tight coupling.xml`、`s2-component.xml`等,它们定义了框架的行为、组件配置和依赖关系。 9. **部署与运行**:完成编码和配置后,可以使用Ant或Maven...
3. **S2JUnit**:这是Seasar2提供的单元测试框架,扩展了标准的JUnit,提供了数据库回滚、事务管理等功能,使得在测试环境中更加方便地进行数据库操作。 4. **S2Aop**:面向切面编程模块,允许开发者定义切面,从而...
在实际开发中,Seasar2提供了诸如数据库访问(S2DAO)、事务管理(S2Transaction)、会话管理(S2Session)等功能,大大简化了企业级应用的开发工作。此外,Seasar2还支持MVC(Model-View-Controller)架构,通过S2...
然而,尽管Seasar2在当时是流行的框架之一,随着Spring框架的崛起,Seasar2的使用逐渐减少。不过,对于学习和理解组件化、容器化以及面向切面编程等概念,Seasar2仍是一个有价值的参考和学习资源。
seasar教程,最流行的java开发框架之一,再过几年可能成为主流. struts与Spring与Hibernate的简化版本,国外很多大公司己经用了几年了,NEC,LG的软件开发都是用这个的。兄弟们快学吧
1. **S2DAO.NET**:假设s2dao.net是针对.NET平台的一个数据访问对象(DAO)框架,类似于Java中的Seasar2 S2DAO。DAO模式是设计模式之一,用于在业务逻辑和数据库之间创建一层抽象,使得代码对具体数据库的依赖性降低...