十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
第一步:去掉第一个/opencms
成都创新互联专注于大同企业网站建设,响应式网站开发,成都商城网站开发。大同网站建设公司,为大同等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
把下载来的opencms.jar改成ROOT.jar包,放在tomcat/webapps下,运行安装。。这样第一个/opencms 自然就去掉了,不用什么力气,也不用配置什么别的,如果您不想把opencms放了ROOT目录,也可以像其它人一样,配置虚拟目录来设置,在baidu搜索一下就有很多方法去掉第一下opencms
第二步:去掉第二个/opencms 也是我们要处理的关键部分。
现在的任务是要去掉第二个,opencms文档中,是安装apache,并使用apache的urlrewrite模块来对项目的URL进行重定向, 现在我们要使用 urlrewrite来完成这任务,如果不知道urlrewrite的朋友,可以到h ttp:/ /tuckey.o rg/urlr ewrite/下载。
下载完以后,把urlrewrite.zip里面的/WEB-INF/lib/urlrewrite.jar放到我们项目的/WEB-INF/lib/urlrewrite.jar里。
然后,在/WEB-INF/目录下新建一个urlrewrite.xml文件
注意一定要下载:urlrewrite-3.1.0.jar 版本,因为我之前使用的其它版本,没有成功。后台页面乱码。
第三步:
至此,已完成了第二个opencms的去除,但如果此时运行项目的话,项目中的URL地址还是会有/opencms/,所以我们要把URL中的这个路径去掉。
打开/WEB-INF/config/opencms-importexport.xml
找到代码:vfs-prefix${CONTEXT_NAME}${SERVLET_NAME}/vfs-prefix
将其修改为: vfs-prefix${CONTEXT_NAME}/vfs-prefix
现在,第二个opencms的去除已成功。
参考如下代码:
MS Access在测试阶段比较利于携带,Web开发初期我经常使用它。后期再移植到SQLServer或Oracle上。但最近在需要对数据库中插入图片文件时,发现了一个问题,即JDK自带的JDBC-ODBC不支持java.sql.Blob里的方法,经过查阅Java API和程序调试,我找到了个变通的方法,即:
1,在写入BLOB类型字段时,使用java.sql.PreparedStatement的setBinaryStream方法,
2,读出BLOB类型字段时,因为返回的是字节数组byte[]类型,可以把它转换成ByteArrayInputStream然后读出内容写到文件里去。
这样即使用JDK自带的JDBC-ODBC驱动, 也能自如的在数据库里读写上传下载的文件了,哈哈。
import java.sql.*;
import java.io.*;
//对BLOB字段先写入(要求被写入的文件存在),再读出来
//要求先建立一个item表,有三个字段,id(int),file_name(char),file_blob(blob)
//对Access, blob字段应该设置成为“OLE对象”类型
public class blobtest{
public static void main(String[] args){
Connection conn = null;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
/*这里的数据库的url一定要写正确,这是关键,其中DBQ可以绝对路径,也可以是相对路径,为了体现数据存储路径的/独立性,你可以将数据库copy到不同的位试一下*/
String dbUrl = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=blob.mdb";
conn = DriverManager.getConnection(dbUrl,"","");
File file1=new File("fileToWrite.doc");
File file2=new File("fileRead.doc");
//BlobWriteForOracle( conn, file1);
//BlobReadForOracle( conn, file2);
BlobWriteForAccess( conn, file1);
BlobReadForAccess( conn, file2);
conn.close();
}catch(Exception ex){
System.err.println(ex.getMessage());
public static void BlobWriteForAccess( Connection conn, File file){
try{
conn.setAutoCommit(false); // 取消Connection对象的auto commit属性
String file_name=file.getName();
// get maxid ( to avoid insert id repeatly )
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select max(id) from item");
rs.next();
int maxid = rs.getInt(1);
//maxid = (maxid==null)?0:maxid;
int id = maxid+1 ;
//System.out.println("write_id="+id);
PreparedStatement pstmt = conn.prepareStatement( "insert into item ( id, file_name, file_blob ) values ( " + id + ", ? , ? )" );
FileInputStream in = new FileInputStream(file );
int length = in.available();
pstmt.setString( 1, file_name );
pstmt.setBinaryStream( 2, in , in.available() );
System.out.println( "插入了 "+ pstmt.executeUpdate ()+ " 行数据, "
+ "id =" + id
+ ", 文件名是" + file.toString() +" , 共 "+ length +" bytes" );
conn.commit();
pstmt.close();
}catch(Exception ex){
ex.printStackTrace();
System.out.print("["+ex.getMessage()+"]");
try{
conn.rollback();
}catch(SQLException sqle){
System.err.println(sqle.getMessage());
}
}
public static void BlobReadForAccess( Connection conn, File file){
try{
conn.setAutoCommit(false); // 取消Connection对象的auto commit属性
String file_name=file.getName();
// get maxid ( to avoid insert id repeatly )
Statement stmt1 = conn.createStatement();
ResultSet rs1 = stmt1.executeQuery("select max(id) from item");
rs1.next();
int maxid = rs1.getInt(1);
//maxid = (maxid==null)?0:maxid;
int id = maxid;
//System.out.println("read_id="+id);
String sql="SELECT file_blob FROM item WHERE id=" + id + ""; //
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
rs.next();
Object obj1 = rs.getObject("file_blob"); // 得到BLOB对象
//System.out.println("type is :"+obj1.getClass().getName());
byte[] blob=(byte[])obj1;
FileOutputStream out=new FileOutputStream(file); // 建立输出流
ByteArrayInputStream in=new ByteArrayInputStream(blob); // 建立输入流
int size=1024;
byte[] buffer=new byte[size]; // 建立缓冲区
int len;
while((len=in.read(buffer)) != -1)
out.write(buffer,0,len);
in.close();
out.close();
conn.commit();
}catch(Exception ex){
ex.printStackTrace();
System.out.print("["+ex.getMessage()+"]");
try{
conn.rollback();
}catch(SQLException sqle){
System.err.println(sqle.getMessage());
}
CMS是什么?
CMS是Content Management System的缩写,意位“内容管理系统”。内容管理系统是一种位于Web前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。
内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”还包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到互联网中的信息。
一个内容管理系统通常有几个要素:文档模板、脚本语言或标记语言、与数据库集成。内容的包含物右内嵌入页面的特殊标记控制。这些标记对于一个内容管理系统通常是唯一的。这些系统通常有复杂的操作语言支持,如 Python,Perl或Java等。
内容管理在网站中的作用
CMS对站点管理和编辑人员的作用最大。这其中的好处是能够使用模板和通用的设计元素以确保整个网站的协调。制作者只要在他们的文档中采用少量的模板代码,即可把精力集中在设计的内容上了。要改变网站的外观,管理员只须修改模板而不是一个个单独的页面。
很多人内容管理系统允许对网站的不同层次面人员赋予不同等级的访问权限,这使得他们不必研究操作系统级的权限设置,只改动浏览器借口即可完成。目前,新浪的CMS是C++制作的,重点强调数据结构的丰富,功能非常强大。评论回复系统做的最好的是网易,延伸阅读做得也不错。搜狐的图库系统做得最好。
其他的网站功能如搜索引擎、日历、Web邮件等也会以第三方插件的形式集成进来。
国内CMS三大分类情况
由于针对的目标用户不同,各个内容管理系统的一些特点都会有所不同。对于要想把CMS应用到网站中的站长而言,为了准确的网站定位,了解国内的CMS内容管理系统的分类情况是非常有必要的。
第一类,面向政府、事业单位,有内外网的应用,特点是用户间的需求差距大,内容管理只是一个大的系统中的某一个部分,一个网站中可能有多个CMS系统。一般在实施时要求制定开发,不可能用现成产品来满足需求。这样的解决方案有:方正祥羽、清华万博、WITS、中关村软件等。这一类别的产品价格非常高,通常在几万元,也可能上百万!
第二类,面向政府、媒体、ICP、大型企业,特点是维护内容的人数多,水平有高有低,但是需求比较明确,做各种类型的信息发布平台,要求承受的产品级的解决方案。相应的产品有:TurboCMS、TRS WCM、龙讯。
第三类,面向企业、个人,特点为用户是网站技术爱好者,喜欢钻研。需求上可能比较复杂,比如要跟BBS、用户注册等应用集成在一起,满足个性化的需求,最好有原代码,可以自己根据需要修改等等。
又是那种要求3、4天或一个星期做一个网站的压榨型公司出来的吧?虽说及时利益丰厚,但这种公司迟早会被淘汰。收了客户的钱,就这么做客户的网站。(如果你说这个网站只要1000元我们接了,那自己去接单就好了,在网上,去公司推销,赚的钱全给自己,而不是赚的钱自己只拿百分之几。)
好吧,我以上说的都是废话。。。。。。
-------------------------------------------------------
java 内容管理系统(CMS)的源代码都在卖钱,不可能有挂在网上的,最好的办法是自己组织开发人员做一个。
或者拿到另一个娱乐网站的源代码,自己慢慢“套”