A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-6-2 12:40  /  5112 人查看  /  52 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 13163997058 于 2018-6-3 09:58 编辑

王刘锁
先来说案例.用户登录成功后五秒跳转和在界面打印第几个登录的,本来想把这两个效果放在一
个界面,想了好久没想出来办法!这个五秒跳转的案例是用写一个html文件用js来完成的,而打印
登录人数是直接响应页面打印,两个不挨边,真是伤脑筋!这个问题用jsp可以完成!!,案例并不难,只要注意一些该修改和设
置的地方就可以了,首先我们先把中文乱码问题给解决了,一开始我就是响应的页面打印中文结
果是????,后来想起老师发过一个处理乱码的文档!这种响应的乱码问题的解决用响应response
来解决方法是response.setContentType("text/html;charset=utf-8");固定格式记住即可,然
后用请求对象request.getParameter("name属性值");来获取用户输入的信息并封装成一个User
类对象,把这个User对象传入UserDao中的login方法来用User对象的用户信息去数据库中查找记
录,返回的是一个新的User对象,然后我们再判断这个返回的User对象是否为null,不为null说明
查到了记录用户真实存在这时就可以做登录成功的操作,登录成功我们要响应一个页面,并在五
秒后跳转,response.sendRedirect("/web_02/Sucess.html");这个是响应的页面,在这个html文
件中我们要完成五秒倒计时跳转的功能,那我们要记住必须在<head>标签内定义一个新的标签
<meta http-equiv="Refresh" content="5,url=/web_02/index.html" />并且着个标签有着两
个属性Refresh响应头:5-该时间秒后跳转,url是要跳转到哪去,然后在<script>标签内定义一个
time=5,定义页面加载时间定时改变time,在改变time的方法里让time自减后写入显示time的
<span>标签.具体代码如下,因为忘的差不多了所以写出来记一下!!
<script type="text/javascript">
        var time = 5;
        window.onload = function() {
                setInterval('changeTime()', 1000);
        }
        function changeTime() {
                time--;
                document.getElementById("s1").innerHTML = time
        }
</script>  到这里这个案例基本完成了,当然最费脑的还是找bug了!关于统计登录成功人数的
只要记住Servlet的方法getServletContext()获取ServletContext对象后.再记住
setAttribute("count",count);和getAttribute("count");这两个方法基本就可以搞定!!
还有就是ServletContext的生命周期,它是在服务器启动的时候Tomcat为每一个项目单独创建的
一个域对象,所以它在整个项目有效并在服务器关闭或移除的时候销毁!!!
再来一些小知识点:
1,Servlet的生命周期:第一次去访问它的时候服务器会自动创建它的对象并执行其init方法,这
个动作只会做一次除非把服务器关闭或移除了才会销毁这时会执行destroy方法,也就是说无论
访问多少次Servlet都只在第一次访问执行上述动作,另外每一次访问都会执行其service方法在
该方法内根据请求方式调用不同doxxx方法,
2,设置响应头信息Refresh:addHeader和setHeader这里重点记set就可以.
setHeade(Stringname,Stringvalue);setDateHeader(String name,long date);
setIntHeader(String name,int value);这种是一个key对应一个value的头信息!!
回复 使用道具 举报

2018/6/2 林玮

