javaee编程、服务器glassfish3和第三方类包的学习笔记

=====================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.

一、下载地址:甲骨文官网
二、安装:
# ] ./install.sh
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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值