cms知识总结.docx

上传人:b****1 文档编号:12787482 上传时间:2023-04-22 格式:DOCX 页数:61 大小:356.13KB
下载 相关 举报
cms知识总结.docx_第1页
第1页 / 共61页
cms知识总结.docx_第2页
第2页 / 共61页
cms知识总结.docx_第3页
第3页 / 共61页
cms知识总结.docx_第4页
第4页 / 共61页
cms知识总结.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

cms知识总结.docx

《cms知识总结.docx》由会员分享,可在线阅读,更多相关《cms知识总结.docx(61页珍藏版)》请在冰豆网上搜索。

cms知识总结.docx

cms知识总结

Cms第一天3.23

CMS开发全过程介绍

1.Web项目开发的一般流程

a)需求确定

b)需求分析

i.架构分析和设计

ii.业务逻辑分析和设计

iii.界面设计

iv.数据库的设计

c)开发环境搭建

d)开发和测试

e)文档编写

2.项目简介

a)项目名称:

CMS(体育网站内容发布系统)

b)项目简介:

体育视频交流网站是一个利用p2p技术来分享交流视频内容的一个网站,本网站建立的基础是在网上网民提供视频连接的基础上,而不是直接来提供视频直播与分享,只是分享P2P连接.

c)职责:

负责需求的调研、系统设计、编码和单元测试,以及产品上线后的bug跟踪,服务器流量和性能的监控。

d)使用技术:

jsp/jdbc/servlet/jsptag.

3.CMS业务流程

国家->参赛队赛事-比赛->体育项目用户权限角色广告赔率(与外部网站的接口)

4.CRUD(Create、Read、Update、Delete)

5.搭建开发环境

a)启动Oracle进入sqlplus,以system用户登录,执行如下命令

Sqlplussys/sysassysdba

i.@D:

\share\cms.sql

b)Oracle常用命令

i.selecttable_namefromuser_tables;

ii.selectview_namefromuser_views;

iii.selecttrigger_namefromuser_triggers;

iv.selectsequence_namefromuser_sequences;

v.run、/、r执行当前缓存区中的命令

vi.L(list)显示当前缓冲区中的命令

vii.showuser显示当前连接用户

viii.selectnamefromv$database;当前执行的那个instance下面

ix.setlinesize400输出一行字符串的个数(缺省为80)\

x.alteruserxxxxxaccountunlock

xi.selectconstraint_name,constraint_type,table_namefromuser_constraintswheretable_name='CMS_USER';

c)采用MyEclipse建立cms项目

d)将demo下的所有文件拷贝到webroot下

e)将Oracle的jdbc驱动拷贝到WEB-INF/lib下

6.在本项目中具体会用到的知识

a)Servlet

i.Filter

ii.Httpsession

iii.JDBC

iv.AJAX

v.Jsp

vi.Html

vii.Javascrip

ERRORatline1:

ORA-01940:

cannotdropauserthatiscurrentlyconnected

当前有用户正在使用当前数据库

selectsid,serial#fromv$session

2whereusername='AA';

altersystemkillsession'136,33';

学习智慧和提问的智慧:

学习好基础,基础比什么都重要

学会学习,学会思考,google并不是我们唯一利用的工具,比如jdbc有些用法不清楚,观看api,你不明白,到哪里去找,www.jcp.org或者,找相关官方文档

学习不要求内容多,但要求每个内容都理解透,能够融会贯通。

学习java就要首先学会,debug以及单元测试,等你debug过后不明白然后才问别人。

Java知识体系都是有据可寻的,不是只有从搜索来的,任何一部分知识内容的来源都是来源于规范。

解决问题的能力,绝对脑子死记灌输的知识更加重要。

Myeclipse6.01的安装使用,安装完毕后设置几个参数%Myeclpse_home%/eclipse/eclipse.ini

-showsplash

com.genuitec.myeclipse.product

--launcher.XXMaxPermSize

256m

-vmargs

-Xms128m

-Xmx512m

-Duser.language=en

-XX:

PermSize=128M

-XX:

MaxPermSize=256M

关于oracle会出现的问题,有以下几种情况

1:

TNSlistener问题,可以删除listener重新建一个

2:

如果有使用代理软件的,用客户端连不上oracle的,请关掉代理软件

3:

有的人可以改了oracle的1521端口,或者不确认这个端口被杀毒软件或者其他软件屏蔽的问题,可以telnet127.0.0.11521看看能否telent上去,如果能的话也不能确定是oracle开放的这个端口,如果确认呢?

Netstat/hnestat–abn

