当前位置:文档之家› 韩顺平j2ee学习笔记与心得

韩顺平j2ee学习笔记与心得

韩顺平j2ee学习笔记与心得
韩顺平j2ee学习笔记与心得

Java EE概念:

Java EE是一个开放的平台,它包括的技术很多,主要包括十三种核心技术(java EE就是十三种技术的总称)。建立一个整全的概念。

要成为一个java EE程序员,必须掌握的技术是java,servlet,jsp。这是基础。

只有在上面的基础上再学struts,hibernate,ejb,spring,webwork,jst等web框架。

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的官网:https://www.doczj.com/doc/3a4343374.html,

myeclipse的官网:https://www.doczj.com/doc/3a4343374.html,/

在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文件[不太稳定.],具体操作如下:

connectionTimeout="20000" redirectPort="8443" />改为:

connectionTimeout="20000" redirectPort="8443"

URIEncoding=”gbk”/>

元素中增加属性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

2.从提交的内容大小来看get

post提交的数据理论上不受限制,但是实际编程中建议不要大于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则删除该cookie,如果不设置存在时间,那第该

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.removeAttribute(String name);⑤

修改session的存在的时间:hs.setMaxInactiveInterval(20);单位秒,

为负则永远不超时,为0则马上超时。

因为session的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使用。

注意:以文件—新建—窗口,的方式打开窗口,session的ID是不变的,也就是同一个session空间

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,那么它的生命周期将重新开始计算。③另外,

关机会造成session生命周期结束,但是对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(业务逻辑),

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文件,在适当的位

置(中最后)添加如下信息:

path=“/mysite(站点文件夹名)” docBase=“c:\mysite(站点

目录)” debug=“0”/>

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文件,在指定的

位置添加代码即可:

//******************************************************* *******

type="javax.sql.DataSource"/>

factory

https://www.doczj.com/doc/3a4343374.html,mons.dbcp.BasicDataSourceFactory

driverClassName

com.microsoft.jdbc.sqlserver.SQLServerDriver

url

jdbc:microsoft:sqlserver://192.168.190.2:1433;Data baseName=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指令:<%@page

contentType=”text/html”;charset=gb2312%>

②include指令:<%@include file=”filename”%>

③taglib指令---这个指令允许在jsp页面使用自定义的标签:

①①

