韩顺平servlet与jsp笔记与心得的相关参考范文,韩顺平servlet与jsp笔记与心得本文关键词:心得,笔记,韩顺平,servlet,jsp韩顺平servlet与jsp笔记与心得本文简介:·韩顺平servlet与jsp笔记与心得····JavaEE概述:JavaEE是一个开放的......
韩顺平servlet与jsp笔记与心得 本文关键词:心得,笔记,韩顺平,servlet,jsp
韩顺平servlet与jsp笔记与心得 本文简介:·韩顺平servlet与jsp笔记与心得····JavaEE概述:JavaEE是一个开放的平台,它包括的技术很多,主要包括十三种核心技术(javaEE就是十三种技术的总称)。建立一个整全的概念。J2ee的十三种技术(规范)1.java数据库连接(JDBC)。——JDBC定义了4种不同的驱动:1.JD
韩顺平servlet与jsp笔记与心得 本文内容:
·
韩顺平
servlet与jsp
笔记与心得
·
·
·
·
Java
EE概述:
Java
EE是一个开放的平台,它包括的技术很多,主要包括十三种核心技术(java
EE就是十三种技术的总称)。建立一个整全的概念。
J2ee的十三种技术(规范)
1.
java数据库连接(JDBC)。——JDBC定义了4种不同的驱动:1.JDBC-ODBC桥,2.JDBC-native驱动桥3,JDBC-network桥4.纯java驱动。
2.
Java命名和目录接口(JNDI)(它是为了对高级网络应用开发中的使用的目录基础结构的访问。)。
3.
企业Java
Beans(Enterprise
Java
Beans,EJB)(它提供了一个架构来开发和配置到客户端的分布式商业逻辑,因此可以明显减少开发扩展性、高度复杂企业应用的难度。)。
4.
JavaServer
Pages(JSPs)。
5.
Java
servlets(servlets提供的功能大部分与JSP相同,JSP中大部分是HTML代码,其中只有少量的Java代码,而servlets则相反,它完全使用Java编写,并且产生HTML代码。)。
6.
Java
IDL/CORBA(用得不多)。
7.
Java
事务体系(JTA)/Java事务服务(JTS)(用得不多)。
8.
JavaMail和JavaBenas激活架构(JavaBeans
Activation
Framework,JAF)。(JavaMail是一个用来访问邮件服务的API)。
9.
Java信使服务(Java
Messaging
Service,JMS)(JMS是一个用来和面向信息的中层通信的API)。
10.
扩展标记语言(Extensible
Markup
Language,XML)。
11.
12.
13当前流行的及格框架
struts+hibernate+spring(ssh).
Java
ee的开发环境(eclipse)
Eclipse是一个开源的、可扩展的集成开发环境,已经成为目前最流行的j2ee开发工具。
Eclipse安装后就可以开发java
se的项目了,但不能开发java
ee项目,需要安装web开发插件(lomboz或是myeclipe)
Eclipse的官网:http://www.16fw.com/
在java
ee的开发中有几个重要的开发模式:
1.Model1模式
2.model2模式(model2x模式(用得少))
3.mvc模式
一、Model1模式
Model1的基础是jsp文件,它由一些相互独立的jsp文件,和其它一些java
class组成(不是必须的)。这些jsp从HTTPRequest中获得所需要的数据,处理业务逻辑,然后将结果通过Response返回前端浏览器。
从上面分析我们可以看到model1模式可以分为两类:
1.
Model1(纯jsp技术,不带任何java
class)。
2.
Model1(jsp+java
class)。
Model1模式的缺点:
1.
表现层和业务层混合在一起(乱!)。
2.
在开发过程中,不利于多人协同开发。
3.
不利于后期维护。
Model1模式的优点:
1.
简单,开发速度较快。
2.
比较适合开发小的项目。
二、model1(结合java
class)开发模式,有些书上称:mv模式,即:màmodel模型(java
class,业务逻辑层),vàview视图(jsp,界面层)。
1.一个数据库应一个类:ConnDB.java(得到连接)。
2.数据库中的每一张表对应两个类:(1)UserBean.java(表示users表)类。(2)UserBeanCl.java(业务逻辑,即对users表的操作)类。
如:
login.jsp输入数据,logincl.jsp通过调用java
class(模型)处理数据,wel.jsp显示数据。这是一种多么完美的开发模式。
不足之处:
1.
Jsp技术主要做界面,但是logincl.jsp这里调用了java
class(模型),完成对用户验证,显得有点怪怪的。
2.
Wel.jsp是用于显示用户信息(显示数据),但,wel.jsp除了显示数据,还调用了java
class(模型),代码的优雅就荡然无存了,也不得于将来的分工。
3.
Servlet技术处理页面的跳转是最快捷和方便的,难道我们就此不用了吗?
三、mvc开发模式:M(model模型),V(view视图),C(controller控制器)。
MVC是一个设计模式,它强制性的使应程序的输入、处理、和输出分开。使用MVC应用程序分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
M主要由java
class来做,也可以是java
bean、eib等
V由jsp来做
C由servlet来做
对上的例子进行改进:
1.
增加控制器(servlet):将logincl.jsp用servlet来替代,发挥servlet充当控制中转的优势。
2.
在控制器(servlet)中去调用模型(model)去完成用户验证,并准备要显示的用户信息数据。
MVC开发模式的总结:
处理过程:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后调用模型来处理用户的请求并返回数据,最后控制器用相应的视图显示模型返回的数据,并通过浏览器呈现给用户。
Mvc模式存在的缺点:
1.
工作量增加了。
由于开发者将一个应用程序分成了三个部件,所以使用MVC同时也意味着你将要管理比以前更多的文件,这一点是显而意见的。这样好像我们的工作量增加了,但是请记住这比起它所能带给我们的好处是不值一提。
2.
不适用小型项目,否则就是机关枪打蚊子。
3.
调试应用程序难度加大。
Mvc提倡模型和视图分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫不顾忌的重用它们了。
数据库中用户名是中文,中文乱码问题(一般是要查询数据时,有中文字符才需要转码):
当提交表单时,表单中有中文,也会产生乱码。
解决中文乱码问题,有三种方法:
1.
重新转码,如,有String
u=”是中文”;
u=new
String(u.getBytes(“iso-8859-1”),”gb2312”);
2.
使用过滤器来解决[详解]
3.
通过修改Tomcat配置servlet.xml文件[不太稳定.],具体操作如下:
改为:
在元素中增加属性URIEncoding,其值为”gbk,表示客户端请求传送来的值均以gb2312的标准来编码,这样在业务处理中就不需要在对其编码进行转换,大在简化了程序,提高了执行效率。
当request得到的是乱码时,可以这样解决(一定要这样写):
name=new
String(request.getParameter(“username”).getBytes(“ISO8859_1”),”gb2312”);
图片链接边框去掉:用就去掉了.
Servlet部分
Servlet开发流程(这是servlet规范,没有理由,只有这么做)
1.
在%TOMCAT_HOME%/webapps下建一个文件夹如(myWebSite),然后在该文件夹下新建WEB-INF的文件夹下,写一个web.xml(该网站的配置信息),建立一个classes的子文件夹,也可以从加的目录ROOT下拷贝.
2.
开servlet(引入servlet-api.jar,否则编绎不了)。
3.
部署你的servlet,在web.xml文件中:添加代码(看例子)。
hello
com.tsinghua.Hello
hello
/sp
4.
启动tomcat,访问你的servlet,在浏览器的地址栏输入http://127.0.0.1:8080/myWebSite/hello,回车就可看到servlet的输出。
开发servlet有三种方法
1.
实现接口servlet来编写
2.
继承GenericServet类(该写了servlet接口,所以有和servlet相同的方法service)。
3.
继承HttpServlet类(该类有doGet,doPost方法)
Servlet的生命周期
1.
init()函数,用于初始化该servlet(类似于类的构造函数,该函数只会被调用一次(当用户第一次访问该页面的servlet时被调用。)。)。
2.
业务逻辑函数(如:service,doGet,doPost等方法)(当用户每访问该servlet时,都会被调用,它有两个参数:ServletRequest—用于获取客户端的信息,ServletResponse—用于向客户端返回信息)。
3.
destroy()函数,用于销毁servlet实例(释放内存),只有如下三种情况才会周用(1.reload该servlet(webApps),2.关闭tomcat,3.关机)值行了这个函数后,这个网站内的所有的session和conTest都被释放,为空。
表单提交数据get请求和post请求的区别
1.
从安全方面看get
model模型,v—>view视图)
(1).将常用的代码(比如边接数据库),封装到类中。(现在java中javaBean一般与数据库中表映射,充当表,如(UserBean.java(表示表),UserBeanCl.java(业务逻辑),ConnDB.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集合中,利于管理。③从ArrayList结合中取出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文件,在适当的位置(中最后)添加如下信息:
3.
如何给tomcat的管理员设置密码
(1)
修改方法:修改%timcat%/conf/tomcat-users.xml文件中可以给管理员设置密码,密码设置可以防止非法用户远程登录到tomcat。
(2)
在默认情况下,管理员的密码是空密码,这样不法分子可能远程发布一个站点,并在某个servlet中加入一些可怕的语句(比如重启、关机…)。
(3)
利用密码为空搞破坏,步骤如下:
①
利用jdk自带的jar工具将有破坏的站点打包成*.war文件。使用jar工具需要配置jdk的环境变量path=%JAVA_HOME%/bin;
或者在你编绎时写入
set
path=%path%;你的jdk目录/bin,这样即可在任何目录下使用jar命令,然后切换路径到需要打包的那个文件夹目录下;打包的命令是:jar
–cvf
war
文件名.*
②
通过tomcat管理页面将站点发布到tomcat
③
访问有破坏的代码的servlet,这样你就被黑了。
4.
如何设置数据源和连接池(公司常用!)(因为JDBC连接速度太慢)没测试出来,网上查
(1)
为什么使用:每次操作数据库,需要加载驱动才能得到一根连接,然后返回结果,加载驱动是要花时间的。
(2)
解决方法:配置”连接池”与”队列池”。”连接池”事先与数据库连接好了,并有了几根(可配置)连接,如果连接也中有空闲的连接,tomcat就分配给请求客户端;如果没有空闲的连接,请求客户端将会在队列池中等待(时间可配置),直到有连接。因为直接取连接,所以速度快。
(3)
修改方法:有两种方法(1)通过tomcat管理界面来配置(2)修改配置文件。修改%timcat%/conf/server.xml文件,
在指定的位置添加代码即可:
//**************************************************************
factory
org.apache.commons.dbcp.BasicDataSourceFactory
driverClassName
com.microsoft.jdbc.sqlserver.SQLServerDriver
url
jdbc:microsoft:sqlserver://192.168.190.2:1433;DatabaseName=spdb
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文件并加载到内存中。如果是以后访问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指令:
②
include指令:
③
taglib指令---这个指令允许在jsp页面使用自定义的标签:①①
(2)
脚本元素---在一定程度上可能理解就是java的片段scriplet
①
scriplet:
②
表达式:
(3)
Declaration声明:比如:
比如:
<%!
int
jssuan(int
num)
{
int
result=0;
for(int
i=0;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.设计订单(怎么设计???)
表的设计:如设计定单表:如果设计为如下:
定单表(orders)
ordersId
(订单号)
userId
(用户id)
goodsId
(商品id)
Nums
(数量)
orderDate
(时间)
payMode
(付款方式)
isPayed
(付款否)
totallPrice
(总价)
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
这是就很好的解决了:
数据表的设计模式:表和表之间有多对多的关系时,就应当使用中间表来解决数据冗余的问题。
总结:通过定单细节表,把订单表和货物表的多对多的关系,简化成了一对多的关系,从机达到解决数据冗余的问题。
批量操作数据库:new
Statement().addBatch(“sql语句”);