历史知识整理(from百度空间)

对于java的一些学习(java过滤器)20130308
 java过滤器:


    在访问某个资源时,你需要对该资源的访问进行过滤,例如访问某个页面时需要对其编码经行修改,此时该修改可放在一个过滤类中,再在web.xml文件中配置该过滤类的信息,如下所述:


             <filter>
             <filter-name>EncodingFilter</filter-name>
             <filter-class>manyfilter.EncodingFilter</filter-class>
             </filter>
             <filter-mapping>
             <filter-name>EncodingFilter</filter-name>
             <url-pattern>/test.jsp</url-pattern>
             </filter-mapping>


java过滤器:


    当浏览网页时,有些网页是被设置了权限的,这时候如果权限不够,或者用户并没有登陆,则不能进入,这时候跳转的是用户登陆界面,如果权限够或者用户已经登陆,则会正常的进入。


             这时候所用到的技术可以使用java过滤器,编写一个过滤器类,将其中受限的网页放置于一个list中,当访问页面为该list中的元素时,并且用户已经登陆(登陆状态可以写一个方法返回true OR false),则进入页面,否则跳转到登陆页面。
             用户登陆状态可以通过session来保存


分享自w廖择榕 《java过滤器》
来源:http://blog.sina.com.cn/s/blog_a2096f8c010122pe.html#bsh-73-201514311


java的学习:一些基础知:201309
1:对象的继承:extends继承的是一般的类,implements继承的是抽象类(其中:abstract是指不能生成此类对象,而interface则是在abstract基础上不能实现该抽象类的方法,类似于c++中的纯虚基类)。


2:c++为什么不使用类似于java object的模型是因为要保存c的属性


3:object引用对象时如果在使用该object的时候不进行类型转换,则次object会被切割。


4:如果将object传入某个方法中,虽然在c++中是只有引用才能改变值得,但是java里面这也类似于引用,因此如果在该方法中修改了object的参数属性或者别的什么的,那么这个修改是有效的。


5:equals比较的是内存值(就像c++的地址),因此如果两个类似的对象的某个属性equals,那么返回的值一定是false。


6:java的函数重载其中对于参数一致而参数顺序不一致的方法可以区分。而返回值的不同不能区分函数。


7:java函数调用匹配时类似于c++,当类型不满足时,可以转换至可以调用为


8:java的回收机制提供一个方法叫finalize(),但是它是在对象被摧毁前调用的,但是java里面垃圾回收机制中的对象不一定会被回收,这是不受人为控制的,所以finalize()就不一定会在程序员认为调用的时候调用,这有一定的偶然性,所以清除工作最好还是自己手动的做的好。


9:java的类中的静态属性比main函数更早初始化


java基础学习20130310
1:两个package的相同类,如果在import时,会出现较内的package覆盖
较外的package。如:package com.just.cc 会在import 
com.just.cc.bb.*时覆盖 package com.just.test.bb。
2:package里面的非public不能访问,static可以。
3:当不指定package的时候 会默认一个域,如果多个类没有指定的时候
,那么这些类被默认为在同一个目录下,所以可以访问非public的方法
,因为他们是friends
4:定义一个方法为final 意思是该方法不能在其子类的中进行修改
5:定义一个类为final 则表明该类不能被继承
6:定义一个参数为final时,表明该参数在函数里面不能被修改
7:java访问顺序 首先查找到main方法,然后查找该main方法所在文件
是否有static对象,如果有,先初始化该static对象,然后进入main方
法。
8:如果确实想从一个非接口继承,那么只能从一个继承。剩余的所有基
本元素都必须是“接口。并且非接口类必须在前面,否则会造成变异错
误。
9:implements一般要实现父类的方法,而extends则不需要
10:置入一个接口的所有字段都自动具有static和final属性,所以接口
是对常数值进行分组的一个好工具,它具有与C或C++的enum非常相似的
效果