(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设置参数,常常与

结合使用,如:

value=”parameterValue”/>

parameterValue”>

//取得一个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)到用户信箱

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

(总价)

13532007-8-9货到付

否890

13442007-8-9货到付

否890

13332007-8-9货到付

否890

13242007-8-9货到付

否890

以上订单表,很容易操作,但是出现在数据冗余。

解决方法是:把重复的字段,单拿出来做一张表(订单表),把不重复的字段单拿出来做一张表(订单细节表)。如下图,两个表

订单表(orders)

ordersId (订单号) userId

(用户id)

orderDate

(时间)

payMode

(付款方式)

isPayed

(付款否)

totallPrice

(总价)

122007-8-9货到付款否890

订单细节表(orderDetail)

ordersId(订单号) goodsId(商品id) Nums(数量)

153

144

133

124

这是就很好的解决了:

数据表的设计模式:表和表之间有多对多的关系时,就应当使用中间表来解决数据冗余的问题。

总结:通过定单细节表,把订单表和货物表的多对多的关系,简化成了一对多的关系,从机达到解决数据冗余的问题。

批量操作数据库:new Statement().addBatch(“sql语句”);

韩顺平html笔记

HTML 一、HTML有关知识点 1.html介绍 html是一种标记语言,主要的用途是开发网页,使用html可以展现文字、图片、视频、声音,html是我们web开发(网站开发)。 2.html可以做什么 ?html可以编写静态网页 ?该静态网页可以包括文字、图像、动画、声音、表格、链接。从而构成一个个漂亮的网页 3.Html发展历史 4.Html的基本结构 5.是标记(也叫元素),标记的一般格式: <元素名[属性=“属性值”]>元素内容 如果没有内容可以用:<元素名[属性=“属性值”]/> 6.Html实体标记 7.Html常用标记

?html超链接 ●_blank 新的窗口 ●_self 本窗口 ●_parent 父窗口 ●_top整个浏览器窗口 ?html图像元素 ?html表格

--用于说明行 --用于说一小格
?无序列表 ?有序列表 ?框架 ?表单元素 文本框: 密码框: 单选框: 复选框:checked是指默认选中的 隐藏域: 图片按钮: ?文本域: ?下拉菜单: 案例:1 需求:打开网页后,显示hello !

New Document 问题: ?js的位置可以随意放 ?js必须使用 ?在一个html文件中(JSP/PHP/https://www.doczj.com/doc/3a4343374.html,)可以出现多对(script)片段,浏览器会按照先后顺序一次执行 案例2:Hello world程序改进 ?如何定义变量: ?如何运算: New Document ?Js的变量类型是怎样决定的 1)Js是弱数据类型语言,即:在定义变量侍候,统一使用var表示,甚至可以去点var 这个关键字 2)Js中的变量的数据是由js引擎决定的 Var name=”shunping”; //name是字符串 Var kk=2 //kk是数字 Name=234; //这事name自动变成数 ?Js的命名规(函数/变量): 1)使用大小写字母,数字,$可以命名 2)不能以数字打头 3)不能使用js保留字和关键字(即java里的关键字) 4)区分大小写

韩顺平html+css+js之JS笔记

韩顺平html+css+js 之JS笔记 Javascript的基本介绍 ?JS是用于WEB开发的脚本语言: ?脚本语言是什么: ?脚本语言不能独立使用,它和HTML/JSP/PHP/https://www.doczj.com/doc/3a4343374.html,配合使用 ?脚本语言也有自己的变量,函数,控制语句(顺序,分支,循环) ?脚本语言实际上是解释性语言(即在执行时直接对源码进行执行) ?Java程序.java→.class→jvm , js→浏览器(js引擎来解释执行) ?Js在客户端(浏览器)执行 ?因为js是由浏览器来执行的,因此这里有个问题,不同类型的浏览器可能对js的支持不一样。 New Document 案例:1 需求:打开网页后,显示hello !

New Document 问题: ?js的位置可以随意放 ?js必须使用 ?在一个html文件中(JSP/PHP/https://www.doczj.com/doc/3a4343374.html,)可以出现多对(script)片段,浏览器会按照先后顺序一次执行 案例2:Hello world程序改进 ?如何定义变量: ?如何运算: New Document ?Js的变量类型是怎样决定的 1) Js是弱数据类型语言,即:在定义变量侍候,统一使用var表示,甚至可以去点var这 个关键字 2) Js中的变量的数据是由js引擎决定的 Var name=”shunping”; //name是字符串 Var kk=2 //kk是数字 Name=234; //这事name自动变成数 ?Js的命名规范(函数/变量): 1) 使用大小写字母,数字,$可以命名 2) 不能以数字打头 3) 不能使用js保留字和关键字(即java里的关键字) 4) 区分大小写 5) 单行注释:// 6) 多行注释:/*…….*/ 韩顺平JS第三讲

J2EE考试题目及答案

J2简答题 1、简述J2的四层模型。 运行在客户端机器上的客户层组件;运行在J2服务器上的层组件;运行在J2服务器上的业务逻辑层组件;运行在服务器上的企业信息系统层软件 2、什么是对象持久化? 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、数据文件中等等。 3、简述一下,为什么我们使用它? ( )是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。简单说:是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据中。本质上就是将数据从一种形式转换到另外一种形式。 原因:用它来架起对象和关系型数据库的桥梁,可解决对象层次的映射、对象关系的映射以及对象的持久化问题。 4、简述一下如何使用实现对象持久化的过程(可画图或用伪码描述) 1:创建对象。在这一步中主要为了进行配置文件的装载操作,读取所有的配置文件并进行解析、

2: 创建对象。通过创建好的对象可以创建一个对象的实例,同时是生成对象实例的工厂,他在整个应用中应该是,唯一的。 3:创建对象。对象类似于数据库的连接对象,可以理解为与数据库建立的一个连接,但是他的功能要比中的对象丰富很多。 4:开始一个事务。在中定义一个事务操作的开始,这是使用进行持久化操作必不可少的步骤 5:进行持久化操作。在这个步骤中可以读取或者保存对象。 6:结束事务。在操作完成之后还要进行显式的结束事务的操作。 7:关闭。类似于释放数据库的连接。 5、为什么要实现序列化? 1、序列化以某种存储形式使自定义对象持久化 2、序列化将对象转换为可传输方式从一个地方传递到另一个地方 3、序列化使程序更具维护性 6、比较一下中的()和()方法 1、创建的会和绑定到当前线程,而不会。 2 、创建的线程会在事务回滚或事物提交后自动关闭,而必须手动关闭 7、比较一下中的()和()方法,以及如何保证每次都是从数据库读取而不是在缓存中读? ()和()方法均可以根据指定的实体类和从数据库读取记录,并返回与之对应的实体对象。

韩顺平Spring笔记

①spring是什么? struts 是 web 框架 (jsp/action/actionfrom) hibernate 是 orm框架,处于持久层. spring 是容器框架,用于配置bean,并维护bean之间关系的框架 ?spring中有一个非常概念: bean (是java中的任何一种对象javabean/service/action/数据源./dao, ioc(控制反转inverse of control) di( dependency injection 依赖注入) ?画一个框架图 快速入门 开发一个spring项目. 1.引入spring的开发包(最小配置该包把常用的jar都包括, 还要写日志包 2.创建spring的一个核心文件 , [hibernate有核心 struts核心文件 ], 该文件一般 放在src目录下,该文件中引入 xsd文件: 可以从给出的案例中拷贝一份. 3.配置bean

韩顺平 4.在中,我们怎么使用 到spring 的applicationContext对象(容器对象) ApplicationContext ac=new ClassPathXmlApplicationContext(""); UserService us=(UserService) ("userService"); (); 5.细节讨论? 传统的方法和使用spring的方法 5.1使用spring ,没有new 对象,我们把创建对象的任务交给spring框架 5.2spring的运行原理图: 我们再看spring 对上面案例总结: spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可. ioc是什么? 答:ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器,而程序本身不再维护. DI是什么? 答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术

jquery学习笔记-韩顺平

1,Jquery是一个javascript框架或者叫做javascript库; 2,用Ajax我们可以给服务器发送一个请求,服务器可以给我回送一个请求; 3,出现javascript框架的根本原因就是为了提高开发者的开发效率; 4,jquery是一个轻量级的js库(压缩后只有21K),这是其他的js库所不及的,它兼容CSS3,还兼容各种浏览器; 5,JQuery是一个快速的,简洁的javascript库,使用户能更方便的处理HTML document,events,实现动画效果,并且方便的为网站提供AJAX交互; 6,JQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 7,jquery能够使用户的html页保持代码和html内容的分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可; 8,所谓的库就是提供一些现成的方法供你去调用; 9,当前流行的javascript库有: Jquery ,MooTools,Prototype,Dojo,YUI,EXTJS,DWR[主要是运行在服务器上的]; 10,$(document) //---这个表示一个jquery对象; 11,如果使用jquery,则需要引入jquery库 12,jquery对象就是对dom对象的一系列包装,它包装完成后,就可以使用jquery对象提供的方法来进行操作; 13,在使用jquery开发中,有两种对象,1,jquery对象,2,dom对象,如果是jquery对象则只能使用jquery库提供的方法,如果是dom对象,则只能使用js本身提供的方法; 14,分析jquery库文件的运行原理: