servlet 第三讲 笔记1&n…

本文介绍了Servlet中数据共享的四种方法:Cookie技术、sendRedirect()转向、隐藏表单提交和Session技术,并详细阐述了Session的工作原理及操作方法。同时探讨了如何利用Session改进用户登录系统,防止非法登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三讲 


1.三个servlet怎么共享同一个数据,也就是c++里面的静态全局变量,但在servlet中如何实现。

 

共四种方法:

A) cookie技术

B) sendRedirect()转向,跳转技术

C) 隐藏表单提交(form

D) Session技术

 

2.servlet如何操作数据库

 

 

3.用户登录系统的功能改进

 

 

======================================================================

1.共享数据


 

 

A) cookie  

服务器可以将提交的信息回写到浏览器,等需要的时候获取,这就是cookie

1保存用户密码,在一定时间不用重新登录

2记录用户访问网站的喜好,有无背景音乐,背景颜色等等

3网站的个性化,比如定制网站的服务,内容

暂时只是了解,下一讲详细讲解

 

B)sendRedirct()

通过该方法将信息传送给下一个页面,比如:
sendRedirect(wellcome?uname=shunping);

Wellcome URL  ?url和变量分隔符,&是变量之间的分隔符,

如果传递的是中文,将得到乱码,需要处理下

 

在需要得到变量的servlet页面使用方法:

String u=req.getParameter("uname");

    String p=req.getParameter("passwd");

 

传送信息速度快,但只能传送字符串,不能传送对象

 

 

 

例子: wellcome 页面显示登录用户登录的姓名,就可以使用该方法。

登录处理页面的代码:

 

  • String u=req.getParameter("username");
  • String p=req.getParameter("passwd");
  • // 验证:
  • if(p.equals("123456")){
  • //合法跳转
  • res.sendRedirect("wellcome?uname="+u+"&passwd="+p);
  • // 写你要到的servlet的那个URL
  • }
  • else{
  • //不合法
  • res.sendRedirect("login");
  • }

 

信息接收页面的代码:

 

 

  • //得到从logincl的用户名和密码
  • String u=req.getParameter("uname");
  • String p=req.getParameter("passwd");
  • try{
  • PrintWriter pw=res.getWriter();
  • String b="你的密码:"; //这里的字符串显示的时候会出现乱码
  • pw.println("wellcome,http,"+u+b+p);
  • }
  • catch(Exception ex)
  • {
  • ex.printStackTrace();
  • }

==================================================================

 

C) 隐藏表单提交(form)页面间传值

 

这是最常见的一种方式,也是最简单的,但有时候这个技巧非常管用

 

  • login>

使用hidden控件,在界面不显示,但又有名字,有值

当需要传递数据的时候,使用hidden来传递给login 页面。

Action 属性指的是表单传递给哪个页面,比如上面的login页面

 

简而言之就是在一个页面中使用隐藏表单将值传递给另一个页面:

 

  1. pw.println("<form action=logincl method=post>");
  2. pw.println("用户名:<input type=text name=username><br>");
  3. pw.println("密码:<input type=password name=passwd><br>");
  4. 隐藏表单-> pw.println("<input type=hidden name=sex value="+sex+">");
  5. pw.println("<input type=submit value=login><br>");
  6. pw.println("</form>");

 

 

 

D) session技术  (很重要)

理解:

浏览器打开网站的时候,服务器就为这个浏览器开辟一个独占的空间,就是session空间,空间默认存在时间30min。可以修改。

用在哪:

1网站的购物车 

2保存用户登录信息  

3将数据放入session中 供同一个用户的各个页面的使用,

4防止用户非法登录

====

可以将session看做一张表,表有两列:名字和值,stringobject,和json很像啊。。。。

每一行就是session的一个属性。

 

-----操作session-----

 

--得到session

HttpSession hs=req.getSession(true);    request.getSession 

                                  得到和req关联的session,没有就创建新的

--session添加属性:

hs.setAttribute(String name,object val);    setAttribute

--session得到某个属性:

String name=hs.getAttribute(String name);   getAttribute

--session删除某个属性:

hs.removeAttribute(String name);         removeAttribute   安全退出等需要用到

--清空session,     

0为清空,-1session永远不过期,其他大于0为以秒为单位的session存在时间

hs.setMaxInactiveInterval(0); 

               调用后,session被干掉,实例也被干掉,要是后面要用,必须再次创建

--可以得到sessionID

Hs.getId();   ID 的分配是这样的,ID 属于一个客户端,当session过期或者被销毁,之后重新创建,ID也会变。

========================================================

注意事项:

 

1.session 中属性存在时间30min 可以修改,修改方式:1.web.xml 中修改,2.程序中修改

2.30min时间是指的用户没有操作session时间,不是累计时间

3.当某浏览器访问网站时,服务器给浏览器分配惟一的session ID来识别

4.因为session的各个属性要占用服务器的内存,因此公司都是都是迫不得已才用session

 

Web.xml 中怎么改session

如下代码中改:

 

 

  1. <session-config>
  2. <session-timeout>30</session-timeout>
  3. </session-config>

=========================下面实现session========================

实现两个功能,保存用户信息 和 防止非法登录

防止非法登录指的是当用户没有登录的时候,输入网址,没法转到相应页面。

 

 

 

当用户在login页面输入的数据经过比对,正确后,将用户的账户和密码存入session

这样,当用户在session时间段内的时候,访问该网页,则不需要输入账户密码,直接跳转到相应页面。

 

loginCL处理页面:

 

 

  • String u=req.getParameter("username");//html获得数据
  • String p=req.getParameter("passwd");
  • if(p.equals("123456")){
  • //将验证成功的信息写入session
  • //1.得到session,得到那张表
  • HttpSession hs=req.getSession(true);
  • //2.写数据进去
  • hs.setAttribute("pass",p);
  • hs.setAttribute("name",u);
  • //3.修改session时间
  • hs.setMaxInactiveInterval(20);//以秒计算
  • //4.在wellcome页面去读session空间 的数据
  • //合法跳转
  • res.sendRedirect("wellcome?uname="+u+"&passwd="+p);
  • // 写你要到的servlet的那个URL
  • }

 

 

Welcome处理界面:

 

 

  • String u=req.getParameter("uname");
  • String p=req.getParameter("passwd");
  • //从session得到数据
  • HttpSession hs=req.getSession(true);
  • String pass= (String)hs.getAttribute("pass");
  • String uname=(String)hs.getAttribute("name");
  • if(pass==null||uname==null){ //如果session为空,则跳转
  • try {
  • res.sendRedirect("login");//跳转到login
  • catch (Exception e) {
  • e.printStackTrace();
  • }
  • }
  • else{
  • try{
  • PrintWriter pw=res.getWriter(); pw.println("wellcome,http,"+u+p+"session:"+uname+"_"+pass);
  • }
  • catch(Exception ex)
  • {
  • ex.printStackTrace();
  • }
  • }

 

当然实际上要做一个完整的session ,实现进入这个界面就跳转,还需要琢磨琢磨

这里只是将session中的数值操作,读取。

 

考虑到不让用户非法访问页面,我们使用后台的session来保存用户是否已经登录,每次用户登录成功,都在session中保存用户的信息,当session过期或者销毁或者session中没有用户信息,则不允许用户之间访问登陆后的页面。


 

 

2.servlet如何操作数据库

下一讲要讲数据库的东西,我决定先去学习下java的数据库,估计不难,毕竟我有过c#经验


 

 

 

 

 

 

 

3.用户登录系统的功能改进



后续。。。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值