??xml version="1.0" encoding="utf-8" standalone="yes"?> 虽然q是菜鸟,但既然看q了(jin)设计模式Q还是希望能用v来的?/p>
惛_个自p乐的j2ee的东ѝ?/p>
关于得到数据库连接部分,一开始觉得是用工厂模式,用工厂模式得到Connection对象Q试?jin)几ơ好像不行?/p>
然后试单态模式,创造了(jin)一个DatabaseGeneralServicesc,来提供数据库q接和关闭数据库{一些通用的服务?br />
一切正常。有点小感?zhn)Q代码如下,希望高手指点?/p>
package com.ClockWise.ray.persistence; import java.sql.Connection; import javax.naming.InitialContext; public class DatabaseGeneralServices { } JNDI——Java Naming and Directory InterfaceTM 直接译是Java命名和目录接口,实现q个接口Q提供的是一个服务,q是个什么样的服务呢Q?/p>
首先在连接数据库的时候(我用的?font face="Times New Roman, serif">mysql?font face="Times New Roman, serif">jboss4.0Q,我们?x)用?font face="Times New Roman, serif">Contextq个c,context是一?font face="Times New Roman, serif">name-to-object的绑定,可以理解为层ơ或目录Q他可以包括下一?font face="Times New Roman, serif">subContext。在使用命名和目录服务时获得initial context 是对整个名字I间操作的入口?/p>
针对Datasource而言Q说白了(jin)Q就是给你的数据库连接(注意Q是数据库连?font face="Times New Roman, serif">Connectionq个对象Q不是数据库Qv个简单易懂的名字Q你在程序中直接调用q个名字Q就得到q个q接的对象,而具体的生成和管理就靠服务器?jin)?/p>
通常?x)Ş成一?font face="Times New Roman, serif">connection poolQ动态的来管理这些对象以节省资源?/p>
q样Q如果项目移植到其它数据库或者服务器什么的Q只要配|服务器p?jin)。配|比如这个连接用什么JDBC驱动啊,用户名和密码啊等{。程序代码可以不作改动。这里的DataSource不一定就是数据库q接Q还可以是其它比如文件连接等{?/p>
其实EJB都是?font face="Times New Roman, serif">JNDI得到EJB object?font face="Times New Roman, serif">reference的,具体的机理是不太?jin)解Q不q就是那个意思,初学者这L(fng)解应该就够了(jin)?/p>
今天郁闷?jin)半天,?font face="Times New Roman, serif">jboss里面配置JNDI DataSourceQ想看看如果外面直接用普通的Java工程能不能连接数据库Q答案是否。后来想通了(jin)。服务器提供JNDI服务所使用的类Q这个普通的工程又不知道在哪Q当然搞不v来。?font face="Times New Roman, serif">Web工程?font face="Times New Roman, serif">EJB工程因ؓ(f)发布到服务器下面的目录的Q所以能使用JNDI服务?/p>
q是我的理解Q请各位高手指点?/p>
至于JBoss{等服务器怎么配置Q网上搜一下,有很多牛人ȝ的,q里׃重复?jin)?/p>
我l重?br />
]]>
]]>
]]>
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.NamingException;
import javax.sql.DataSource;
private DataSource ds;
private InitialContext ic;
private static DatabaseGeneralServices dgs = new DatabaseGeneralServices();
private DatabaseGeneralServices()//use singleton pattern, so the constructor is private
{
try{
ic = new InitialContext ();
ds = (DataSource)ic.lookup("java:jdbc/readshare");//get database connection
}catch(NamingException e){
e.printStackTrace();
}
}
public Connection getConnection(){
try{
return ds.getConnection();
}catch(SQLException e){
e.printStackTrace();
}
return null;
}
public void closeConnection(ResultSet rs,PreparedStatement ps,Connection conn){
try{
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
}catch(SQLException e ){
e.printStackTrace();
}
}
public static DatabaseGeneralServices getInstance()//get the sigleton instance
{
if(null==dgs){dgs= new DatabaseGeneralServices();}
return dgs;
}
]]>
]]>
public class ServletClass extends HttpServlet {
public void doGet(HttpServletRequest request, HttpSevletResponse response)
throws ServletException,IOException{
//Use “request” to read incoming HTTP headers
//Use “response” to specify the HTTP response status
//use “out” to send content to browser
PrintWriter out = response.getWriter();
}
}
如果希望servlet?/font>GET?/font>POSTh采用同样的行动,只需要让doGet调用doPostQ反之亦然?/font>
值得注意的是doGet?/font>doPost都要接收以上两种cd的参数?/font>
servlet 处理表单数据
表单数据
Q?/span>1Q?/span>FORM来创?/span>HTML表单
<FORM ACTION="..."> 其中 "..."指的是处理表单?/span>servlet 或?/span>JSP
Q?/span>2Q用输入元素收集用h?/span>
<INPUT TYPE="TEXT" NAME="...">
Q?/span>3Q在接近表单的尾部放|提交按?/span>
<INPUT TYPE="SUBMIT">
d表单数据
有三U情况:(x)?/span>request.getParameter②request.getParameterValues
?/font>request.getParameterNames
getParameter对应于单个值的dQ如果有q个参数但没|那就q回I的StringQ如果没有这个参敎ͼ则返?/span>null
getParameterValues对应于同一个参数的多个|q回的是一个数l,是这个参数值的集合。如果不存在q个参数名,那就q回一?/span>nullQ如果这个参数只有一个|那就q回一个只有一个元素的数组?/span>
getParameterValuesq回的是所有参数的一?/span>EnumerationQ如果没有参敎ͼ那返回的是一个空?/span>Enumeration而不?/span>null。同时这?/span>Enumeration中的ơ序是ؕ序的?/span>
要对参数?/span>null或者ؓ(f)I?/span>String的情况作出相应的处理
if((param==null)||(param.trim().equals(""))){...}
RequestDispatcher
下面的代码:(x)
RequestDispatcher dispatcher = request.getRequestDispathcer s(address);
dispatcher.forward (request,response);
JSP
JSP直接插入表达?/strong>
<%= Java Expression%> 比如Q?/span><%= new java.util.Date() %>
其实Q?/span>JSP在后台都被{化成servletQ所?/span>servlet ?JSP没有本质的区别?/span>
scriptlet
说白?jin),是直接?/span>JSP面中插?/span>java代码Q我不是很喜Ƣ,太ؕ?jin)。D个例子:(x)
<% if(Math.random()<0.5) {%>
<H1>Have a <I>nice</I> day!</H1>
<% } else {%>
<H1>Have a <I>lousy</I>day!</H1>
<% } %>
JSP page指o(h)
import 属?/span>
<%@ import = "package.class"%>
<%@ import = "package.class1,package.class2...package.classN"%>
contentType?/span>pageEncoding属?/span>
<%@ page contentType = "someMimeType; charset = someCharacterSet"%>
比如<%@ page contentType = "application/vnd.ms-excel"%>
pageEncoding指的是字W集
比如讄成日语:(x)<%@ page pageEncoding="Shift_JIS"%>
session属?/span>
控制面是否参加HTTP?x)?/span>
<%@ page session = "true"%>
isELIgnored属?/span>
是否忽略JSP2.0表达式语a
<%@ page isELIgnored = "ture"%>
此外q有buffer?/span>autoFlush?/span>errorPage?/span>isErrorPage?/span>isThreadSafe?/span>extends?/span>language属?/span>
?/span>JSP中?/span>JavaBean
基本要掌握三个语?/font>
<jsp: useBean id="beanName" class="package.class"/>
<jsp:getProperty name = "beanName" property="propertyName"/>
<jsp:setProperty name ="beanName" property="propertyName" value="propertyValue"/>