11:java的内嵌类的作用可以约束某个类的作用域,使得访问该内嵌类的时候只能通过其外部所在的类访问。


12:java的内嵌类可以定义在一个方法中,也可以定义在一个选择语句里


13:  若试图定义一个匿名内部类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象为final属性




关于Dorado的学习:20130312
dorado采用的是mvc模式来进行数据、页面、框架来开发的,view内部的controls控制对应结构的数据,即:数据保存在dataset里面,然后再加载到相应的table和form里面,通过control里面的一些内嵌js代码实现一些按钮的触发事件,来对dataset的数据进行处理。


理解dataset:dataset就是存放数据的二维数组,一般存放的是数据库表里面的内容。


理解control:control就是一切与dataset相关联的控件,dataset数据在页面上显示在此处。


理解command:command就是控制和操控dataset数据在控件中显示的格式、内容。






执行对数据的刷选并且显示在table中:建立dataset sqldataset,设定默认的sql语句,建立该dataset的监听类,并且覆盖自带的beforeLoad函数,于是在加载dataset数据前,先执行其中的函数,这样就实现了对数据的刷选了。具体的内容见自己写得项目的例子。






autosqldataset 即不需要sql语句能将对应表的内容全部加载到该dataset里面,并且能在save的command里面实现自动的save,将修改内容保存在与dataset相关的数据库里面。






具体内容在http://wiki.bsdn.org/pages/viewpage.action?pageId=983961里面有详细的讲解,有时间应该多看看,从基础学起,才能做到百变。


实现登录功能,并且对登录的信息进行检验可用servlet来进行验证。那么dorado又是怎样来联合servlet来实现的呢?其实dorado只是对基本的servlet进行了封装而已。


       新建一个dorado项目,添加一个view建立相应的form和dataset,添加一个requestcommand,重要的是指定command path为我们的servlet名字,这样在遇到requestcommand时便会调用相应的servlet来进行处理,然后新建一个servlet与其进行对应,在web.xml文件中配置好该servlet就行了。除此之外,还要重写该command的beforeExecute方法,var id = dsLogin.getValue("id");
                            var pwd = dsLogin.getValue("pwd");
                            command.parameters().setValue("id",id);
                            command.parameters().setValue("pwd",pwd);这样就能获取form中的属性的数据了。






  其实实现同样的登录验证功能还可以通过action来实现,在command的path中指定为一个action的do,如 loginaction.do。然后建立一个action名字为loginaction在这个action里面对登录事件进行验证,其中用的是actionforward,然后配置struts.xml文件和web.xml.没错,这就是struts和dorado的结合






