一个专注于技术的IT男
小问题
link的地址以斜线开头完全没有道理啊
八 25th
在内部搭一个类stackoverflow的系统,选了个基于django的开源的osqa,部署的时候陆陆续续发现源码里有点小问题,比如用户相关的很多link是这样写的:
<a href="/users/{{ user.id }}/{{ user.username|slugify }}/">{% gravatar user 32 %}</a>
这么搞的话link就指向了服务器的documentRoot,但是我不会把osqa这个应用直接挂在根域名下,这样的hard code我觉得挺愚蠢的。
其实同样的问题也存在我们的jsp里面,这个编程习惯不好,要改正其实也不难,手工做的话可以取得app的rootPath就行了,或者用url标签来帮我们自动搞定。(django&jsp都有的)
另一个Note:osqa第一次装的时候会把配置信息写到forum_keyvalue表里面,后面修改上传路径等的配置没有用,必须到数据库修改。
mysql> update forum_keyvalue set value="S'/upfiles/logo.png'
"> p0
"> ." where id=26;
mysql> update forum_keyvalue set value="S'/var/lib/osqa/forum/upfiles'
"> p0
"> ." where id=33;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from forum_keyvalue where id=33;
+----+----------------+-------------------------------------+
| id | key | value |
+----+----------------+-------------------------------------+
| 33 | UPFILES_FOLDER | S'/var/lib/osqa/forum/upfiles'
p0
. |
+----+----------------+-------------------------------------+
Something more:
Larry wrote 2 useful CSS related posts:
CSS – small tips (设置图像最大宽度,打印分页)
CSS – sprites, manage images (图像合并切割)
END
ubuntu安装mplayer遇到的一些问题及解决办法
二 12th
关于ubuntu安装mplayer网上已经有很多的文章,我也装的时候也参照了一下下面两个链接。这篇文章主要是为了记录我安装的时候遇到的问题及解决办法。
http://linux.chinaunix.net/docs/2008-01-24/4725.shtml http://tech.ccidnet.com/art/3089/20090106/1652395_1.html
安装有五个步骤,我下载了Subversion snapshot的源文件,以及其他几个文件之后,
drwxr-xr-x 2 root root 4096 2009-02-11 23:22 codecs
drwxr-xr-x 2 root root 4096 2007-10-07 22:07 wincodecs
Check “configure.log” if you do not understand why it failed.
解决办法: google了一下发现我需要libavcodec这个东东,但是在我检查了一下明明以及装过了的,同时发现还有下面这个包没有装过,看了一下这个包的说明,猜想了一下觉得应该把它装上,这里要说的说ubuntu真的很方便,这个(Synaptic Package Manager) 新立得包管理器简直就是一个神器啊!在Synaptic Package Manager里选中这个包,它会把depend的其他包都自动下载安装,爽死了。
libavcodec-dev
development files for libavcodec
This is the codec library from the ffmpeg project. It supports most existing
encoding formats (MPEG, DivX, MPEG4, AC3, DV…).
This package contains the header files and static libraries needed to
compile applications or shared objects that use libavcodec.
Check “configure.log” if you do not understand why it failed.
解决办法: 继续google发现这次的解决办法是要安装下面两个包,还是用Synaptic Package Manager
libgladeui-1-7
GTK+ User Interface Build core library
libgladeui-1-dev
GTK+ User Interface Build core library (development files)
Glade is a RAD tool to enable quick and easy development of user
interfaces for the GTK+ 2 toolkit.
Glade is, since its “3.0″ major version, highly modular, and composed
of widgets which can be used by other applications to integrate
functionality similar to the one provided by the Glade application
itself.
hao@hao-desktop:~/downloaded/mplayer-export-2009-02-11$ sudo make install
[sudo] password for hao:
install -d /usr/local/mplayer//bin /usr/local/mplayer//etc/mplayer /usr/local/mplayer//lib
install -m 755 -s mplayer /usr/local/mplayer//bin
ln -sf mplayer /usr/local/mplayer//bin/gmplayer
install -d /usr/local/mplayer//share/mplayer/skins /usr/local/mplayer//share/pixmaps /usr/local/mplayer//share/applications
install -m 644 etc/mplayer.xpm /usr/local/mplayer//share/pixmaps/
install -m 644 etc/mplayer.desktop /usr/local/mplayer//share/applications/
install -m 755 -s mencoder /usr/local/mplayer//bin
install -d /usr/local/mplayer//share/man/zh_CN/man1
install -m 644 DOCS/man/zh_CN/mplayer.1 /usr/local/mplayer//share/man/zh_CN/man1/
cd /usr/local/mplayer//share/man/zh_CN/man1 && ln -sf mplayer.1 mencoder.1
hao@hao-desktop:~/downloaded/mplayer-export-2009-02-11$
最后还需要安装字体和皮肤,很简单的活,没遇到问题。
Q:ubuntu如何安装deb格式的包?
使用JNDI查找JBOSS内配置好的数据源遇到的问题
二 4th
这应该是很多J2EE新手都会碰到的问题,我在做一个J2SE中调用EntityManager学习JPA的小例子,遇到了不少异常信息
其中一个问题就是,运行Main程序时拿不到MySqlDS的配置,
google的一堆文章之后,在这篇帖子中找到的想要的答案 http://www.theserverside.com/discussions/thread.tss?thread_id=29813
总结一下就是JBoss默认将数据源绑定在本地JNDI命名空间下,所以不能从JBoss运行的JVM之外查找到改数据源,要解决这个问题就是配置JBoss将数据源绑定在全局命名空间下。
这个在dataSource的配置文件中指定,以MySql为例,就是在修改${JBOSS_HOME}/server/default/deploy/mysql-ds.xml
在<jndi-name>MySqlDS</jndi-name>下面一行添加 <use-java-context>false</use-java-context>
下面截取了JBoss此时打印出的一段日志,可以明显看到我们要的结果生效了
*** CONTEXTS IN ERROR: Name -> Error
persistence.unit:unitName=#HelloTitan -> javax.naming.NameNotFoundException: MySqlDS not bound
14:29:24,589 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080
14:29:24,693 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
14:29:24,709 INFO [ServerImpl] JBoss (Microcontainer) [5.0.0.GA (build: SVNTag=JBoss_5_0_0_GA date=200812042120)] Started in 1m:768ms
14:35:10,011 INFO [ConnectionFactoryBindingService] Unbound ConnectionManager ‘jboss.jca:service=DataSourceBinding,name=MySqlDS’ from JNDI name ‘java:MySqlDS’
14:35:10,222 INFO [WrapperDataSourceService] Bound ConnectionManager ‘jboss.jca:service=DataSourceBinding,name=MySqlDS’ to JNDI name ‘MySqlDS’
再次小结ServletRequest.getParameter乱码问题
十一 25th
情况之一:没有编码URL
HTML 页面
var url = “./SuggestServlet?tagName=”+document.getElementById(‘tagName’).value;
做一个AJAX请求到SuggestServlet,参数是中文字符串,(传递到容器,由容器决定采用何种编码解析)
到Servlet之后取这个参数 String myparam = request.getParameter(“tagName”);
得到的是一个乱码字符串,request.getCharacterEncoding() 得到的是一个null值,这时候tomcat默认的是ISO-8859-1编码解析,这就是我们得到乱码的原因了。
解决办法:
myparam = new String(myparam.getBytes(“ISO-8859-1″),”UTF-8″); 这样就能得到中文了
情况之二:使用javascript的encodeURI编码中文参数
HTML页面
var url = “./SuggestServlet?tagName=”+encodeURI(document.getElementById(‘tagName’).value);
同样是做一个AJAX请求到SuggestServlet,这时候参数被编码过了
到Servlet之后取这个参数 String myparam = request.getParameter(“tagName”);
得到的是UTF-8编码之后的字符串,其实不是乱码。
要获得中文字符,我们还需要再转换一次编码String decodingParam = URLDecoder.decode(myparam, “UTF-8″);
———————————————————————————————————————
补充:做URL请求之前,应该使用JavaScript encodeURL(url)
———————————————————————————————————————
EL如何取得数组长度?EL取不了要靠JSTL
十 22nd
方法一: 使用JSTL functions
<%@taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>
Eg:You have ${fn:length(shoppingCart.products)} in your shopping cart.
注意:这个标记和core不一样,它不能这样用 <fn:length(${commentsList}) />,这样会报类似于这样的一个异常:
org.apache.jasper.JasperException: /myshowpost.jsp(17,27) No tag “length(${commentsList})” defined in tag library imported with prefix “fn”
方法二: 使用<c:foreach status.count属性
<%@taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
用c:forEach 中vaStatus的属性可以获得迭代的自身状态,如:
<c:forEach var=”" items=”" varStatus=”status”>
<c:out value=”${status.index}”/> 此次迭代的索引
<c:out value=”${status.count}”/> 已经迭代的数量
<c:out value=”${status.first}”/> 是否是第一个迭代对象
<c:out value=”${status.last}”/> 是否是最后一个迭代对象
</c:forEach>
jsp:include 乱码问题的解决办法
九 23rd
<jsp:include page=”header.jsp”></jsp:include>
解决办法是在header.jsp里加上下面这段话:
<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>