JavaWeb6Word格式.docx
《JavaWeb6Word格式.docx》由会员分享,可在线阅读,更多相关《JavaWeb6Word格式.docx(31页珍藏版)》请在冰点文库上搜索。
Thread.sleep(3000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
resp.getWriter().print("
YOurnameis:
"
+name+"
"
+this);
}
}
ServletContext对象。
●ServletContext对象
•一个web项目只有一个ServletContext对象。
•当tomcat启动时,由tomcat创建。
•全局共享数据。
●与所有登录的用户共享数据。
•功能:
•实现聊天。
•实现统计页面的点击量。
•获取本地数据并显示,如图片。
1.2、ServletContext作为另一个域对象
可以保存数据:
所有的域对象:
setAttribute(“name”,Object);
保存某个对象。
getAttribute(“name”):
object–获取这个域对象的中的值。
;
、
removeAttribute
getAttributeNames
1.3、获取这个域对象的方式:
1:
通过ServletConfig获取这个域对象
ServletContextapplication=ServletConfig.getServletContext();
也可以在Request中获取
ServletContextapplication=request.getSession().getServletContext();
1.4、功能–共享数据
这个程序中,所有的组件中(Servlet,jsp,filter.listener)就可以共享数据
以下是共享数据的基本示例:
代码如下:
先向里面保存数据
publicclassCtx1ServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
response.setContentType("
text/html;
charset=UTF-8"
PrintWriterout=response.getWriter();
ServletContextapplication=getServletConfig().getServletContext();
if(application.getAttribute("
)==null){
Randomrandom=newRandom();
Stringstr="
保存的数是:
+random.nextInt(1000);
//将这个随机数
application.setAttribute("
str);
out.print("
放成功了:
+str);
}else{
已经存在了数据"
out.print("
<
ahref='
javascript:
window.history.go(-1);
'
>
返回<
/a>
在第二个Servlet中获取数据:
publicclassCtx2ServletextendsHttpServlet{
//直接从ServletContext中获取数据
ServletContextsc=request.getSession().getServletContext();
//获取数据
Stringstr=(String)sc.getAttribute("
22:
保存所有登录的用户共享的数据。
功能1:
计算点击量:
publicclassCountServletextendsHttpServlet{
//每一次来访问这个方法,都是点击量+1
ServletContextapplication=getServletContext();
//先从Application中取数据
Integercount=(Integer)application.getAttribute("
count"
//如果是第一个人来访问则为null
if(count==null){
count=1;
count++;
//放回到applicatioin
application.setAttribute("
count);
out.println("
!
DOCTYPEHTMLPUBLIC\"
-//W3C//DTDHTML4.01Transitional//EN\"
HTML>
<
HEAD>
TITLE>
AServlet<
/TITLE>
/HEAD>
BODY>
这是一个新的信息,。
。
这个新闻被点击了:
+application.getAttribute("
));
/HTML>
out.flush();
out.close();
为了保证数据的原子性,应该同步,但在doGet方法k使用同步又很慢:
就应该考虑开一个线程:
//每一次来访问这个方法,都是点击量+1
finalServletContextapplication=getServletContext();
newThread(){
publicvoidrun(){
newAddOne(application).increment();
};
}.start();
+application.getAttribute("
//在这个代码中添加1
classAddOne{
privateServletContextapplication;
publicAddOne(ServletContextsc){
this.application=sc;
publicsynchronizedvoidincrement(){
//先从Application中取数据
//如果是第一个人来访问则为null
if(count==null){
count=1;
}else{
//放回到applicatioin
count);
功能2:
实现一个聊天程序:
第一步:
开发一个servlet先写出一个表单:
publicclassChatServletextendsHttpServlet{
//直接去请求doPost,只有用户第一次来这个页面时才会走这个doGet方法
doPost(request,response);
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
//1:
写出一个表单
Stringform="
formaction='
ChatServlet'
method='
post'
+
"
发言:
inputtype='
text'
name='
msg'
/>
submit'
value='
发送'
/form>
;
form+="
hr/>
out.print(form);
第二步:
生成一个文本域
第三步:
接收参数–完整的代码如下:
packagecn.oracle.count;
importjava.io.PrintWriter;
importjava.text.SimpleDateFormat;
importjava.util.Date;
SimpleDateFormatsdf=newSimpleDateFormat("
HH:
mm:
ss"
//接收参数
request.setCharacterEncoding("
UTf-8"
Stringmsg=request.getParameter("
msg"
if(msg!
=null&
&
!
msg.trim().equals("
)){//是否为null
//获取用户的ip
Stringip=request.getRemoteAddr();
ip=ip.substring(ip.lastIndexOf("
."
)+1);
Stringtime=sdf.format(newDate());
msg=ip+"
("
+time+"
):
+msg;
//将参数放到application,先获取以前有没有人说话
Stringmsgs=(String)getServletContext().getAttribute("
msgs"
if(msgs==null){
msgs=msg;
}else{
msgs+="
\r\n"
}
//再放回到app
getServletContext().setAttribute("
msgs);
StringmsgBox="
textareareadonlystyle='
width:
300px;
height:
400px;
+getServletContext().getAttribute("
)
+"
/textarea>
out.print(msgBox);
2:
ServletContext获取项目的真实的目录
java.lang.String
getRealPath(java.lang.String
path)
ReturnsaStringcontainingtherealpathforagivenvirtualpath.
获取项目的真实的路径。
基本的示例:
publicclassRealpathServletextendsHttpServlet{
你的项目的真实的路径为:
+getServletContext().getRealPath("
/index.jsp"
br/>
/WEB-INF"
示例:
显示某个目录下所有的图片:
publicclassImgServletextendsHttpServlet{
获取这个目录
Stringpath=getServletContext().getRealPath("
/imgs"
//2:
构造成一个file对象
Filefile=newFile(path);
//3:
就可以列出这个目录下的所有文件名
String[]fs=file.list();
StringcontextPath=request.getContextPath();
for(Stringnm:
fs){
Stringa="
+contextPath+"
/imgs/"
+nm+"
Stringimg="
imgwidth='
200'
height='
style='
margin:
3px;
border:
0px;
src='
img=a+img+"
out.print(img);
3、获取在web.xml中配置的全局的初始化参数
示例代码:
//先获取sc对象
ServletContextsc=getServletContext();
Stringname=sc.getInitParameter("
Stringaddr=sc.getInitParameter("
addr"
out.print(name+"
+addr);
2、会话技术
a)在服务器上,有一个对象,可以记录某一个特定的用户的状态。
记录用户状态的技术,会话技术。
b)因为网页HTTP协议,HTTP协议是无状态的协议。
会话跟踪技术–session
Session是某个会话(某个浏览器)相关的。
一个会话就是一个session.互不影响。
Session也是一个域对象。
-只与一个用户相关。
说明session是对某个用户相关的数据:
先开发Aservelt
publicclassAServletextendsHttpServlet{
//设置对post有效的编码
UTF-8"
//接收用户的参数
Stringname=request.getParameter("
if(name!
name.trim().length()>
=3){
你登录成功"
//将用户信息名称放到三个域中去
request.setAttribute("
name);
//获取Session
HttpSessionsession=request.getSession();
//将用户名称,也放到sesion
session.setAttribute("
name