{---package hr; 


import org.apache.struts.action.*; 
import javax.servlet.http.*; 


public class LoginAction extends Action { 
public ActionForward perform(ActionMapping actionMapping, 
ActionForm actionForm, 
HttpServletRequest request, 
HttpServletResponse response) { 
String usr = request.getParameter("id"); 
String pwd = request.getParameter("pwd"); 
if ("admin".equals(usr)){ 
return actionMapping.findForward("success"); 

else 
return actionMapping.findForward("failure"); 

}---}


{---<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD  Struts Configuration 1.0//EN"  "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"> 
<struts-config> 
<action-mappings> 
<action path="/loginaction" type="hr.LoginAction" > 
<forward name="success" path="/main.jsp" /> 
<forward name="failure" path="/login.jsp" /> 
</action> 
</action-mappings> 
</struts-config>


---}


Marmotdataset的使用
使用marmotdataset可以很方便的设定好数据,其中它有一个对其支持的类,和一个方法,这个类的方法接受一个参数dataset,然后对这个dataset经行写入,这样,就能使用了。dataset.addRecord(resultMap);其中这个map是一个键值相对的。其中在dataset的datesetProvider中要设定一个beans对应处理他的类。beans配置在:core/conf/beans中。


hql与sql在hibernate中处理的不同以及一些其他知识点_20130315
hql为hibernate内嵌的语句方式,它能对对象进行查询,hql和sql的查询方式区别在于一个接口是createSquery 而 sql的接口是createSQLSquery 这就是他们最大的区别。


为文本存数据时 ,加入换行的方法是+“\r\n”.


String.valueof(Object obj)能将任何对象转化成string 即int double boolean date 等






Java之常识最重要!
例如:记事本有自动换行功能 我勒个去的。


查询多个表里面的字段并且将其显示在一个txt文本中,可通过建立一个视图来实现,建立视图的方式与查询类似,不过有时视图会出现字段的重复,这时候在select后面添加一个distinct 关键字就能消除一些重复的数据行。


通过表的某个字段值可以查出该值所在的表和字段名称,这可以通过sql语句自己编写函数来实现,其中应用到的就是数据库自带的表和属性向导,如查询某个字段所在表是很容易的,以及查询某表的字段,属性等等。


oracle使得查询速度提升
当出现多表进行查询的时候,例如select count(*) from table a,table b,a 1w,b100w,由于sql语句执行的顺序是从右至左,因此应该将较少的表放在最右边。


当执行查询时有条件,则将与条件相关的较多的表放在右边。


关于dorado的学习:2013_03_19
 有些command可以实现远程调用功能,即参数给予其他函数来实现,例如RPCCommand对象就可以通过其method来实现参数的调用,当然,这个参数是在并不能为集合(dataset),但是有一个command即updateCommand就可以传递dataset对象,它有一个子项DatasetInfos能传递dataset,另外一个UpdateCommand值得我们注意的一个属性是alwaysPerform,由于UpdateCommand一般用于数据提交,而dorado基于网络数据量的考虑,默认情况下如果DatasetInfos中定义的dataset没有合适的数据提交到远程方法中,就不执行提交动作,dorado认为其是多余的动作,而如果在实际环境中,可能我们又想必须调用远程方法,使其执行,则我们可以通过修改alwaysPerform属性为true,强制UpdateCommand执行时一定要调用远程方法。


marmoset 是在一个jar包里面定义的,要使用其方法和provider的话,必须引入marmot.jar


dorado待解决问题。。。已经解决
局部更新表的数据,以及查询出表的数据后怎样通过dorado存放在对应的table中。因为这不是通过autosql执行的。还有就是关于martotdateset的数据访问形式,以及其bean是怎样初始化的?






org.springframework.web.context.ContextLoaderListener 在web.xml中配置后:web.xml中加入


<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>它会自动的初始化所有的applicationContext,即我们可以在applicationContext.xml中配置好bean,这样,一旦项目启动就会对bean进行初始化。而martotdataset通过bean获取方法就是这样实现的。






dorado 中的marmotdataset中mothod返回是dataSet.addRecords(result);而不是dataSet.addRecord(result);


具体见:http://blog.csdn.net/seng3018/article/details/6758860


java基础:2013-3-20
java中有一个类型名为Date,一下介绍String转换为Date以及Date转换为String形式的方法;


   String dateString = "2012-12-06 ";
   try{


       //一下类的功能是指出格式,而且利用这种方法可以判断一个String是否符合date格式,因为如果


       //符合的话sdf.parse不会抛出异常,而不符合的话就会进入catch里面,只要在catch里面返回          //false即可
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
       Date date = sdf.parse(dateString);
   }
   catch (ParseException e){
       System.out.println(e.getMessage());
   }






如果想比较两个日期的大小,可将日期转换为String格式,然后应用String的compareTo()来得出String大小比较的结果


Dorado学习:2013-03-24
Resultset用来访问数据库的结果,然后能引入到dataset中


Statement st = connection.createStatement(); 
ResultSet rs = st.executeQuery("SELECT * FROM employee"); 
((DBDataset)dataset).load(rs);






vo就是hibernate的对象映射






通过query来获取数据






在view中重载方法doLoadData


Query query = session.createQuery("from Branch"); 
List branchs = query.list(); //获取数据
Dataset datasetBranch = getDataset("datasetBranch"); 得到某个dataset
datasetBranch.fromDO(branchs);//将数据导入到DODataset 类型的dataset


JAVA基础:2013-03-25
当String同double之间进行转换时,会丢失精度,这时候需要做的是利用BigDecimal对象接受string然后传给double这样就不丢失精度了。


public static double add(double v1, double v2) {  
BigDecimal b1 = new BigDecimal(Double.toString(v1));  
BigDecimal b2 = new BigDecimal(Double.toString(v2));  
return b1.add(b2).doubleValue();  //add是BigDecimal自带的方法
}


还可以通过这种方式进行转换java.text.DecimalFormat("0.00").format(4.025));,但是这样的做法具有局限性,只能显示的制定需要的精度




plsql与oracleClient的安装与设置
先下载pl/sql 和oralceclient,具体地址自己去搜索:
配置环境变量:
变量:ORACLE_HOME
值:D:\oracle\10.1.0.2\client (这个看你的orcalclient安装在哪儿了)


变量:NLS_LANG
值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK


变量:Path 
值:在原有的值后面增加 D:\oracle\10.1.0.2\client\bin


然后打开pl/sql,进行相关的配置
工具》首选项》oralce》链接》
设置oci库
D:\oracle\10.1.0.2\client\lib\win32\oci.dll


设置oracle的相关配置文件:
D:\oracle\10.1.0.2\client\network\admin\tnsnames.ora
里面加入你自己的oralce链接信息
如:
myoracle=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = oracleTest)
(SERVER = DEDICATED)
)
)




