《企业级JavaI》复习要点.docx
《《企业级JavaI》复习要点.docx》由会员分享,可在线阅读,更多相关《《企业级JavaI》复习要点.docx(74页珍藏版)》请在冰豆网上搜索。
《企业级JavaI》复习要点
《企业级JavaI》复习要点
第1讲JavaEE概述及Web容器的安装与配置
1、J2EE是什么?
J2EE的体系结构包含哪些内容?
J2EE不是一个产品,而是一个技术规范,一系列的标准。
它涵盖企业级应用程序的设计、开发、汇编和部署等方面。
J2EE是一个多层的、端到端的解决方案,包括:
客户层中间层(表示层、业务层)企业信息系统层(EIS)
2、简述J2EE的分层思想.
J2EE提供了企业级应用程序的开发平台,提供了分布式、基于组件、松耦合、安全可靠、独立于平台且反应迅速的应用程序环境。
3、什么是组件?
请说出J2EE中几种不同类型的组件.
组件概念:
是一个封装一定功能的软件单元,能够与相关的一些类和文件一起组装成J2EE应用程序,并且可以与其他组件通信
EJB组件、WEB组件、客户端层组件
4、什么是容器?
J2EE中包含哪些类型的容器?
容器负责提供J2EE应用程序组件的运行时支持,所有的J2EE组件都部署于容器中并在容器中执行。
应用程序客户端容器、Applet容器、Web容器、EJB容器
5、Web应用程序能用javac编译、java运行码?
为什么?
可以用javac编译,但不能用java运行。
6、Tomcat有什么功能、特点?
Tomcat:
是Apache提供的一个免费开源的项目,是Sun推荐的运行JSP和servlet的容器,不仅具有Web服务器的基本功能,还提供数据库连接池、SSL和、Proxy等通用组件功能,已得到广泛应用;
7、说明Tomcat中bin、lib、conf、webapps等目录的功能。
目录
用途
/bin
存放启动和关闭的脚本文件
/conf
存放各种配置文件,包括:
server.xml、tomcat-users.xml和web.xml
/lib
存放服务器和所有web应用程序需要访问的jar文件
/webapps
发布web应用程序时,通常把应用程序的目录及文件存放到这一目录下
第2讲Servlet简介
1、在HTTP中,请求、响应是怎样实现的?
HTTP请求的组成
●请求行(请求方式、资源路径、HTTP版本号)
●若干消息头(可选,格式为字段名:
□值)
空一行
●请求体(只有POST、PUT、DELETE请求方式才需要)
HTTP响应的组成
●响应行(协议、状态代码、描述)
●若干消息头(格式为字段名:
值)
空一行
●响应体(与浏览器中的源代码类似)
2、比较GET方式与POST方式的不同.
比较内容
GET
POST
是否在浏览器地址栏显示?
显示
不显示,保密性好
数据放置的位置
作为请求资源的一部分放置在请求行中
放置在请求内容(即请求体)中
传输数据量有无限制?
一般在1KB以下
无限制
3、什么是Servlet?
它有什么特点?
Servlet是用Java语言编写的服务器端小程序,驻留在web服务器中,并在其中运行,扩展了web服务器的动态处理功能。
Servlet的特点
移植性好,本身是一个Java类,具有跨平台性;J2EE平台支持的全部JavaAPI都可用于Servlet;安全性提高,服务器崩溃的可能性减小;多个Servlet可以组织在一起,输出可由组生成,有助于代码复用;可以与服务器中的其它组件交互。
4、J2EE提供了Servlet的哪两个包?
Servlet接口有哪些方法?
a)javax.servlet包:
提供了所有Servlet类实现的基本接口和继承的基本类
b)javax.servlet.http包:
提供了编写基于HTTP协议的Servlet所需的基类
基本方法:
init()、service():
处理请求/响应、destroy()、getServletConfig()、getServletInfo()
5、说明对应于“请求”、“响应”的接口有哪些?
请求:
javax.servlet.ServletRequest、javax.servlet.http.HttpServletRequest
响应:
javax.servlet.ServletResponse、javax.servlet.http.HttpServletResponse
6、简述编写Servlet程序的主要步骤。
(1)继承HttpServlet抽象类;
(2)覆盖HttpServlet的部分方法(如:
doGet()、doPost());
(3)获取Http请求信息;(4)生成Http响应信息。
7、说明web应用程序的目录结构内容。
●web.xml文件:
为容器提供应用程序的配置信息
●classes目录:
存放Servlet、JavaBeans和其它的class文件
●Lib目录:
存放jar文件,如JDBC驱动程序等
8、说明web.xml的作用及其主要元素
在该文件中对servlet进行布署,主要是指定、等标记的内容。
第3讲使用Servlet
1、乱码产生的原因是什么?
页面中文内容乱码的解决办法是什么?
传递中文参数乱码的解决办法是什么?
编码、解码时使用的字符集不一致,就容易出现乱码现象。
页面中文内容乱码的解决办法:
让响应对象在输出内容前,调用下列方法之一:
⏹setCharacterEncoding(“字符集”)
例如:
response.setCharacterEncoding(“GBK”);
⏹setContentType(“文本类型;charset=字符集”)
例如:
response.setContentType(“text/html;charset=GBK”);
传递中文参数乱码的解决办法:
⏹POST方式(参数在请求体中传递)
在获取请求对象内容前,调用setCharacterEncoding(“字符集”)例如:
request.setCharacterEncoding(“GBK”);
⏹GET方式(参数作为请求行的一部分内容传递)
将以获取的参数字符串为参数,按指定字符集重新构造新的字符串(《Jsp信息系统开发实例精选》p33)
例如:
Stringstr=request.getParameter(“…”);
Stringstr2=newString(str.getBytes("iso-8859-1"),"GBK"
out.println("
"+str2+"
");
2、Servlet的生命周期包含哪些阶段?
⏹加载和实例化
⏹初始化:
调用init()方法
⏹请求处理:
调用service()方法
⏹服务终止:
调用destroy()方法
3、Servlet的初始化参数存放于什么位置?
ServletConfig、GenericServlet有什么功能?
怎样获取Servlet初始化参数?
Servlet的初始化参数存放在web.xml中。
ServletConfig:
JSP的配置信息,作用域为页面
GenericServlet:
GenericServlet类定义了一个普通的、协议无关的Servlet,实现了Servlet和ServletConfig等接口。
GenericServlet类简化了Servlet的开发,并提供了生命周期方法的简单版本。
开发一个普通的Servlet必须重载service()方法。
在web.xml中通常会有如下配置:
MyServletName
MyServlet
name1
value1
name2
value2
以上配置,我们可以在servlet中得到其初始化信息。
主要为以下三种:
/*通过getServletConfig()获取单一值*/
Stringvalue=getServletConfig().getInitParameter("name1");
/*获取所有初始化变量*/
java.util.Enumerationenum=getServletConfig().
getInitParameterNames();
for(;enum.hasMoreElements();){
//获取初始化参数的名字
Stringname=(String)enum.nextElement();
//获取对应值
value=getServletConfig().getInitParameter(name);
}
/*通过getServletContext()获取单一值*/
Stringvalue=getServletContext().getInitParameter("name1");
4、通常,Servlet中的实例是以单线程还是多线程运行的?
采用多线程模式运行
5、Servlet中线程的安全问题是怎样产生的?
可用什么方法来解决?
类的实例变量
解决办法:
⏹将类的实例变量改为局部变量,局部变量是安全的;
⏹将确实需要共享的资源,放在synchronized块中或将方法定义为synchronized类型,但这样会影响程序执行效率。
1、Servlet要获取表单参数(type=‘text’name=‘user’),正确的语句是【C】(request、response分别为HTTP请求、响应对象)
A.Stringstr=request.getName(“user”);B.Stringstr=request.getValue(user);
C.Stringstr=request.getParameter(“user”);D.Stringstr=response.getParameter(“user”);
2、在web.xml中,【E】xml代码正确定义了Servlet的类名?
A.abcinc.OrderServlet.classB.abcinc.OrderServlet
C.abcinc.OrderServletD.abcinc.OrderServlets
E.abcinc.OrderServlet
第4讲Servlet与会话管理
1、Http协议的无状态是怎样体现的?
服务器与客户端在一系列请求、响应交互过程中,既无法判定这些请求是来自同一客户还是来自不同客户,也记不住任何有关客户端的信息,每一个请求都视为新的请求。
2、什么是会话?
SessionID是什么?
会话在什么情况下能结束?
会话:
在指定的时间段中来自同一客户端的一系列HTTP请求。
如果客户端能在规定时间内不断向服务器提出请求,那么这些请求就属于同一个会话。
session对象ID:
session对象创建之后,就会分配一个String类型的ID号(独一无二),通过这一ID号就可以对会话进行标识。
方法:
StringgetId()
会话结束条件:
⏹会话过期:
空闲时间超过指定期限(如:
30分钟)
⏹强制失效:
服务器的HttpSession对象调用invalidate()方法(在用户注销时常使用)
⏹客户关闭浏览器:
不够准确,浏览器关闭时将丢失保存在内存sessionID,无法继续与服务器联系,只有会话过期才真正结束。
3、会话管理技术主要有哪些?
4、什么是Cookie?
创建、设置、使用Cookie的主要步骤有哪些?
是Web服务器发送给客户端的一段文本信息,它保存在客户端的浏览器或硬盘上,对于后续请求,客户端将文本信息发送回给同一服务器。
简单地说,Cookie是暂存于客户端的信息(以name/value形式)
A)创建Cookie对象
格式:
Cookie对象名=newCookie(“Cookie名称”,”值”);
B)设置Cookie对象的属性
Cookie常用API:
voidsetMaxAge(int expiry):
设置Cookie最大保存时间(秒)
当ecpiry为正数,Cookie将会被保存在客户端的硬盘上
当ecpiry为负数(默认值-1),客户端浏览器关闭时,Cookie被删除
当ecpiry为0时,Cookie被删除
例如:
ckname.setMaxAge(365*24*3600);//设置存活期为1年
voidsetValue(StringnewValue):
设置新值
voidsetPath(Stringuri):
设置路径,当访问该路径下的资源时,Cookie有效
voidsetComment(Stringpurpose):
设置注释
voidsetDomain(Stringpattern):
设置Cookie起作用的域
intgetMaxAge():
获取最大保存时间,默认为-1,浏览器关闭时删除Cookie
StringgetName():
获取Cookie名字
StringgetValue():
获取Cookie值
StringgetPath():
获取Cookie起作用的路径
StringgetDomain():
获取Cookie起作用的域
StringgetComment():
获取注释
C)发送Cookie到客户端
调用HttpServletResponse对象的addCookie(Cookie对象)方法,将cookie插入到一个HTTP响应报头。
例如:
response.addCookie(ckname);
D)从客户端读取Cookie
从客户端读取你感兴趣的cookie,需要两个步骤
a)调用request.getCookies()得到一个Cookie对象的数组
b)调用每个cookie的getName方法,从数组中寻找所需的cookie
5、Cookie是会话管理的最常用技术,Cookie的不足之处。
一台机器,多个用户;多台机器,一个用户;浏览器不支持Cookie
6、URL重写技术在什么情况使用?
怎样实现?
当浏览器不支持或禁用Cookie时,常采用URL重写技术
利用GET的方法,在URL的尾部添加一些额外的参数(sessionID)来达到会话追踪的目的,服务器将这个标识符与它所存储的有关会话的数据关联起来。
7、表单隐藏字段技术与SSL技术有什么用途。
表单隐藏字段技术:
将sessionID以隐藏表单字段方式发送
SSL(安全套接字层)技术:
在客户机与服务器之间建立安全信道的协议(https),也用于向客户机认证服务器及向服务器认证客户机。
8、如果在会话中要多次使用username,该怎样保存、调用这一变量?
//MailLogin.java程序片断
HttpSessionsession=request.getSession(true);
if(!
session.isNew()){
name=(String)session.getAttribute("username");
if(name==null)
name="";
}
out.println("
SessionID:
"+session.getId()+"
");
out.println("");
out.println("");
//MailCheck.java程序片断
HttpSessionsession=request.getSession(true);
if(!
session.isNew()){
session.setAttribute("username",name);
}
out.println("
SessionID:
"+session.getId()+"
");
out.println("登录 ");
out.println("注销 ");
//MailLogout.java程序片断
HttpSessionsession=request.getSession(true);
if(!
session.isNew()){
name=(String)session.getAttribute("username");
if(name==null)
name="";
out.println("
SessionID:
"+session.getId()+"
");
session.invalidate();
}
out.println("重新登录邮件系统 ");
//身份验证,派发通告证,存放在session中
Stringname=request.getParameter("username");
Stringpwd=request.getParameter("password");
HttpSessionsession=request.getSession();
if(name.equals("sise")&&pwd.equals("123456"))
session.setAttribute("permitted","yes");
else{
session.setAttribute("permitted","no");
response.sendRedirect("maillogin");
}
//后续操作
9、怎样用会话来验证用户身份?
10、怎样设计购物车?
⏹购物车是一个Java集合(如:
ArrayList、vector等)对象,可让它作为session的一个属性来存放;
⏹通过判断session的该属性值是否为null来检验,购物车是否已创建?
如没有,则要先创建;
⏹选购或册删除物品,就是在购物车上增加或删除对象。
参考代码:
//HomePage.java
importjava.io.*;
importjava.util.ArrayList;
importjava.util.Iterator;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassHomePageextendsHttpServlet{
privateStringbook[][]={
{"Servlet/Jsp深入详解——基于Tomcat的web开发","孙鑫","75"},
{"专家门诊——JSP开发答疑200问","马斗等","52"},
{"深入体验JavaWeb开发内幕——核心基础","张孝祥","58"},
{"深入体验JavaWeb开发内幕——高级特性","张孝祥","52"},
{"Tomcat与JavaWeb开发技术详解","孙卫琴","45"}};
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//将数组内容存放于ServletContext中
ServletContextcontext=getServletContext();
context.setAttribute("books",book);
HttpSessionsession=request.getSession();
ArrayListcart=(ArrayList)session.getAttribute("cart");
if(cart==null){
cart=newArrayList();
session.setAttribute("cart",cart);
}
response.setContentType("text/html;charset=GBK");
PrintWriterout=response.getWriter();
out.println("
");
out.println("");
out.println("
");
out.println("
网上书店");
out.println("");
out.println("
");
out.println("");
out.println("");
out.println("");
out.println("
");
out.println("
");
out.println("
");out.println("");
out.println("
");out.println("
");out.println("请选择");
out.println("书名");
out.println("作者");
out.println(
展开阅读全文
相关搜索