如果哪一个端口占用了比如8080端口,你可以杀掉这个进程ntsd-cq-pPID

关于需求方面的知识,请仔细看PPT

CMS第二天3.24

1:

建立webproject

a):

建立webproject选择J2ee1.4不用选择jstl,拷贝prototype到WebRoot

b)Myeclipse建立一个server,并且要enbale

c部署web到建立好的server上去

d)拷贝ojdbc14.jar到web-inf/lib下面

e)写一个DB测试类。

f)注意检查自己的jdk的设置,编译如果用5.0那么jre也要选择5,最好选择一个版本

不要出现一个1.4一个5的情况

2:

JDBCdriver4种类型

a:

jdbc-odbc桥接方式

依靠sun提供的一个 jdbcodbcdirver,可移植性差

publicstaticConnectiongetBridgedConnection(){

Connectionconn=null;

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

conn=DriverManager.getConnection("jdbc:

odbc:

cms","cms","cms");

}catch(ClassNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnconn;

}

b:

依赖数据库供应商提供的客户端的实现,可移植性差,但是效率比较高

publicstaticConnectiongetOciConnection(){

Connectionconn=null;

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

conn=DriverManager.getConnection(

"jdbc:

oracle:

oci:

@127.0.0.1:

1521:

sxt","cms","cms");

}catch(ClassNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnconn;

}

c:

中间件来实现,适合分布式应用,中间件会优化

用tomcat建立connectionpool就是其中的一种(详见3用tomcat创建一个数据库连接池)

d:

纯javadirver实现,可移植性很好,我们最常用的一种方式。

publicclassDB{

publicstaticConnectiongetConnection(){

Connectionconn=null;

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

conn=DriverManager.getConnection(

"jdbc:

oracle:

thin:

@127.0.0.1:

1521:

bjsxt","cms","cms");

}catch(ClassNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnconn;

}

3:

用tomcat创建一个数据库连接池(第四天课程会涉及到)

publicstaticConnectiongetConnectionFromPool(){

Connectionconn=null;

DataSourceds=null;

Contextcontext=null;

try{

context=newInitialContext();

ds=(DataSource)context.lookup("java:

comp/env/jdbc/cms");

conn=ds.getConnection();

}catch(NamingExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnconn;

}

4:

自己手写一个连接池

ackagecom.bjsxt.cms.util;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

importjava.util.Vector;

/**

*数据库连接池

*

*@authorAdministrator

*

*/

publicclassDBConnectionPool{

privatefinalstaticintMAX_SIZE=10;

privatefinalstaticintMIN_SIZE=3;

privatefinalstaticVectorpool=newVector();

static{

for(inti=0;i

pool.add(createConnection());

}

}

/**

*得到一个数据库的连接,如果当前池里面没有连接,创建一个新的联机,如果数据库联机池里面有连接,那么从池里面得到

*

*@return

*/

publicstaticsynchronizedConnectiongetConnection(){

System.out.println(pool.size());

Connectionconn=null;

if(pool.isEmpty()){

conn=createConnection();

}else{

intidx=pool.size()-1;

conn=(Connection)pool.get(idx);

pool.remove(conn);

}

returnconn;

}

/**

*

*createaconnectionbyDriverManager

*

*@return

*/

privatestaticConnectioncreateConnection(){

Connectionconn=null;

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

conn=DriverManager.getConnection(

"jdbc:

oracle:

thin:

@127.0.0.1:

1521:

sxt","cms","cms");

}catch(ClassNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnconn;

}

/**

*closeconnectionifpoolsizelargerorequalMAx_sizeifthenumberof

*poolsizelessthanMax_size,putbacktothepool

*@paramconn

*/

publicstaticsynchronizedvoidclose(Connectionconn){

if(pool.size()>=MAX_SIZE){

try{

conn.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}elseif(pool.size()

pool.add(conn);

}

}

}

5:

单例的4种实现方式:

第一种方式,预先加载的问题,可能再没有手动创建对象的时候已经实例化了变量

privatestaticfinalUserServiceuserService=newUserService();

privateUserService(){

}

//在第一种方式下面,不需要加锁

publicstaticUserServicegetInstance(){

returnuserService;

}

//第二种排队现象比较严重,会出现性能问题

privatestaticUserServiceuserService=null;

privateUserService(){

}

publicstaticsynchronizedUserServicegetInstance(){

if(userService==null){

userService=newUserService();

}

returnuserService;

}

 

//第三种方式容易造成创建多个对象的问题,特别第一创建对象的时候,另外一个线程已经进入if(userService==null)等候synchronized,执行完毕,然后会创建第二个实例,所以会出现并不是单例的情况

publicstaticUserServicegetInstance(){

if(userService==null){

synchronized(UserService.class){

userService=newUserService();

}

}

returnuserService;

}

 

//第四种方式避免了第三种创建多个实例现象,并且避免了多个线程排队等候的现象,双检查的情况

publicstaticUserServicegetInstance(){

if(userService==null){

synchronized(UserService.class){

if(userService==null)

userService=newUserService();

}

}

returnuserService;

}

总结:

单例模式的要素

a)私有的静态的成员变量

b)私有的构造方法

c)公共的静态的入口点方法

cms第三天3.26

1:

用户前端后端验证的问题:

a:

前台的验证javascript,验证长度,输入是否合法

b:

提交时候后台验证

b1:

在service中增加验证用户是否存在的方法isExist()

b2:

通过单元测试,测试一下isExist()是否能运行成功

b3:

在userAddservlet中调用验证方法来验证用户名是否重复,

导向到不同的页面上去

b4:

如果用户添加经过验证后,当前用户存在,导向之后页面应该保存用户的基本信息,以方便用户改正,而不用重新输入。

2:

注意的几个问题:

a:

servlet重新载入的问题

b:

单元测试一定要进行

3:

几个path区别与联系:

ServletPath、Contextpath、pathinfo、reuquestURI

Contextpath:

webapp的根目录“/”开头

Servletpath里面设置servlet相应路径也是以”/”开头结尾不是”/”

pathinfo是jsp里面的额外的路径,这个路径的前面是里面通配的一个路径

requestURI=ContextPaht+servletPath+pathinfo

Cms第四天3.27

1:

分页

a)oracle的分页

rownumoracle里面的一个伪列,现有结果集,后分配rownum

从1开始,不会从大于1数开始。

如果在where子句中加入了rownumn(n>1)的情况下,查询结果为空

也就是说ronum在>1的情况下,是动态变化的,通过子查询可以固定主rownum的值,通过子查询比较rownum>n的情况,然后得到结果集。

selectt.rn,t.id,t.name,t.password,t.email,t.valid,t.phone,t.time_stampfrom(selectrownumrn,id,name,password,email,valid,phone,time_stampfromcms_userwherenamelike'%c%'andrownum<5)twheret.rn>=2;

b)分页的要素

B1:

查询提交

B2:

导航到第几页

c)设计一个分页的对象

pageList对象

pagelist的基本属性

pagesize每页显示的最大行数是多少

pageNum当前的页

rowCount当前查询的所有结果集的数量,总数量

pageCount当前查询所查询出来的琐有的页数

List是当前页的记录,里面存储的是对象

d):

构建一个查询方法

据我们的pageList查询,返回当前pagelist

根据分页得到当前页

计算所有的行

根据所有的行数和每页最大显示数量计算出,总共有多少页

e):