Dorado7学习
orado7具有比dorado5更丰富页面设计模式 ,具体的dorado7学习见http://wiki.bsdn.org/pages/viewpage.action?pageId=7897234,初步的dorado7的尝试发现,dorado7的服务器设置有点麻烦,因为每一个dorado项目必须在一个eclipse中的server中运行看,而不能像dorado5一样脱离,使用tomcat来管理项目,因此导入一个已经有的项目变的比较的难。




Dorado7的安装
下载对应版本的dorado7的开发环境后,所要的jdk版本为1.6或者1.6以上,当版本不对的时候,打开ide会发现dorado7的效果无法显示,dorado7的服务器tomcat版本为6.0或者以上,5.0会导致创建项目失效。指定服务器后,还要指定版本,版本为2.5.这样就能创建dorado7的项目了,创建项目首先要做得第一件事就是更新配置,右击鼠标,找到对应项,更新成功后便可创建视图文件,更新失败则创建不了,失败的原因有很多种,具体见dorado7官网的问题解答。




安卓开发,关于Alarm的一些用法和理解
AlarmManage是用来控制和广播intent的,首先建立一个intent:


Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);


建立pendingintent用来描述一个延迟的intent:
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, 0);


建立alarmmanage对象:


calendar用来描述延迟的时间


Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);


这样一来,intent的触发便在30秒之后了。


下面为alarmservice的使用了,Notification为任务栏上显示的消息,可以通过点击该项可以进入某个程序,如安卓端的qq程序,便可通过此种方式直接进入程序。具体查看http://www.cnblogs.com/newcj/archive/2011/03/14/1983782.html


HTML5的一些学习-20130820
关于html5的交互元素:


details:属性open可以在css文件和js中控制。


以下是css文件样式:


summary {


    font-weight: bold;


}


details {


    overflow: hidden;


    height: 0;


    padding-left: 200px;


    position: relative;


    display: block;


}


details[open] {


    height: auto;


}






然后是html格式和javascript代码:


<span onClick="span_click();">显示</span>


<details id="details1">


<summary>显示标题</summary>


显示内容


</details>


function span_click() {


    var objD = document.getElementById("details1");


    var attD = objD.getAttribute("open");


    if (attD != "open") {


        objD.setAttribute("open", "open");


    } else {


        objD.removeAttribute("open");


   }


}






