最近一个多月,都在忙项目,现在有点时间,赶紧查漏补缺,记下一些关键点:
1.关于项目首页/入口的问题
一个资讯类的ss2h项目中,比如一个学校的官网。我们最想看到的是首页,那么首页的数据哪来的?我要的是从数据库中取出来的数据,不是写死在静态页面的。除了首页外,我们其他的页面跳转是经过一个Action的,在Action中取出数据带给下一个页面。问题是:首页是一个项目的最先开始,它的前面并没有一个Action,那么他的数据怎么来?
有人说用ajax/jquery在onload函数发送请求给后台,获取数据。这样思路行的通,问题时当数据过大时,会造成打开页面时有一瞬间的白屏,效果不是很理想。
这里,我在百度找到一张解决方法:让首页也经过一个Action
先来看看我们页面的结构:
页面一般都全放在WEB-INF中(防盗链),我们可以在index.jsp中设置一个跳转:<jsp:forward page="xxxxxxxx.action"></jsp:forward>
还要再web.xml插入:<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher> 不然会报错,在struts的过滤其中,完整如下:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
这样就可以在Action取数据带给首页,也不会出现页面白屏
2.linux配置tomcat 7.0.62的问题
(1)这里以opensuse版本的linux为例,当你把一个tomcat传输进linux并安装好后,启动往往会报错,在tomcat目录下:./startup.sh 会有很多提示,什么没有权限。因为tomcat的所有文件在linux下是默认只读的,这个时候我们会想到 chmod 755 .......。于是,我改了startup.sh的权限,可是还是启动不了。因为好多相关联的文件都是只读的,于是,我推到放tomcat的目录,直接:chmod -R 777* tomcat (tomcat是你的tomcat存放的目录名) 问题就解决了。再./startup.sh就可以启动了
(2)我们的项目是通过在tomcat发布war文件而发布的,所以,我们主要一个tomcat的用户,tomcat7 的配置用户与tomcat6有区别:先使用vi编辑器编辑tomcat/conf/tomcat-users.xml,在</tomcat-users>上面加上:
<role rolename="manager-gui"/>
<role rolename="managet-status"/>
<role rolename="manager-jmv"/>
<role rolename="manager"/>
<role rolename="admin"/><role rolename="admin-gui"/><user username="admin" password="admin" roles="admin,manager,manager-gui,manager-status,manager-jmv,admin-gui"/>
六个用户,最好都不要少
然后在bin目录下:./shutdown.sh ./startup.sh 即可生效
(3)防火墙允许tomcat端口被访问
名令行修改配置防火墙试了n次,也没成功。/etc/sysconfig 目录下没有iptables 文件,好在有图形化界面,在一个叫:YasT 的工具,傻瓜式的使用,自己增加一个防火墙允许的端口即可
3.mysql数据库表的设计
因为hibernate的级联操作可以省下很多力,所以在设计表的时候喜欢加外键。比如有一个业务,是关于评论回复的,对一片文章评论,对新闻评论,对图片评论,对视频评论,而文章,图片,新闻,视频 各是一张表,一开始我是这样建表的:
create table comment(
id int(11) not null primary key auto_increment,
comment_uid int not null,//谁评论
parcommentId int,//父评论Id
content varchar(512) not null,//评论内容
comment_time datetime not null,//评论时间
blogid int not null,//被文章评论的表的Id
newid int not null,//被新闻评论的表的Id
photoid int not null,//被图片评论的表的Id
vedioid int not null,//被视频评论的表的Id
isGet int not null default 0,//是否接收到回复
foreign key (comment_uid) references user(id),
foreign key (blogid ) references blog(id),
foreign key (newid ) references new(id),
foreign key (photoid ) references photo(id),
foreign key (vedioid ) references vedio(id)
);
但是这样会造成数据冗余,数据库开销太大,于是,变成了下面的设计
create table comment(
id int(11) not null primary key auto_increment,
comment_uid int not null,//谁评论
parcommentId int,//父评论Id
content varchar(512) not null,//评论内容
comment_time datetime not null,//评论时间
commentItem int not null,//被评论的表的Id
isGet int not null default 0,//是否接收到回复
commentType char(5) not null,// 类型
foreign key (comment_uid) references user(id)
);
类型是表示评论是属于哪个表的,是新闻还是视频...被评论表的id是该类型表的id,这种结构可以减少数据开销,虽然快了,可是就没那么方便了。