今天继续学习了Servlet,重点分为了两个:一,Servlet的生命周期.二ServletContext.
Servlet的生命周期是在以后的面试中也会出现的问题,然后Servlet的生命周期到底是多少呢?就是从它的创建到销毁的过程,就是它的生命周期,就跟人是一样的,从出生到死亡.那又是何时Servlet才被创建,何时被销毁的呢?它的创建是随着用户的访问,服务器会创建一个Servlet的,然后又随着用户的访问完毕而销毁的.
url-pattem的配置有三种:
                1.完全路径匹配:/XXX/...(主要应用第一个)
                2.目录匹配:/XXX/.../*
                3.扩展名匹配:*.XXX
还有一个路径,对于路径的编写还是很有讲究的,相对路径不能以/开头,绝对路径呢又必须以/开头.(如果在路径中写./那就是当前目录../就是上一级目录)
还讲了一个response,在今天的案例中很多都用到了他,有两个个方法我们要区别一下,就是addHeader(X,X);他一个key可以对应多个value,还有就是setHeader(X,X);他就是我们平常用的一key一value,然后为什么说区别一下呢,因为我们以后是只有后者,不用前者的.所以平时在运用的时候不要弄混了.
最后就是ServletContext了,它是一个域对象,相当于在服务器中开辟了一个新的空间,是随着服务器的启动而创建,服务器的关闭而销毁的,可以用来储存数据,在要用的时候从这个空间中拿就好了,用一个东西来比喻的话那他就相当于一个百宝箱.
回复 使用道具 举报
陈叶隆
A.一些知识点:
i)绝对路径中分为客户端路径和服务器端路径:
客户端路径一定要加工程名.                /day09/ServletDemo6
服务器端路径不需要加工程名.        /ServletDemo6
        ii) ServletContext对象存取数据,存的数据都是有一定的作用范围的.这种对象称为是域对象
iii)在web.xml中在<servlet></servlet>标签中配置:
<load-on-startup>2</load-on-startup>  --- 传入正整数,整数越小,被创建的优先级就越高.

B.注意点:
1. 用户登录的案例中:
i).解决向页面输出中文的乱码问题
response.setContentType("text/html;charset=UTF-8");
ii).接收表单提交的参数.
                String username = request.getParameter("username");
                String password = request.getParameter("password");
iii).封装到实体对象中.
                User user = new User();
                user.setUsername(username);
                user.setPassword(password);
iv).调用业务层处理数据.
                UserService userService = new UserService();
                User existUser = userService.login(user);

2.登陆成功,5秒后跳转页面的案例
i)response.setHeader("Refresh", "5;url=/day09/demo5-refresh/index.html");

        ii)response.setStatus(302);
        response.setHeader("Location", "/day09/demo5-refresh/success.html");
<meta http-equiv="Refresh" content="5;url=/day09/demo5-refresh/index.html"/>

3.记录网站登陆成功人数的案例
int count = (int) this.getServletContext().getAttribute("count");
                count++;
                        this.getServletContext().setAttribute("count", count);
回复 使用道具 举报
詹源
Servlet是一个运行在WEB服务器上的小的JAVA程序.用来接收,响应客户端发送的请求
Servlet是SUN公司提供的动态网页开发技术
String getParameter(String name) 接收一个名称对应一个值的数据
String [] getParameterValues(String name) 接收一个名称对应多个值的数据
Map getParameteMap().   接收表单所有数据,是表单提交的参数名称
Enumeration getParameterNames()   用于获取表单中提交的所有的参数名称
Servlet接收响应客户端请求的步骤
一 创建包和类
二 引入jar包
三 引入login页面
四 编写Servelt--Service--DAO


Servlet生命周期:
生命周期:就是一个对象从创建到销毁的过程.
Servlet生命周期:Servlet从创建到销毁的过程.
* 何时创建:用户第一次访问Servlet创建Servlet的实例
* 何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
       
回复 使用道具 举报
张述明
今天对sevlet 进行一步的学习,其中比较重要的是sevlet 的生命周期,sevletContext域对象,作用是整个项目
另一个是登入界面的理解    用户在登入界面进行操作,传入用户名和密码,在服务器的Servlet中接收数据,并封装成对象,调用UserService类中的login方法,userservice作为一个业务处理层,相当于一个中间站,userService在调用SERvletDao中的login方法,接收到userservice的数据的Servletdao解决数据库的增删该查的操作,再见对象返回给userService,在返回给servlet,在作出响应
下面是今天的主要的知识点
Servlet 的实现的关系
Servlet-接口
     |
GenericServlet
     |
HttpSverlet
编写一个类继承HttpServlet,重写doget和doPost方法
配置




1.数据库和表
   先有数据库User表-根据表来创建实体类
   User   实体类
   UserDao   对User表的所有操作     数据库
   UserService   业务层----每个方法都是一个业务
   UserServlet    1.接收数据  2.调用Service处理业务 3.完成跳转





创建包和类
引入jar包 {mysql C3P0  dbutils}
引入login的页面
编写SERvlet-service-DAO

Servlet 总结
1.        Servlet的生命周期(重点)
:Servlet创建到销毁的过程
Service 每次访问都执行
Init 是Servlet被构造的时候,init方法被执行.
客户第一次访问Servlet的时候创建Servlet实例
被移除或者关闭服务器时消除
Destroy  被移除或者关闭服务器时消除

Servlet   url-pattem的配置(了解)
三种  :
1.        完全路径匹配     :以/开始    eg:/servlet4  
2.        目录匹配   以/开始需要以*结束. Eg:/*
3.        扩展名匹配  不能/开始    以*开始   eg:*.do

错误   /*.do
完全>目录>扩展名

开发中的路径的编写

相对路径:看你的位置的相对关系,不能以/开始
绝对路径:不需要找位置相对关系,以/开始
分成客户端路径和服务器端路径
客户端路径一定要加工程名
服务端路径不要要加工程名
登入成功后5秒钟跳转另一个页面案例
[使用http中的refresh]
Response中的设置响应头
addHeader(String name ,String value); 针对一个key对应多个value的响应头
addDateHeader(String name , long data);
addintHeader(String name , int data);

setHeader(String name ,String value); 针对一个key对应一个value的响应头
setDateHeader(String name , long data);
setIntHeader(String name , int data);
<解决页面中文乱码>
Response.setContentType("text/html;charset=utf-8")
登录成功后记录登录的成功的次数:需求和分析

案例  记录网站的登入成功的人数
[ServletContext  对象]  存的数据有一定的范围的,这种对象称为域对象.  服务器启动就创建ServletContext空间
        用来存取数据  setAtribute(String name,Object object)
        获取ServletContext中的数据 :getAtribute(String name);
        移除ServletContext中的数据 : remove Atribute(String name);


回复 使用道具 举报
谢洪彬:
今天又学习了Servlet,不过相对与昨天用类去实现Servlet接口,并重写期中所有的方法来说,今天则是使用类去继承HttpServlet,这样就可以不用去实现左右的方法,需要那个就重写那个方法就好了.
Servlet的生命周期:
里面常用的三个方法:
Servlet();
Init();
Destroy();
执行顺序:
用户第一次访问Servlet的时候,会创建一个Init();并执行一次Servlet();
之后每一次请求都会执行一次Servlet();,当关闭服务器或者或者Servlet被销毁的时候就会执行Destroy();
注:Init();在服务器没有关闭时只会执行一次

今天还学习了作用域,ServletConnext,他的作用主要是用于储存数据,就比如今天的记录用户登录个数的案例,通过响应对象调用这个放在在调用set或get方法去设置数据,获取数据
这个作用域的范围在于整个Web项目;

今天学习了一个解决乱码的问题,根据请求或者响应调用不同的方法,今天的这个是响应的setContType(text/html;charset(UTF-8));
还学习了跳转页面的方法
setHeader():
第一种使用传入的参数是Refresh 这个是可以设置固定时间跳转制定页面
第二种使用传入的参数是Location 这个是立即跳转制定页面,不够在使用前需要调用setstatus()设置重定向状态302

回复 使用道具 举报
sts 中级黑马 2018-6-2 22:53:33
27#
Yanmo_ 发表于 2018-6-2 19:54
颜琳琳:
今日学习了Servlet的生命周期:Servlet的生命周期是在用户第一次访问servlet后创建servlet实例,然后 ...

举报!!!第二行第一个innt打错了,是init
回复 使用道具 举报
陈强
Servlet的一天---复杂的一天
首先是在昨天的基础上,让类去继承HttpServlet,而不是继承Servlet接口,这样子在重新方法的时候,只要重写需要使用到方法,而不用全部的方法都重写.
同时也方便了去配置web.xml.
然后就是今天中的复杂的东西----三个案例
第一个是用户登录案例
1\创建数据库和表
2\创建包和实体类
3\导入相关的包---mysql\c3p0\dbutils
4\再去编写相关类的代码
        Servlet----service----dao
        ----接收注册页面提交传过来的数据----将数据封装成对象----再调用查询的方法去判定用户是否存在----等到结果后返回对象----根据返回的对象去做出相应的响应即可
虽然逻辑理清楚,但是这中间还是有很多需要注意的,可能路径写错了,或者是配置文件写错误掉,都有可能会导致异常出现.
第二个是计秒后跳转页面案例
第一种就是设置固定的秒数后跳转到指定的页面.这个相对就简单点,只要设置重定向,然后再设置一个Refresh和多少秒后跳转的一个路径就可以,
第二种就相对比较复杂,要配置文件中去设置一个优先级,然后再去重新创建一个HTML作为计秒跳转的页面,这个时候去定义function来改变秒数.这样才能设置秒数可变的实现.
还有一个队登录的次数进行统计的案例,虽然可以勉强完成,但是还没完全理解透,就先不总结了.

回复 使用道具 举报
刘文峰
使用servlet:创建一个普通类继承HttpServlet类就可以使用servlet接口的方法(因为httpServlet继承了Servlet接口的实现类);HttpServlet req是请求变量,可以接收并处理前台发送过来的数据,HttpServlet resp是响应变量,可以将结果相应给前台.
设置定时跳转页面: 设置响应头的方法 setHeader(“响应头的参数”) . 设置响应头参数refresh(定时跳转)或location(重定向)可以实现页面定时跳转:
Refresh参数实现页面跳转:resp.setHeader(“refresh”,”秒数;url=跳转页面的路径”)
Location参数实现页面跳转:先设置重定向状态码setStatus(302);然后设置响应头参数resp.setHeader(“location”,”跳转页面的路径”);在跳转的html文件里可以设置页面加载事件,使页面定时后过一定的时间跳转到另一个页面(需在html文件的head标签里定义标签<meta http-equiv="Refresh" content="5;url=跳转页面路径" />),还能通过js设置动态的秒数倒计时.
ServletContext是域对象,在Servlet初始化时服务器会初始化这个对象,一个工程只有一个域对象,可以存储数据,存储的数据整个工程都可以使用;getServletContext()  设置域对象  ;getServletContext()  获得域对象;  setAttribute() 获得域对象后可以设置域对象的值;  getAttribute() 获得域对象的值.
Servlet的生命周期;主要体现在init()  service()  destroy()三个方法上;第一次访问Servlet时创建Servlet实例,此时会执行init()方法,该方法之会执行一次;service()方法在用户访问时执行,每次访问都会执行一次该方法;destroy()方法在关闭服务器或从服务器移除该工程时执行.
回复 使用道具 举报
本帖最后由 Nevermo 于 2018-6-4 00:04 编辑

许煜
                                                                                   Servlet总结
每次在html页面跳转路径如果指向servlet的子类页面时 在底层tomcat会创建一个servlet的实例化对象并调用service()和init()来初始化servlet的成员变量,在这里service() 有点类似于jquery里面的入口函数$(document).ready(function(){  });doget 和dopost 的底层均是service .servelet的生命周期要从某个页面触发事件路径指向servelet开始,到项目结束或者服务器关闭时结束. tomcat第一次会创建servlet实例化对象,在servlet被销毁之前,接下来的每次访问都不会再init新对象,而是创建新的子线程访问.而servlecomtextt就像是servlet的一个数据类型为Map<object,object>成员变量,属性和属性值形成一组键值对,在tomcat实例化对象的时候就存在,通过this.getservletcomtext()调用,这样也就能合理解释为什么servletcomtext的生命周期和servlet的实例化对象同步且作用域为一个web项目(每个项目启动时,tomcat会为每个项目创建一个单独的servlet对象).页面跳转通过sethead(refresh,value)设置表头 refresh表示隔多久刷新,然后通过新的url实现刷新时跳转 .redirect底层是通过302状态码重定向实现跳转页面
提交表单->servlet调用事务<- -事务(方法集)<---方法
                    |
  实现验证 跳转 记数等各种功能
回复 使用道具 举报
sts 中级黑马 2018-6-3 00:26:39
31#
苏海斌
Servlet的生命周期

Servlet的生命周期就是一个对象从创建到销毁的过程,当用户第一次访问Servlet的时候服务器会创建一个Servlet的实例,
并且Servlet中init方法就会执行,而在任何一次的请求时,服务器都会创建一个新的线程访问Servlet中的service的方法;
当项目从服务器中移除或关闭服务器的时候,Servlet实例就会销毁,那么destroy方法就会执行;

在对Servlet的配置中,在web.xml中在<servlet></servlet>标签中,
<load-on-startup>2</load-on-startup>  --- 传入正整数,整数越小,被创建的优先级就越高
在url-pattern配置方式有三种:
即完全路径匹配(以/开始),目录匹配(以/开始以*结束),扩展名匹配(以*开始,注意:不能以/开始)
优先级:完全路径匹配>目录匹配>扩展名匹配
(注:客户端路径一定要加工程名.服务器端路径不需要加工程名.)

ServletContext域对象(重点)
作用:
1.用来获得全局初始化参数.
2.用来获得文件的MIME的类型.
3.作为域对象存取数据时,作用范围是整个web工程
在服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象
在服务器关闭或在项目从服务器中移除的时候销毁.
4.用来读取web项目下的文件.
回复 使用道具 举报
吴俊斌

登入案例:
     前期导包 mysql,c3p0,dbutils,还有一个c2p0的配置信息,一般出错都是配置信息问题,要看清了改一般改个
路径地址和登入账号和密码就行了
     创建了一个servlet服务类,一个实体类,一个查询类就行了,业务类暂时感觉不到用处就不写了,实体类就是
根据表中的类创建的,再填上set,get方法还可以给过有参的构造.查询类定义一个有参(实体类对象)的查询方法,
通过实体类的get方法获得数据,然后在去数据库查询得到结果封装成实体类,返回实体类.最后创建一个子现象类httpservlet,通过dopost或doget方法的request.getparameter()获得数据,创建一个实体类,将获得的数据用set
对实体类赋值,在创建一个查询类对象,调用查询方法将实体类传过去就行了,得到结果在判断是否为空,为空登入失败
不为空就是登入成功.  一般出错都在html提交路径上,最好用绝对路径"/项目名/servlet的配置信息中的路径"

跳转页面:
   就是在登入页面,先重定向下setstatus(302),在跳转setHeader("location","跳转时间;url=跳转的路径") 如果是页面直接在头标签<meta http-equiv="Refresh" content="跳转的时间;url=跳转的绝对路径"/>

记录网站登录成功案例
    这个我们就要用到SetvletContext它是一个项目的一个文本域,可将它理解一个txt文件夹,项目所有类都可以使用它,这时我们现在第一个setvlet服务类里的init方法中get它定义一个变量用来记录登入的次数.再登入成功里跳转到
计数的页面,连接一次就变量++.输出变量就好了.

回复 使用道具 举报
常小天
今天进一步学习servlet的内容。今天学习的知识可以通过今天的案例来一步步理解和掌握。今天的案例可以归总为一个,就是用户登录案例。在这个案例中,最先的一步是用户从浏览器访问服务器的一个HTML首页,这个首页是之前写好的,也没有什么新的知识点,就不用说了。通过首页的超链接切换到登录页面。这里要提一句的是用户访问的过程中每一步都是一个完整的请求与响应的过程。在登录页面输入登录信息后点击登录,也就是一个提交按钮。这时浏览器就会向服务器发出一个请求,也就是将录入的登录信息发送到一个指定好的存在于服务器的servlet程序。最原始的,当服务器开启后的第一个请求发送给servlet程序后,servlet对象创建,执行初始化程序,每一次用户的请求都会引发服务器访问一次servlet中的service方法,这里提一句,第一次请求,也就是触发servlet对象创建的请求也同样会触发service方法的调用。Service方法接着调用doxxx方法来对请求做出响应。Service方法会在服务器开启的时段内被多次访问,直到服务器关闭或者servlet被从服务器中移除,destroy方法执行,这个servlet对象就会被销毁。这就是servlet的生命周期。这里有一些点需要展开。一是servlet对象的创建可以通过在配置文件中添加load-on-startup标签,设置它的创建优先级,以达到在服务器开启的时候就创建servlet对象的目的。二是服务器对请求的响应不是一步到位的。当请求被传入servlet对象后,servlet会将信息抽取并封装到一个提前写好的类的对象中,在创建一个service对象(业务层类,包含了各种处理不同业务的方法),调用service对象的方法,本例中就是登陆方法,并将之前封装好的含有传入登录信息的对象作为参数传入。到这儿还没完,service对象只是业务层的对象,它没有具体的处理业务的方法步骤,在他的内部要创建一个DAO对象,各种具体的操作步骤都在DAO的方法中,业务层就是制定不同的业务方法,在每个方法中通过DAO对象调用一种或多种DAO方法来实现这个业务,打个比方,就是DAO中存放着各种最基础的小工具,service业务层对象就好比一个个业务员,他们拿着DAO中的各种工具来干活,不同的业务员采取不同组合的工具来完成不同的业务。最后将完成的结果返回给servlet,由servlet对结果进行判断并进一步做出相应的响应。当然这几个java类都要通过web.xml来配置进服务器。这之后说一说登录案例的优化。第一个方面就是等待5秒后跳转。这里使用的是setHeader方法,这个方法是servlet的方法,所以救助this关键字来调用,通过修改响应头的refresh的内容达成等待并跳转的目的。第二个方面是统计登陆成功的人数。这里要用到域对象。服务器为每一个工程都开辟了一块区域来保存一些全局变量,这就是域对象。ServletContext同样是servlet的方法,借助this来调用。在servlet的初始化方法中创建一个统计变量,设为0,并添加进域对象,当判断登录成功后,在调用方法获得域对象并得到该变量,自增,再赋给自身。并跳转至新的页面,在该页面在调用方法获得域对象再获得该变量,输出其值,这个值就是到目前为止登录成功的人数。
回复 使用道具 举报
webDay02_Servlet总结:

一、Servlet的生命周期
  Servlet默认用户第一次访问时创建Servlet实例,然后调用init()方法,后面用户每次访问都会执行service()方法。当服务器关闭,或者web项目移除的时候,会调用destroy()方法。
1).init():初始化参数使用。
2).service()方法:用户访问会执行。来接收参数和作出响应,一次请求一次响应。
3).destory()方法:销毁对象。当Servlet被销毁前,可以方法里面执行一些保存数据的操作。
4).构造函数调用优先级大于init()。因为当构造函数执行完毕,才会产生一个Servlet单例对象。
5).Servlet默认用户第一次访问时创建实例,如果想让Serlvet在服务器启动时创建好,要在web.xml中的<servlet>标签中加上标签<load-on-startup>4</load-on-startup> 数字越小表示优先级越高。



二.web工程引入jar包的方法

  今天在敲案例的时候,启动tomcat报出500:ClassNoFind,提示DBUtils的类QueryRunner无法找到。
原因:从web项目中导入jar包的方式错误。
解决:在web工程的WebContent->WEB-INF下有一个lib文件夹。将jar包复制进去就可以了。
与java工程不同的是,javaSE工程是创建一个文件夹lib,复制jar包。右键对jar包build path。

三、路径名配置:

1.绝对路径:
绝对路径以/号开始:
1).服务器的绝对路径名不需要加上工程路径名。如:<url-pattern>aa</url-pattern>表示/day0602/aa这个路径
2).客户端的绝对路径要加工程路径名:如,<form action = "/day0621/aa">:

2.相对路径:不以/号开始的都叫相对路径。

3.默认情况下路径:
前端:WebContent:这个等于工程名:/day0622/
服务器:/aa表示的时:/day0622/aa这个路径名

4.开发中的路径的编写:
相对路径:都是需要找位置相对关系
./: 当前路径
../:上一级路径
使用跳转的原则是把页面跳到WebContent文件夹中

四、web项目的包路径构建:

  今天在学习登录案例的时候,最大的收获是学习构建package包路径名字。如何给java类进行合理的分类,使项目结构更清晰,对项目本身很重要。在今天的登录案例中。包的路径有以下分类和作用:
  com.web.Bean:存放实体类javaBean,用来对应数据库的表:User.java用户类放在这里
  com.web.dao:数据库连接:专门用来操作数据库的。UserDao.java:专门操作数据库的类放在这里
  com.web.service:连接Servlet和数据库操作DAO之间的服务:UserService类放在这里,当Servlet将用户对象User传给它时,它会调用数据库操作UserDAO.并将操作结果告诉UserServlet;
  com.web.servlet:存放Servlet类
  com.web.utils:存放数据库连接的工具类

  以后会经常使用这个分类的。
  登录案例在逻辑上比较简单。

五、关于三案例合一:登录验证,跳转成功倒计时,登录成功后显示人数的总结
  1.跳转的两个方法:
  1).重定向:
    resp.setStatus(302);
    resp.setHeader("Location", "/day0602/loginSuccess.html");
  2).定时刷新:
    response.setHeader("Refresh", "0;url=/day0602/loginSuccess.html");
  显示登录人数,今天的案例是从Servlet中直接打印。当跳转到成功页面以后,要用<meta http-equiv="Refresh" content="5;url=/day0602/CountServlet"/>中打印出来。
  3)域对象存取数据:
    (1)存:在初始化函数中:this.getServletContext().setAttribute("count",0);
     (2) 取:Integer i = (Integer) this.getServletContext().getAttribute("count");
         再存: etServletContext().setAttribute("count", ++i);
回复 使用道具 举报
康元中

同学们,今天我们就正式学习Servlet的使用了,今天需要掌握的就是如下三个案例,通过敲案例掌握重要知识点。

今日需要掌握的有:
通过登录案例,掌握基本的Servlet的使用,从前台接收数据,处理数据,并将结果响应给前台
通过设置时间跳转页面案例,掌握如何设置响应头信息
通过记录网站登录成功案例,掌握一个重要对象ServletContext的使用,重点掌握存取数据API和生命周期
处理乱码问题:请求乱码(get/post),响应乱码

首先要知道Servlet 是一个在tomcat上的java程序;他可以对前端传来数据进行请求和响应;
前天是写了一个类去实现Servlet接口,这样这个类就得重写该接口的所有方法很不好,所以给了优化吧,
所以就今天学习了HttpServelet这是有关协议的Servelte,他的父类是根GenericServlet()并且它的父类实现了Servlet接口
1 首先掌握登录的一个案例
案例的步骤如下: 将用到的相关的jar放置lib中tomcat自动可以完成导包操作, 有三个包分别是:C3P0 的jar包
              DBUtils的jar包 和jdbc的jar包. 然后将c3p0.的配置文件html放置项目的src下这是固定格式记住就好
            首先要明白三层架构的编程思想.a: 界面层 b 业务逻辑层 c 数据访问层;
          拷贝一个首页页面和登录的页面到WebContent下做好准备工作;
        创建一个User类,就是要用这个user类的对象来传参数,注意里面的成成员变量要和数据库中字段的名一样,
        创建一个UserServlet类继承httpServelte 重写了doget和dopost方法然后可以使用request.getParameter
     获取客户端传来的值然后将值通过set方法封装到user对象中 然后创建UserService调用方法来获取处理完
    的值. UserService 就是想当于业务逻辑层,对界面层传来的数据进行处理和响应以及数据访问层提供数据的响应..
   关系还是有点乱大概是那个意思,创建UserDao 这个类就是对数据的操作,将我们传user对象中的值拿去到
  数据库中进行匹对,将匹配值进行封装到Javabean中.在UserServlet中登录成功与否判断
  登录成功后可以进行 页面的跳转和客户端访问的一个计数.
  a;通过 response.setHeader("Refresh", "5;url=/day/demo3-login/index.html")完成登录成功后5秒
后的页面跳转
  b:另外一种是登录成功后跳转到一个一面上然后五秒后再进行页面跳转
     页面的跳转就要用到 响应行的 状态码配合setHeand的使用
        response.setStatus(302);
        response.setHeader("Location","/day/sucess.html");
     解决向页面输出中文的乱码问题 response.setContentType("text/html;charset=UTF-8");
  c: 客户端访问的一个计数就要知道什么是域对象,就是服务器为每个工程开辟一块区域来包存全局变量,
        这些变量在其他类中都能被使用.在servlet的初始化方法中创建一个统计变量且设为0;
     通过getServletContext和setAttribute进行存值当登录成功就取值 然后计数变量自增
    在接着存值. 这个值就目前止登录成功的人数。

回复 使用道具 举报
杜石苇
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API        动态的向客户端输出内容
Servlet接口中的方法
1)init(ServletConfig config)
何时执行:servlet对象创建的时候执行
ServletConfig : 代表的是该servlet对象的配置信息

2)service(ServletRequest request,ServletResponse response)
何时执行:每次请求都会执行
ServletRequest :代表请求 认为ServletRequest 内部封装的是                                                                                http请求的信息
ServletResponse :代表响应 认为要封装的是响应的信息

3)destroy()
何时执行:servlet销毁的时候执行

Servlet的生命周期
1)Servlet何时创建
默认第一次访问servlet时创建该对象

2)Servlet何时销毁
服务器关闭servlet就销毁了

3)每次访问必然执行的方法
service(ServletRequest req, ServletResponse res)方法
是ServletContext对象是个域对象,里面可以存放变量只要访问该服务器的任何用户都可以来存取变量
回复 使用道具 举报
林恒山
Servlet接口被通用的servlet的genericServlet类实

现,HttpServlet类继承Generic类.前台form表单传来的数

据通过doPost()或者doGet()处理.

Servlet的生命周期:Servlet的创建到销毁的过程.
创建:用户第一次访问Servlet创建Servlet的实例.
销毁:服务器正常关闭或者项目从服务器移除.
用户第一次访问Servlet,服务器创建Servlet实例并且执行

init(),init只会在创建Servlet时执行一次.每次用户请求

后,service()都会执行一次,查看请求是get或者post..,回

去执行对应的doXxx()方法.

通过在web.xml配置<load-on-startup>2</load-on-

startup>,可以让init()在服务器启动的时候就加载.

url-pattern配置方式有3种:
        1.完全路径匹配:一/开始
        2.目录匹配:以/开始,以*结束
        3.扩展名匹配:不能以/开始,以*开始
三种配置方式执行的顺序:
        完全路径匹配 > 目录匹配 > 扩展名匹配

相对路径:找相对位置,不能以/开始
        本级路径 ./(可以不写) 上一级目录../
绝对路径:以/开始.分为
        客户端路径:一定要加工程名
        服务器路径:不需要加工程名

添加表头信息:
addHeader(String name,String value);针对一个key对

应多个value的响应头
addDateHeader(String name,long date);
addIntHeader(String name,int value);

setHeader(String name,String value);针对一个key对

应一个value的响应头,这种情况的使用的比较多
setDateHeader(String name,long date);
setIntHeader(String name,int value);

response.setHeader("Refresh", "5;url=/day09/demo5

-refresh/index.html");5秒之后跳转到index.html

ServletContext对象存取数据.
        setAttribute(String name,Object obj)往

ServletContext对象存入数据
        getAttribute(String name)从ServletContext

对象获取数据.
        removeAttribute(String name)从

ServletContext对象移除数据.

// 初始化一个变量count的值为0.
int count = 0;
// 将这个值存入到ServletContext中.
this.getServletContext().setAttribute("count",

count);
这是往ServletContext对象存放参数为count字符串,值为

count整形的值.
这2句放在init().

int count = (int) this.getServletContext

().getAttribute("count");
count++;               
this.getServletContext().setAttribute("count",

count);
这样是往ServletContext对象获取数据,进行操作后存放到

ServletContext里面.

ServletContext作用:
作为域对象存取数据;
        作用范围:整个web工程.
        创建:服务器启动的时候.
        销毁:服务器关闭或者项目从服务器移除
读取web项目下的文件.
回复 使用道具 举报
林荣彬
   今天主要学习了Servlet登录页面的操作,设置时间跳转和记录登录成功次数的案例;
UserDao:对User表的所有操作;(增删改查)
UserService:业务---每个方法都是一个业务
UserServlet:1.接收数据2.调用service处理业务3.完成跳转.
                                    
用户登录操作顺序
1 创建User表
2 创建User实体类
3 在WEB_INF的lib文件夹里 导包c3p0,mysql,DButils
4 创建UserDao,UserServlce,UserServlet,    html页面
5 接收数据→处理业务→查询数据库→返回查询结果到用户

生命周期:就是一个对象从创建到销毁的过程.
Servlet生命周期:Servlet从创建到销毁的过程.
何时创建:用户第一次访问Servlet创建Servlet的实例
何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
   用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销
毁,那么destroy方法就会执行.

Servlet默认是在第一次访问的时候创建的.现在让Servlet在服务器启动的时候创建好.进行对Servlet的配置:
在web.xml中在<servlet></servlet>标签中配置:
<load-on-startup>2</load-on-startup>  --- 传入正整数,整数越小,被创建的优先级就越高.

ServletContext 域对象:
功能:1.获得全局初始化参数2.用来获得文件的MIME的类
型;3.作为域对象存取数据4.用来读取web项目下的文件.
作用范围:整个web工程.
创建:服务器启动时创建,tomcat服务器为每个web项目创建一个单独ServletContext对象;
销毁:服务器关闭的时候.或者项目从服务器移除的时候;

响应乱码:
response.setContentType("text/html;charset=utf-8");
回复 使用道具 举报
本帖最后由 COLDER 于 2018-10-18 19:33 编辑


Day13

HttpServlet间接实现Servlet,可以重写service方法
一个类继承HttpServlet,重写doGet,doPost方法
doGet:如果是get请求,就执行doGet();
doPost:如果是post请求,就执行doPost();

Servlet底层的Service方法实现是通过将传入的request和response参数强转为httprequest和httpresponse参数,
再调用service方法传入这两个参数,然后判断方法名为get还是post,再去调用doget()或者是dopost(),
所以service方法底层代码实现其实通过doget和dopost方法来实现.

注册案例:
创建数据库数据表---创建实体类---创建Dao(执行sql语句)---创建service(接收参数---处理业务---跳转页面)---创建servlet(extends httpservlet,编写get)---导包---编写注册页面

Servlet生命周期:Servlet从创建到销毁的过程.
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中的init方法就会执行.
任何一次请求服务器都会创建一个新的线程访问Servlet中的Service的方法.
在service方法内部根据请求的方式的不同调用doXXX的方法
(get请求调用doget,post请求调用dopost).当Servlet中服务器中移除掉,或者关闭服务器,
Servelet的实例被销毁,那么destroy方法就会执行.

Servlet配置
<load-on-startup>优先级</load-on-startup>优先级不能为1.
url-pattern配置方式:完全路径匹配,目录匹配,扩展名匹配,优先级:完全路径>目录>扩展名.
完全路径匹配:以/开始
目录匹配:以/开始,以*结束
扩展名匹配:以*开始

绝对路径以/开始,相对路径不以/开始,
绝对路径:客户端路径,服务器端路径
客户端路径一定要加工程名,服务器端路径不需要加工程名.
建议使用绝对路径

登录成功5秒后跳转案例:responce设置响应头,利用refresh属性来跳转到新页面
记录登录成功人数案例:在注册案例的基础上使用ServletContext对象(域对象),调用set/get Attribute方法来存取数据.

回复 使用道具 举报
何平波
Servlet
快速配置Servlet文件,在包里新建Servlet,一键生成类文件加web.xml.
案例一,模拟用户登录跳转页面提示成功或失败
1.写一个类继承HttpServlet
2.创建数据库和表
3.创建User实体类,创建UserDao(用户登录案例代码),UserService(登录案例的Service代码),UsweServlet(登录案例的Servlet代码),html页面
4.引入jar包   c3p0.jar   Dbutils.jar  jdbc.jar
5.UserServlet(action转到这个类里)接收数据,调用service处理业务,--判断是否存在
6.setContentType("text/html;charset=UTF-8");解决乱码

User ------实体类
UserDao--对User表的所有操作
UserService--业务--每个方法都是一个业务
UserServlet--接收数据,调用service处理业务,完成跳转

总结
Servlet的生命周期
概念:就是一个对象从创建到销毁的过程.
2.Servlet生命周期,Servlet从创建到销毁

案例二 模拟用户登录定时页面跳转
结合模拟用户登录跳转页面提示成功或失败
在第五步的步骤里写入一行代码就可以实现该功能
        //5秒跳转      //url路径是跳转的页面的路径
response.setHeader("Refresh", "5;url=/Demo/zc.html");
setHeader  设置响应头
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马