1. 对ThreadLocal的理解:
ThreadLocal拥有一个内部类ThreadLocalMap,可以将其简单理解为一个Map类,一个 ThreadLocal对象内部可以包含多个不同的Thread,对于每一个Thread都会创建一个相关的ThreadLocalMap对象(即拥有几个线程就拥有几个ThreadLocalMap对象),每个ThreadLocalMap以对应的Thread作为key值。
当向线程中设值时(只能是一个),ThreadLocal类会首先获取当前线程,然后取得相应的ThreadLocalMap,之后向其中赋值。如果是首次赋值,则会创建一个新的ThreadLocalMap。当从线程中取值时,则是以当前线程为key值到对象的ThreadLocalMap中获取。
2. HttpSession中的对象是否需要序列化?
不是强制HttpSession中的对象必须实现序列化接口,但是当web服务器消耗大量内存时,它通常会将那些暂时不活动但未超时的HttpSession对象转移到文件系统或数据库中保存,服务器要使用它们时再将它们从文件系统或数据库中装载到内存中,这种技术称为Session的持久化(钝化),这时如果HttpSession中的对象没有实现序列化接口,就会抛出java.io.NotSerializableException异常。
3. Hibenrate映射文件中的type属性
我们在映射文件里声明并使用的类型,并不是我们期望的那样,是java数据类型,同时也不是SQL数据库的数据类型,这些类型是所谓的Hibernate映射类型。它们能把java数据类型转化到SQL数据类型,反之亦然。如果在映射文件中没有设置type属性,Hibernate会自己试着去确定正确的转换类型和它的映射类型。在某些情况下,这个自动检测机制(在java类上使用反射机制)不会产生你所期望的缺省值,date属性就是一个很好的例子,Hibernate无法知道这个属性(java.util.Date类型)应该被映射成SQL date或timestamp还是time字段,这可以通过type=“timestamp”来确定。
4. String
字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容需要根据创建方式来决定(常量池和堆).有的是编译期就已经创建好,存放在字符串常量池中,而有的是运行时才被创建.使用new关键字,存放在堆中。
5. js(jQuery)传值 乱码
function submit(){
var title=document.getElementById("test");
var url="xxxx.action?test="+encodeURI(encodeURI(title.innerHTML));
window.location.href=url;
}
服务器端:
String test = request.getParameter("test");
test = java.net.URLDecoder.decode(test, "UTF-8");
6. jndi :java命名服务。简而言之,它提供了按照名称定位组件或服务的功能。Ldap,dns,rmi等等都是命名服务。以dns为例,当在浏览器中输入http://www.baidu.com是时,dns服务器进行查找,并将我们引导到百度的正确ip地址。Jndi的作用类似于jdbc(jdbc用统一的方式获得连接,不管是MySQL数据库还是Oracle数据库),它提供了访问各种命名服务的单一的同一的API,不论命名服务是ldap还是dns。
Context ctx = new InitialContext();InitialContext对象连接到任何给定的JNDI树,可由jndi.properties提供环境或传入参数。
7.dwr与comet
1.dwr 简单而言,就是页面可以调用后台的类的方法。基本配置:
(1)web.xml中配置框架定义的DwrServlet
(2)dwr.xml文件中配置可以被客户端调用其方法的类
(3)页面中导入相应的js文件(注意顺序)
2.Comet服务器端推技术 (利用dwr,在页面中调用后台方法)
(1)首先在web.xml中配置DwrServlet时,指定参数activeReverseAjaxEnabled为true,表明使用服务器端推技术(否则会出错:Polling and Comet are disabled),同时在页面加载时,在js设置dwr.engine.setActiveReverseAjax(true);
(2)在后台利用dwr的ScriptSession ,Util…类获得相应页面的元素信息,如TextArea的id值等,再进行设置。
8.struts2标签
<s:iterator value="#request.zxZwInfoList" var="zxZwInfo" status="st">
<tr>
<td class="idxnewsright_content">
<a href="#"><s:property value="infoContent"/>
<s:if test="#st.index<2">
<img src="${pageContext.request.contextPath}/images/icon_new.gif" width="28" height="11" />
</s:if>
</a>
</td>
<td width="80">
<s:date name="publishDate" format="yyyy-MM-dd" />
</td>
</tr>
</s:iterator>
<s:textfield cssStyle="width:150px;" name="planSetUpTime" readonly="true" cssStyle="border:1px solid #809FBB;width:160px;" onclick="WdatePicker({dateFmt:'yyyy-MM',autoPickDate:true,skin:'ext'})"> <s:param name="value"> <s:date name="#request.project.planSetUpDate" format="yyyy-MM" /> </s:param> </s:textfield>
9.Hibernate查询之DetachedCriteria
Session session = HibernateUtils.getSession();
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.add(Restrictions.eq("id", 1));
//dc.createAlias("group", "group"); (1)
//dc.setFetchMode("group", FetchMode.JOIN); (2)
List result = dc.getExecutableCriteria(session).list();
if(result!=null&&result.size()>0){
User user = (User)result.get(0);
HibernateUtils.closeSession(session);
System.out.println("group="+user.getGroup().getName()); (3)
}
User中的Group对象延迟加载,在加载完User对象后关闭session。这时执行语句(3)会抛出异常,语句(1) / (2) 都可以加载Group
10.sql
select * from (select a.constraint_name consA, a.table_name 外键表名,a.column_name 外键列名,b.table_name 主键表名,b.column_name 主键列名
from
(select a.constraint_name,b.table_name,b.column_name,a.r_constraint_name
from user_constraints a, user_cons_columns b
WHERE a.constraint_type='R'
and a.constraint_name=b.constraint_name
) a,
(select distinct a.r_constraint_name,b.table_name,b.column_name
from user_constraints a, user_cons_columns b
WHERE a.constraint_type='R'
and
a.r_constraint_name=b.constraint_name)
b
where a.r_constraint_name=b.r_constraint_name )a where a.主键表名=upper('hx_product')
-Xms1024M -Xmx1024M -XX:MaxPermSize=400M