pageList在前台页面显示策略

1:

如果所有的页数>1

2:

如果我们当前页>1

如果当前页<所有的页数:

第一页,前一页,后一页,最后页

如果当前页=所有的页数:

第一页,前一页

3:

如果我们当前页<=1

显示后一页,最后页

javascript正则表达式

^[1-9][0-9]*$

^匹配开始[0-9]0到9的数字*0个或者多个$结尾

ascascend

descdescend

CMS第五天3.28

1:

ajax简介

a:

AsynchronousJavascriptandXML

典型的流程

A1:

客户端触发异步操作

A2创建新的XMLHttpRequest对象

A3与Server进行连接

A4服务器端进行连接处理

A5返回包含处理结果的XML文档

A6XMLHttpRequest对象接收处理结果并分析

A7更新页面

传统的client与server的交互流程

AJAX的流程

 

Ajaxxmlhttp对象的属性

XMLHTTP对象常用方法

 

2:

ajax的流程

3:

ajax常出现的问题,以及解决办法

使用Ajax技术需要清除缓存,否则容易产生莫名其妙的错误,具体有两种方法:

第一种,采用URL后跟上时间戳来防止浏览器缓存,如:

user_validate.jsp?

userId="+userId+"×tampt="+newDate().getTime()

第二种,加入清除缓存代码,如

response.setContentType("text/xml");

response.setHeader("Cache-Control","no-store");//HTTP1.1

response.setHeader("Pragma","no-cache");//HTTP1.0

response.setDateHeader("Expires",0);

 

4:

创建数据库连接池

MAX_SIZE=10最大数量

MIN_SIZE=3数据库连接池的初始化数量

IDL_SIZE=5

MAX_size是数据库联机池最大connection的数量

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1