存档在 2015年5月

SQL的主键和外键约束

2015年5月28日

一、SQL的主键和外键的作用

外键取值规则:空值或参照的主键值。

(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。

简而言之,SQL的主键和外键就是起约束作用。

» 阅读更多: SQL的主键和外键约束

shiro相关概念

2015年5月24日

Shiro团队将”应用程序安全性的四块基石”作为目标:认证,授权,Session管理,密码。
1. Authentication
有时被称为”登陆”,证明一个用户是谁。
2. Authorization
权限控制,即用户具有什么权限。
3. Session Management
管理用户相关的session。
4. Cryptography
使用加密算法进行数据的加密。
还有其他一些特性来支持和加强了这些概念:
1. Web Support
支持web应用
2. Caching
缓存是Shiro API的核心,保证了安全操作的高效。
3. Concurrency
支持具有并发特性的多线程应用。
4. Testing
支持单元和继承测试。
5. Run As
支持将用户假定为其他用户的特殊情形,适用于某些管理模式下场景。
6. Remember Me
记忆用户标识,当需要强制登陆时,进行验证操作。

Shiro User Manual-Session Management

2015年5月24日

1. Session Management
Shiro提供了安全框架所独有的特性:企业级session的解决方案。

1.1 Using Sessions
使用Subject获取Session:

Subject currentUser = SecurityUtils.getSubject();
Session session = currentUser.getSession();
session.setAttribute( "someKey", someValue);

和HttpServletRequest的API相似,Suject.getSession(boolean create)方法和HttpServletRequest.getSession(boolean create)有相同的逻辑:
a. 如果当前的Subject已经有Session,返回当前Session,参数boolean被忽略。
b. 如果当前的Subject没有Session,且参数boolean是true,创建新Session,并返回。
c. 如果当前的Subject没有Session,且参数boolean是false,不创建新Session,直接返回null。
有了Session,就可以进行任何操作,比如设置超时时间等。需要注意的是,此Session非HttpSession,也就是说,getSession 可以在非web环境下调用。

» 阅读更多: Shiro User Manual-Session Management

” aticonfig: No supported adapters detected “解决

2015年5月6日

” aticonfig: No supported adapters detected “问题的解决。

背景

安装AMD显卡驱动,首先查看到了显卡的型号

[root@creater]#lspci
03:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Sun XT [Radeon HD 8670A/8670M/8690M]

接着去AMD官网下载了驱动
amd-catalyst-omega-14.12-linux-run-installers.zip
解压后安装,根据log提速依赖包来解决依赖问题,等待一会就会自动产生适用于Ubuntu 64的deb包。
安装完成,试图运行

aticonfig --initail

出现了标题的错误。

解决办法

1.查看了/etc/X11/下,没有了xorg.conf,但是有两个备份文件。
2.于是重启,但是不能进入桌面,使用CTRL+ALT+F1切换到tty1,登录后,startx启动图形界面,运行

aticonfig --initail

检查/etc/X11/xorg.conf是否存在,另外检查是否有如下的字段

Section "Device"
	Identifier  "amd-device"
	Driver      "fglrx"
	BusID       "PCI:3:0:0"
EndSection

没有则添加

Section "Device"
 Identifier "ATI radeon ****"
 Driver "fglrx"
EndSection

其中的****为你的AMD显卡型号。如果出现 “AMD Unsupported hardware” 水印图标,执行。

#!/bin/sh
DRIVER=/usr/lib/xorg/modules/drivers/fglrx_drv.so
for x in $(objdump -d $DRIVER|awk '/call/&&/EnableLogo/{print "\\x"$2"\\x"$3"\\x"$4"\\x"$5"\\x"$6}'); do
 sed -i "s/$x/\x90\x90\x90\x90\x90/g" $DRIVER
done

还可以在本博客搜索其他解决方法。

关于myeclipse+freemarker框架开发

2015年5月2日

在开发中总遇到乱码问题。所以自己在网上搜集并摘录在这里,以便以后查询使用。
1.对于在myeclipse中JS注释文字乱码问题
对于乱码问题,主要 有MyEclipse的设置有关,可以在MyEclipse的选项卡中找到Editors此选项卡下的jsp选项卡窗口,有一个Encoding属性值, 可选择Chinese即可解决显示乱码的问题!对于乱码是不会导致myEclipse语法错误提示的!
现在就重点讲讲导致 语法错误的问题解决方案,对于一般的web应用开发,我个人不建议使用myEclipse这个插件,个人推荐使用WTP这个插件,而且目前官网也将此插件 结合到Eclipse之中,可见此插件之易用性和可用性。在Eclipse官网上下载Java EE Developers 这个版本即可!此版本非常适用于WEB项目的开发。此插件可解决上述楼主的所有问题。但不建议与myEclipse一些使用。
2.在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!
如:以

两种方式提交的变量flag在LoginServlet中用 request.getParameter(“flag”);时就会出现乱码问题。
解决:在tomcat/conf/servlet.Xml中 加入一段代码:

<Connector port="8090" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true" URIEncoding="true"/>

3.如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码:
<% request.setCharacterEncoding("gb2312");%>
4.在.js文件中加入了中文,添加到MyEclipe时就变成乱码了,但是网页能够正确显示中文,但是乱码怎么解决?
在 myeclipse 的 preferences-属性 中搜索 javascript,搜到以后把它的Editing files 下的 Encoding 改为 Chinese,National Standard 就好了 也就是 GB18030 .
5.对于在浏览器中JS输出文字乱码问题
如果web application的编码规则是utf-8,如网页头中的:

那么js文件中如果有中文输出就会出现乱码,解决此个问题可在引用javascript输出的地方加上charset=”gb2312″ 或 charset=”big5″(假设输出的是Big5繁体字)。
例:

6.引用多个js文件,inntext输出中文乱码问题
原来写的js文件,从来没有关心过他们的编码问题。可是后来不知怎么的,发现一些单独都好使得文件,被同时引用到一个页面中时,特别是JS里面有中文时。有时候就出现中文在浏览器输出乱码问题。一个一个的看编码。最后找到了原因。
一般我们在中文OS 中保存文本文件,默认都是一GB2312编码保存的,可是当我们在脚本代码中写有”?”这些符号后,保存文件会提示让你保存为Unicode格式。如果你 不加理会,仍然保存为GB2312,那么下次打开这个文件你会发现”?”变成”?”@_@。这样的字符还有一些,比如在Windows中的高位ASCII 字符,它们的Unicode定义就是一些比较怪异的字符,如果用GB2312强行存这些字符,打开后会被两两合并为汉字或成为乱码。
回到我们脚本文件编 码的问题上来,如果我们在同一个页面中引用多个JavaScript文件,而这些文件的保存编码又不同(有GB2312有又Unicode),就可能出 错。当然不是总都出,这也是最要命的。由于对于7bit ASCII码,不管什么编码都是通用的,也不会有解码问题,可是如果文件里包含了汉字,就有可能出错了。
比如,GB2312保存的js文件: var str = ‘这是一个GB2312编码文件。’;
var description = ‘this file saved as GB2312 encoding.’; 可以在选择编码为GB2312的IE中正确的被引用。
Unicode编码保存的js文件: var strW = ‘这是一个Unicode编码文件。’;
var descriptionW = ‘this file saved as Unicode encoding.’; 可以在选择编码为Unicode的IE中正确的被引用。
而这两个文件在下列引用中,不管怎么选择IE编码也是不能正确执行结果:

( <html>
<head>
    <title>Test Encode</title>
    <script src="Unicode.js" language="javascript"></script>
    <script src="GB2312.js" language="javascript"></script>
</head>
<body>
<script language="javascript">
    alert(strW + '\r\n' + descriptionW);
    alert(str + '\r\n' + description);
</script>
</body>
</html>

我的解决方法是:还是要和页面的编码保持一致。比如我的ftl文件编码是utf-8的。那么我一般会把JS文件用记事本打开。然后另存。名字不改。只是把下面的编码改为“utf-8”格式的。
然后引用JS
然后从新启动服务。问题就解决了!
7.使用freemarker+springMVC的框架,不知道在.ftl文件中如何截取指定长度的中文字符串,freemakert有自己的函数
时期也可以用CSS来控制。但是有一个弊端。就是只能控制显示一行的数据。如果是多行的就不行了。正好我用的是freemarker框架。有自己的函数。否则就要用JS或者是在服务端进行控制

<#if news.title?length lt 13 >   
       ${news.title}
       <#else>
       ${news.title[0..12]}...
</#if>

顺便说下:ISO8859-1、utf-8和gb2312的意义
ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。
而gb2312是标准中文字符集。
UTF-8 是 UNICODE 的一种变长字符编码,即 RFC 3629。简单的说——大字符集。可以解决多种语言文本显示问题,从而实现应用国际化和本地化。

对系统来讲,UTF-8 编码可以通过屏蔽位和移位操作快速读写,排序更加容易。UTF-8 是字节顺序无关的,它的字节顺序在所有系统中都是一样的。因此 UTF-8 具有更高的性能。

不过如果是纯英文的话,用什么都可以,用GB2312也没问题。
8.我在重新GHOST我的机器以后,启动myeclips出现“could not create the java virtual machine”的错误的解决方法
1、在D:\Program Files\MyEclipse 6.1 Blue\eclipse有个eclipse.ini文件,原来的配置如下:
-showsplash com.genuitec.myeclipse.blue.product.ide –launcher.XXMaxPermSize 256m -vmargs -Xms128m -Xmx512m -Duser.language=en XX:PermSize=128M -XX:MaxPermSize=256M

2、现在将原来配置改成如下所示:
-showsplash com.genuitec.myeclipse.blue.product.ide –launcher.XXMaxPermSize 256m -vmargs -Xms128m -Xmx512m -Duser.language=en -XX:PermSize=64M //修改此处 -XX:MaxPermSize=128M

只要修改以上代码后,myeclipse便可以启动了
另,此配置eclipse中tomcate 也有,最大内存不可大于自身内存.
9.在myeclipse中编辑显示ftl文件,安装freemarker IDE插件
我用的是myeclipse环境来做开发,但是发现刚开始点击FLT无法编辑和显示 。办法如下:
1.先到http://freemarker-ide.sourceforge.net下载插件
2. 解压,将hudson.freemarker_ide_0.9.14文件夹放入eclipse下或者myeclipse下的eclipse下的的plugins文件夹。
3. 发现hudson.freemarker_ide_0.9.14下的 freemarker-2.3.6.jar包是比较早的版本,用新的freemarker-2.3.15.jar替换之,把MANIFEST.MF里的 Bundle-ClassPath也改为freemarker-2.3.15.jar
4. 退出Eclipse或者myeclipse再重启,在window –> Preferences 左边的树形栏里出现FreeMarker Editor一项新的内容。在General –> Editors –> File Associations下,为*.ftl文件添加(add)FreeMarker Editor 作他们关联的编辑器(associated editors) , *.ftl文件的默认编辑器就是FreeMarker Editor。