2. 从提交的内容大小来看get
受限制,但是实际编程中建议不要大于64K。
3. 从请求响应速度上看get>post,get要求服务器立即响应请求,而post请求可能形成一个队
列请求。
从以上几点看,表单提交方式(method)建议用post
在sevlet中打印的html语句,可以不加引号
同一用户的不同页面共享数据的四种方法
1. Cookie(小甜饼,在javax.servlet.http.*;这个包里面)(服务器在客户端保存用户的信息,比如
登录名,密码…就是cookie,数据量并不大,服务器端在需要的时候可以从客户端读
取。)。
Cookie的使用方法:①Cookie有点像一张表,分两列一个是名字,一个是值,数据类型都
是String。②创建Cookie(在服务器端创建):Cookie c=new Cookie(String name,String val);
③将Cookie添加到客户端:response.addCookie(c); ④读取Cookie(从客户端读到服务
器):Cookie[] allCookie=request.getCookies();c.getName();c.getValue();方法读取⑤
修改Cookie存在时间:c.setMaxAge(30);单位秒,为负则该cookie不会存储,为0则删除该coo
kie,如果不设置存在时间,那第该Cookie将不会保存。
2. sendRedirect(地址跳转,注意中文处理)
3. Session(会话技术)(当用户打开浏览器,访问某个网站时,服务器就会在服务器内存为该
浏览器分配一个空间,该空间被这个浏览器独占,这个空间就是session空间,其中的数据
默认存在时间为30min,可以修改(在conf—web.xml中修改))。
Session的使用方法:①得到session:HttpSession hs=request.getSession(true);
②向session添加属性:hs.setAttribut(String name,Object val);③从session得到某个属性:
String name=hs.getAttribute(String name);④从session删除掉某个性性:hs.removeAtt
ribute(String name);⑤修改session的存在的时间:hs.setMaxInactiveInterval(20);单
位秒,为负则永远不超时,为0则马上超时。
因为session的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使
用。
注意:以文件—新建—窗口,的方式打开窗口,session的ID是不变的,也就是同一个sessi
on空间
4. 隐藏表单提交(form)(input type=hidden name=““ value=““),在提交该表单时,能一并提
交过去。(获取方式:req.getParameter(String name);)。
Cookie VS session
1. 存在的位置:cookie保存在客户端,session保存在服务器端。
2. 安全性:比较而言,cookie的安全性比session要弱。
3. 网络传输量:cookie通过网络在客户端与服务器端传输,而session保存在服务器端,不需
要传输。
4. 生命周期(20分钟为例)①cookie的生命周期是累计的,从创建时,就开始计时,20分钟
后cookie生命周期结束,cookie就无效。②session的生命周期是间隔的,从创建时开始时
计时,如在20分钟,没有访问过session,那么session信息无效,如果在20分钟内,比如第
19分钟时,访问过session,那么它的生命周期将重新开始计算。③另外,关机会造成sessi
on生命周期结束,但是对session没有任何影响。
使用ServletContext(和session一样,但是它所有的客户都可以访问)。
1. 得到ServletContext实例:this.getServletContext();
2. 你可以把它想像成一张表,这个和Session非常相似:每一行就是一个属性。添加属
性:setAttribute(String name,Object ob);
得到值:getAttribute(Stringname); 返回Object。
删除属性:removeAttribute(String name);
3. 生命周期:ServletContext中的属性的生命周期从创建开始,到服务器关闭而结束。
4. 使用ServletContext:的注意事项:因为存在ServletContext中的数据会长时间的保存
在服务器,会占用内存,因此我们建议不要向ServletContext中添加过大的数据……. 切
记
Servlet操作数据库注意事项
需要将连接数据库的3个jar包,拷贝到tomcat服务器
具体有两种方法可以:
(1).将.jar包拷贝到%tomcat%/lib文件夹
(2).或者在你的webapps目录的WEB-INF文件夹下建立一个lib文件夹,然后
把3个jar包拷贝到lib文件夹下
两种方法的区别:
第一种:所有webapps都可以使用3个jar包[公用库]。
第二种:只有放如jar包的那个webapps能使用jar包[独用lib库]。
特别要注意sql 注入漏洞:用户名和密码不能同时查询,可先用用户名查出密码,再用查出来
的密码与输入的密码进行比较。
分页技术(方法)
我们先讲讲分页的算法:
我们需要定义四个量,它们有各自的用处,如下:
int pageSize:每页显示多少条记录
int pageNow:希望显示第几页
int pageCount:一共有多少页
int rowCount:一共有多少条记录
说明:
pageSize是指定的(常量)。
pageNow是用户选择的(变量)。
rowCount是从表中查询得到的(是个变量)。
pageCount是计算出来的,该计算式为:
if(rowCount%pageSize==0)
{
pageCount=rowCount/pageSize;
}
else
{
pageCount=rowCount/pageSize+1;
}
然后查询数据库,我们可能很自然的想到,用
select 字段列表 from 表名 where id between ? and ?
但是如果表的某个id被删除了,那么某页可能就会少一条记录。
因此最终解决方法是如下语句:
select top pageSize 字段名列表 from 表名 where id not in
(select top pageSize *(pageNow-1) id from 表名)
翻页的链接可以用下拉框或输入文本
网站框架问题分析
1界面和业务逻辑放在一起(model1模式),有以下问题:
(1).有很多页面逻辑相似(如:操作数据库),有重复代码(一般一段代码重复了三次
或三次以上,就应该把这段代码封装到一个函数里面去)。
(2).整个框架没有清晰的层次关系,显得非常乱。
(3).代码一点也不优雅,可读性差,可维护性差。
2.进行分层(界面层、业务逻辑层)[mv模式](m—>model模型,v—>view视图)
(1).将常用的代码(比如边接数据库),封装到类中。(现在java中javaBean一般与数据
库中表映射,充当表,如(UserBean.java(表示表),UserBeanCl.java(业务逻辑),Co
nnDB.java(得到连接)。))。
3.在UserBeanCl中,查询数据库,返回查询结果集时,要返回ArrayList集合,而不是直
接返回ResultSet,原因如下:(rs代表ResultSet的一个对象)
(1).如果返回ResultSet,那么我们在使用ResutlSet时,是不能关闭该RestultSet相互关联
的数据库连接等资源,从而造成资源浪费。
(2).如果返回ResutlSet,我们只能使用rs.getInt(?),rs.getString(?)…,这样的方法来得
到结果,代码的可读性不好,维护起来不方便。
(3).返回ArrayList集合方法(ArrayList作为中转,就可以尽快的关闭rs,数据库连接,同
时更能体现面向对象编程,代码可读性更好。)如下:
①将rs中的每一条记录,封装成一个UserBean对象ub。
②将封装成一个UserBean对象ub放入到ArrayList集合中,利于管理。③从ArrayLis
t结合中取出ub,然后使用。
Servlet中操作文件(和java 一样)
tomcat的配置:
1. 如何修改tomcat的端口(浏览器默认端口:80,可以不写)
(1) 需要启动两份tomcat服务器、服务占用了8080端口时可改
(2) 修改端口方法:修改%timcat%/conf/server.xml文件中port=“8080”数据修改成你需
要的端口即可。
(3) 端口号,是用两个字节存放,范围在1~65530,但是1~1024是有名端口,很有可
能被用,所以尽量设大一些。
2. 如何设置虚拟目录
(1) tomcat所在的磁盘空间不够用了、为了统一管理,希望放在某个特定的目录下,而
不是默认目录。
(2) 修改方法:修改%timcat%/conf/server.xml文件,在适当的位置(中
最后)添加如下信息:
(站点目录)” debug=“0”/>
3. 如何给tomcat的管理员设置密码
(1) 修改方法:修改%timcat%/conf/tomcat-users.xml文件中可以给管理员设置密码,
密码设置可以防止非法用户远程登录到tomcat。
(2) 在默认情况下,管理员的密码是空密码,这样不法分子可能远程发布一个站点,并
在某个servlet中加入一些可怕的语句(比如重启、关机…)。
(3) 利用密码为空搞破坏,步骤如下:
① 利用jdk自带的jar工具将有破坏的站点打包成*.war文件。使用jar工具需要配置jd
k的环境变量path=%JAVA_HOME%/bin; 或者在你编绎时写入 set path=%pat
h%;你的jdk目录\bin,这样即可在任何目录下使用jar命令,然后切换路径到需要
打包的那个文件夹目录下;打包的命令是:jar –cvf war 文件名 *.*
② 通过tomcat管理页面将站点发布到tomcat
③ 访问有破坏的代码的servlet,这样你就被黑了。
4. 如何设置数据源和连接池(公司常用!)(因为JDBC连接速度太慢)没测试出来,网上查
(1) 为什么使用:每次操作数据库,需要加载驱动才能得到一根连接,然后返回结果,
加载驱动是要花时间的。
(2) 解决方法:配置”连接池”与”队列池”。”连接池”事先与数据库连接好了,并有了几根
(可配置)连接,如果连接也中有空闲的连接,tomcat就分配给请求客户端;如果没
有空闲的连接,请求客户端将会在队列池中等待(时间可配置),直到有连接。因为
直接取连接,所以速度快。
(3) 修改方法:有两种方法(1)通过tomcat管理界面来配置(2)修改配置文件。修改%timc
at%/conf/server.xml文件, 在指定的位置添加代码即可:
//**************************************************************
factory
org.apache.commons.dbcp.BasicDataSourceFactory
url
jdbc:microsoft:sqlserver://192.168.190.2:1433;DatabaseName=spdb
e>
username
sa
password
430482
maxActive
50
maxIdle
10
maxWait
-1
//**************************************************************
如果要加中文注释,则必需得在最前加如下语句:
//*************************************************************
(4) 如何使用:如果使用连接池的方式来连接数据库,那么就要这样:
Context ctt=new javax.naming.InitialContext();
DataSource ds=(DataSource)ctt.lookup("java:comp/env/数据源的名");//粉红//色的
是:得到配置环境保护,这是固定写法
Connection Ct=ds.getConnection();
jsp部分
jsp的概述
jsp是servlet技术的补充,访问jsp的过程:如果是第一次访问,jsp文件被服务器翻译
成一个对应的java文件(servlet),然后,再被编译成.class文件并加载到内存中。如果是以后访问
韩顺平j2ee学习笔记与心得Page 7 of 11
http://www.360doc.com/content/11/0622/00/5925841_128600431.shtml 2011-9-16
jsp,那就直接调用内存中的jsp实例,所以,第一次访问jsp慢,后面访问jsp的速度就会变快了。
为什么会出现jsp技术?
程序员在开发过程中,发现servlet做界面非常不好?jsp
一个公式:jsp=html+java片段+jsp标签+javascript(css)?比较综合
jsp功能的强大是因为可以与javabean结合使用(即:jsp作前台(界面),javabean作后台(逻辑
层))。
Jsp+javabean的基础上再结合servlet,就会构成mvc的开发模式,Mvc模式是目前软件公司中
相当通用的开发模式,是重点
Jsp的基本语法(冒号后面是举例)
(1) 指令元素---用于从jsp发送一个信息到容器,比如设置全局变量,文件字编码,引入包
等,主要包括如下:
① page指令:<%@page contentType=”text/html”;charset=gb2312%>
② include指令:<%@include file=”filename”%>
③ taglib指令---这个指令允许在jsp页面使用自定义的标签:
=”123”>①①
(2) 脚本元素---在一定程度上可能理解就是java的片段scriplet
① scriplet:<%java代码,可以和写java一样写%>
② 表达式:<%=java表达式%> <%=rs.getString(1)%>
(3) Declaration声明:<%!变量声明 %>比如:<%!int count=10%>
<%!函数声明 %>比如:
<%! int jssuan(int num)
{
int result=0;
for(int i=0;i
{result=result+i;}
}
%>
(4) 动作元素---动作元素是使用xml语法写的,是jsp规定的一系列标准确性动作,在容器处
理jsp时,当容器遇到动作元素时,就执行相应的操作。常用的几个如下:
① //创建一个jvabean实例
② //给一个java实例设置初始值
③ //给一个jsp设置参数,常常与结合使用,如:
④ //取得一个javabean实例的成员变量
⑤ //引入另外一个文件
⑥ //使用插件
⑦ //转发
⑧ //
(5) jsp的九大内置对象(可以直接使用,不用创建。)
① out (是servlet中如:PrintWriter out=res.getWriter();)//向客户端输出数据,字节
流,如:out.println(“”);
② request //接受客户端的http请求,如:
getParameter(String name); //name表示表单的参数名
getParameterValues(String name); //使用得到是String []
setAttribute(String name,Object obj); //设置名字为name的obj,值为obj
getAttribute(String name); //返回由name指定的属性值如果不存在就返回null
getCookie();
③ response //封装jsp产生的回应,如:
addCookie(Cookie cookie);
sendRedirect(“welcome.jsp”);
④ session(是servelt中HttpSessio类的实例) //用于保存用户的信息,跟踪用户的行为
setAttribute(String name,Object obj);
getAttribute(String name);
⑤ application //多个用户共享该对象,可以做计数器
⑥ pageContext //代表jsp页面的上下文
⑦ exception //代表运行时的一个异常
getMessage();
⑧ page //代表jsp这个实例本身(使用比较少)。
⑨ config //代表jsp对应的servlet配置,可以得到web.xml中的参数
jsp与servlet的区别:
(1) jsp和servlet是对应关系:jsp文件被服务器翻译成一个对应的servlet文件并编译成.class文
件,对应的servlet文件放在work目录下。
(2) jsp是以servlet为基础的
(3) jsp文件改变时,服务器能自动重新加载该文件,不需要重启服务器。
发送电子邮件(javamail)到用户信箱
sd
Js中验证字符串是否为数字:(1)可以Math.round(num)!=num (2)使用正则表达式
做项目(网上商城):
一.系统分析与设计:
1.需求分析:
i.系统描述:[系统可以做什么];
电子商声场包括两个基本本部分,一个是前台销售程序,一个是后台管理程充。
用户可以在前端浏览,搜索商品,能够看到最新的公告(如活动、物价商品),
用户可以使用购物车购买商品,可以对入入购物车的商品进行处理,如修改数据量,从购物
车中去除商品等,用户购完商品必须到服务台结帐,也叫下定单,用 户下完订单,可以
打印或E-mail保留订单,以便收到商品时查对;
后台管理程序,商家在此管理本企业的相关信息发布,录入,更改商品细信息,订单查询
处理,并管理在商城里注册的用户。
ii.角色(按照类来划分用户):
1.前端用户
2.系统管理员:可以细化为:商品和公告管理者:订单管理者
iii.用例识别:
在角色的基础上,可以识别出与角色相关的用例。
前台用户:
系统管理员:
2.用例图
3.功能模块
做项目的步骤:
1. 界面(模仿)。
2. 数据库(表的设计)[界面(功能)--?猜出表来??](用户表和商品表)。
3. 建立web工程,testShopping
4. 一步一步的画当前流程图
5. 开始写主页面(index.jsp)[界面用dw,界面我使用”死去活来”法,即先是静态
的,然后才连接数据库,把它写活。],在dw中我们建html--?在myeclips中我
们建立jsp。在开发界面时,我们使用table+css方式布局。在table+css方式布局
中,常驻用的一个技巧是:在某行列中嵌入一个表格,可做精确布局。
CSS:是层叠样式表:控制网页的字体、颜色、大小、背景、边框……。
先会用,再会做。(flash,javascript,ps)
6. 把静态的页面向动态的页面修改[死去活来法]。
7. Mvc 模式写 model和servlet部分的开发。
8. HashMap的集合
a. hashmap就像一张表
b. key值是不能重复
c. key值和value值,可以是java的object类型
hashmap充当购物车是很好
key值-------?书的id
values值-------?书的数量
hashmap提供了一堆好的函数
select * from goods goodsId in(1,2,3,5)
9. 对购物车可以增加,删除,清空,修改数量
为了让servlet得到货物的id 的数量,可使用隐藏表单
10. a.设计订单(怎么设计???)
表的设计:如设计定单表:如果设计为如下:
以上订单表,很容易操作,但是出现在数据冗余。
解决方法是:把重复的字段,单拿出来做一张表(订单表),把不重复的字段单拿出来做一张表(订单
细节表)。如下图,两个表
这是就很好的解决了:
数据表的设计模式:表和表之间有多对多的关系时,就应当使用中间表来解决数据冗余的问题。
总结:通过定单细节表,把订单表和货物表的多对多的关系,简化成了一对多的关系,从机达到解
决数据冗余的问题。
批量操作数据库:new Statement().addBatch(“sql语句”);
定单表(orders)
ordersId
(订单号)
userId
(用户id)
goodsId
(商品id)
Nums
(数量)
orderDat
e
(时间)
payMode
(付款方式)
isPayed
(付款否)
totallPric
e
(总价)
1 3 5 3 2007-8-9 货到付款 否 890
1 3 4 4 2007-8-9 货到付款 否 890
1 3 3 3 2007-8-9 货到付款 否 890
1 3 2 4 2007-8-9 货到付款 否 890
订单表(orders)
ordersId
(订单号)
userId
(用户id)
orderDate
(时间)
payMode
(付款方式)
isPayed
(付款否)
totallPrice
(总价)
1 2 2007-8-9 货到付款 否 890
订单细节表(orderDetail)
ordersId(订单号) goodsId(商品id) Nums(数量)
1 5 3
1 4 4
1 3 3
1 2 4
文章出处:http://www.360doc.com/content/11/0622/00/5925841_128600431.shtml