=====================JAVAEE编程======================= 一、对表单内容需进行过滤 主要过滤:“<” “ >” “ 空格” “\n ”(java的回车,换为<br>) 等 可以ASC码替换以上过滤内容, 其中为防止SQL注入,也需过滤一些SQL保留字符。但我觉得为什么java网页数据库操作时不直接修改结果集记录,再
rs.insert(); rs.update(); rs.delete();
执行数据增删改的呢?这样不是可以直接防止SQL注入吗?为什么大家都不用呢?
二、cookie
1写入cookie
Cookie c1=new Cookie("name",name);
Cookie c2=new Cookie("pwd",pwd);
c1.setMaxAge(1200);
c2.setMaxAge(1200);
response.addCookie(c1);
response.addCookie(c2);
2\读取cookie
Cookie[] cs=request.getCookies();
Cookie c=null;
if(cs!=null){
for(int i=0;i<cs.length;i++){
c=cs
; if(c.getName().equalsIgnoreCase("name")){ out.println("name:"+c.getValue()); }else if(c.getName().equalsIgnoreCase("pwd")){ out.println("pwd:"+c.getValue()); }else { out.println("unname:"+c.getValue()); } } }
============glassfish3使用======================== 看很多人都用tomcat, 但我信赖flassfish. 一、下载地址:甲骨文官网 二、安装:
linux中一般安装在/usr/local/glassfish3中,打开服务器所需端口8080 (网站端口) ,4848(服务器远程远程管理端口)
三、启动,服务器内置有一个域 :domain1
# ] /usr/local/glassfish3/bin/asadmin start-domain
启动服务器中所有域,你可以建多个域,也就是服务器可管理多个网站。
四、进入管理界面
http://localhost:4848 默认的 帐号:admin 密码:admin (当然我使用自己的密码)
五、发布网站文件
“应用程序“—”部署“ -自己选择是文件所在位置和类型。
如我的文件包名为workoffice。现可在
http://localhost:8080/workoffice 中访问该网站。
六、数据池
配置数据池:
1、配好连接池:管理界面-jdbc--新建连接池,记得填好属性参数,其它的默认就行,Ping能通的话就没问题。
2、注册jdbc资源:没什么,只是生成一个jani。
附注:网上有关此类的例子都不全,看了也白看,只要看glassfish web界面提供的帮助文档就行(写得真好)。
使用数据池:
Context context=new InitialContext();
DataSource ds=(DataSource) context.lookup("jani名字");
Connection conn=ds.getConnection();
================================================
====================第三方插件使用=====================
一、内容编辑器
ckeditor
下载网站:
http://ckeditor.com/download
使用方法:将包解压后放在自己项目的web目录中,网页调用时用以下代码,当然代码中还有不少参数可增改,产生不同效果,这需要看其自带的demo中说明。
<script src="/path(文件路径)/ckeditor/ckeditor.js"></script>
<textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"></textarea>
二、表单验证(待找)
最好找到国人开发的,外国人的没有中文验证内容。
三、数据库操作包(apache 社区提供的 commons dbutils)
下载:
http://commons.apache.org/dbutils/download_dbutils.cgi
解压后,有四部分,帮助文档\api\编译后jar\源码jar,加载已编译的jar到所需的项目中类库中,调用
String url="jdbc:postgresql://192.168.1.102:5432/work";
String sql ="select id,title,organ from getdoc where id<10";
String driver="org.postgresql.Driver";
DbUtils.loadDriver("org.postgresql.Driver"); //如果没有这个类包的话,在标准的javase中,我们j是使用Driver.forName("org.postgresql.Driver");
Connection conn=DriverManager.getConnection(url,"user","pwd");
QueryRunner qr=new QueryRunner();
List rs = (List)qr.query(conn,sql,new MapListHandler());//将查询结果集放入一个list中,如没有dbutils包,我们只有自己写代码实现这个操作)
DbUtils.close(conn);
Map map=null;
for(int i=0;i<rs.size();i++){
map=(Map)rs.get(i);
System.out.print("id"+map.get("id")+"\t");
System.out.print("title"+map.get("title")+"\t");
System.out.println("doctime"+map.get("organ")+"\t");
}
上一代码如只是操作更新,不需要结果集,且使用数据池可以改成以下:
String sql ="update tablename set( id,title,organ)=("XXX","XXX","xxxx")";
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("datasourcename")
context.colse();
QueryRunner qr=new QueryRunner(ds);
qr.update(sql,params);
上一代码如只是操作更新,不需要结果集,且使用数据池可以改成以下:
String sql ="update tablename set( id,title,organ)=("XXX","XXX","xxxx")";
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("datasourcename")
context.colse();
QueryRunner qr=new QueryRunner(ds);
qr.update(sql,params);
使用实体类存取数据库数据
数据库存取数据是大让人伤脑的问题。但是数据库实体类可以解决这个难题。 1、按照数据库表结构生成实体类(IDE自动生成就行),类名应与表名相同, 2、在配置文件persistence.xm中建持久性单位,名称自定,提供器与默认的就行,数据源用glassfish中设定的。 3、查询数据代码:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("WorkOfficeEE-warPU");
Query em = emf.createEntityManager().createNativeQuery("select * from address");
Object[] list = em.getResultList().toArray();
上面已将查询结果装入二维的list中。下面提取并显示出来。
for (int i = 1; i < list.length; i++) {
Object[] list1 = (Object[]) list
; for (int k = 0; k < list1.length; k++) { out.println(list1[k]); } }
下面是查询某条记录所在的beans
EntityManagerFactory emf = Persistence.createEntityManagerFactory("WorkOfficeEE-warPU");
AddressBean em = emf.createEntityManager().find(AddressBean.class, 1);//查询主键id=1的记录
out.println(em.getOrgan());//打印出organ列
发现好东西,直接转贴出来。以后不用再写底层数据类了。
3.3 使用EntityManager操作实体
顾名思义,实体管理器EntityManager是负责管理Entity的对象。对Entity的操作包括添加、删除、修改和查询,都是通过实体管理器来实现的。
3.3.1 依赖注入EntityManager
在EJB容器中,EntityManager的获得可以通过标注,使用依赖注入来创建EntityManager实例,代码如下所示。
@PersistenceContext(unitName = "demo")
private EntityManager entityManager;
@PersistenceContex 表示标注的属性entityManager是一个实体管理器EntityManager对象,EJB容器会根据unitName的值来初始化 EntityManager。其中unitName的值为上文中在persistence.xml中配置的<persistence- unit>中name的值。
虽然这里没有看到new实体管理器EntityManager的代码,但一旦将该类放置到EJB容器中,容器将会自动依赖注入,初始化该实例。
3.3.2 添加Entity
EntityManager类中的persist方法可以在数据库中添加一条记录,其声明如下所示。
public void persist(Object entity)
示例代码如下所示。
CustomerEO customer = new CustomerEO();
customer.setId(1);
customer.setName("Sun System");
customer.setShortName("Sun");
entityManager.persist(customer);
3.3.3 根据主键查找Entity
EntityManager类中的find方法可以根据主键的值查找对应的实体。
public <T> T find(Class <T> entityClass, Object primaryKey);
其中,entityClass为实体对象,primaryKey为主键的值。例如,查找id为1的实体代码如下所示。
CustomerEO instance = entityManager.find(CustomerEO.class, new Integer(1));
3.3.4 更新Entity
EntityManager类中的merge方法可以将实体更新到数据库中,其声明如下所示。
public <T> T merge(T entity);
其中,entity为所要更新的实体对象,可以通过find方法先查找出来,然后重新设置值后,最后更新。例如,更新id为1的实体代码如下所示。
CustomerEO customer = entityManager.find(CustomerEO.class, new Integer(1));
customer.setName("New Name");
customer.setShortName("New Short Name");
entityManager.merge(customer);
3.3.5 删除Entity
EntityManager类中的remove方法可以删除数据库中的一条记录,其声明如下所示。
public void remove(Object entity);
其中,entity为所要删除的实体对象,可以通过find方法先查找出来,然后删除。例如,删除id为1的实体代码如下所示。
CustomerEO customer = entityManager.find(CustomerEO.class, new Integer(1));
entityManager. remove (customer);
3.3.6 执行查询
EntityManager类中的createQuery方法可以查询数据,并返回查询结果集,其声明如下所示。
public Query createQuery(String queryString);
其中,queryString为查询的SQL语句。例如,查询所有的CustomerEO可以使用以下代码。
String sql = "SELECT c FROM CustomerEO c";
Query query = entityManager.createQuery(sql);
List result = query.getResultList();