menu:可以展示鼠标移动到某个li中显示的效果,只要加上一下代码即可


menu li :hover{


    border:solid 1px # 7de2ce;


    backgound-color:#cfe3fd


}






以上制定显示效果,可以自定义显示内容。


command:使用command可以定义某个按钮的图标,以及各种类型的按钮(包括命令按钮、单选择按钮和图片按钮)及复选框。


<command onClick="command_click();">Command显示</command>






但是当前好多版本的浏览器不支持,安卓内置浏览器也不支持,Firefox3.6.16可以展现效果。


progress:用以展现某个任务完成的进度(安卓内置浏览器不支持)


<p id="pTip">开始下载</p>


<progress value="0" max="100" id="proDownFile"></progress>


<input type="button" value="下载" onClick="btn_Click();">


        var click_first = true;


        var intValue = 0;


        var intTime;


        var objPro = document.getElementById("proDownFile");


        var objTip = document.getElementById("pTip");


        function Interval_handler() {


            intValue++;


            objPro.value = intValue;


            if (intValue >= objPro.max) {


                clearInterval(intTimer);


                objTip.innerHTML = "下载完成!";


            } else {


                objTip.innerHTML = "正在下载" + intValue + "%";


            }


        }


        function btn_Click() {


            if (click_first) {


                intTimer = setInterval(Interval_handler, 100);


                click_first = false;


            }


        }






meter:用来表示一定数量范围中的值(安卓内容浏览器不支持)


<p> elon:


<meter value="0.32" optimum="1" high="0.9" low="1" max ="1" min="0"></meter>


<span>30%</span>


</p>


标签base:


<head>


    <base href="xxyy" target="_blank">(_blank新窗口打开、_self当前窗口、_parent父窗口)


</head>


<a href="z"></a>


这样一来上面访问的是xxyyz。


、、、、、、、、、、、、、、


使用<meta http-equiv="keywords" content="三国杀,在线三国杀" />放在网页的head部分,可以便于搜索引擎对该页面的检索。


、、、、、、、、、、、、、、


html5新增script的属性async,当async为true时,允许js代码异步执行,即:当js代码多的时候,可以加快页面的加载,缓解页面解析的压力








关于aop事物管理设置
在applicationContext里面配置


<aop:config>
        <aop:pointcut id="pointcut"
            expression="execution(* com.cpic.document..*Service.*(..))  and !execution(* com.cpic.document.history..*Service.*(..)) and !execution(* com.newtouch.security..*Service.*(..))" />
        <aop:advisor advice-ref="advice" pointcut-ref="pointcut" />
    </aop:config>


以下表示在com.cpic.document..*Service.*(..)里面以load、query等开头的方法均可通过。其他事物被拦截,执行的时候不提交数据库。
    <tx:advice id="advice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="load*" propagation="REQUIRED" read-only="true" />
            <tx:method name="query*" propagation="REQUIRED" read-only="true" />
            <tx:method name="find*" propagation="REQUIRED" read-only="true" />
            <tx:method name="insert*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="update*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="delete*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="validate*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="calculate*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="execute*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="log*" propagation="REQUIRES_NEW"
                rollback-for="Exception" />
        </tx:attributes>
    </tx:advice>






JPA使用指南 javax.persistence的注解配置
转载于http://67566894.iteye.com/blog/659829


关于Model的建立有很详细的描述




JAVA反射机制




hibernate aop 本质
http://lavasoft.blog.51cto.com/62575/75134




java 多线程
实现Runnable接口比继承Thread类所具有的优势:


1):适合多个相同的程序代码的线程去处理同一个资源(共用数据)


2):可以避免java中的单继承的限制


3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。






java 中每个程序至少启动2个线程,一个是main函数,一个是垃圾回收机制线程。


程序推出main后然会运行子线程--子线程的活动并不依赖其父线程。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值