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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

李思贤:今天学习了页面的登录 ,生命周期,定时跳转, 登录数记录;

一:页面登录:
在servlet中 1接收从登录页面传来的数据
2封装对象 封装成一个user对象
3调用业务层 调用UserService中login方法(自己写),调用UserDao中查询,
返回一个对象
4跳转:判断对象是否存在,跳转

二:Servlet生命周期:
创建init执行:用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.
Service执行:任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.
关闭Destroy执行:当项目从服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.


三:跳转计时的那个(5,4,3,2,1):是先跳转到一个界面
response.setStatus(302);
                response.setHeader("Location", "/Day0602/Test-login/success.html");

再读秒,调到首页
<meta http-equiv="Refresh" content="5;/Day0602/Test-login" />
<script type="text/javascript">
        var time = 5;
        window.onload = function() {
                setInterval('timechange()', 1000);
        }

        function timechange() {
                time--;
                document.getElementById("s1").innerHTML = time;
        }
<body>
        <h1>登录成功</h1>
        <h3>
                页面将在<span id="s1">5</span>秒回跳转
        </h3
</body>
四:记录成功登陆人数
首先要了解ServletContext的用法;
在web.xml中设置 <load-on-startup>3</load-on-startup>
在Servlet中重写
@Override
        public void init() throws ServletException {
                int count = 0;
                this.getServletContext().setAttribute("count", count);
        }
.........
if (existUser == null) {
                                response.getWriter().println("用户名或密码错误");
                        } else {
                                int count = (int) this.getServletContext()
                                                .getAttribute("count");
                                count++;
                                this.getServletContext().setAttribute("count", count);

                                response.getWriter().println("登录成功");
                                response.getWriter().println("5秒钟后跳转");
                                response.setHeader("Refresh", "5;url=/Day0602/countDemo1");


在跳转页面countDemo1中在页面上打印:
int count = (int)this.getServletContext().getAttribute("count");
        response.getWriter().println("你是第"+count+"位登录成功得人");
回复 使用道具 举报
王清松

生命周期
    创建
        Servlet第一次被访问时,TomCat帮忙完成Servlet实例的创建
        创建时会调用方法void init(ServletConfig config)  
    接收请求
        任何一次请求,服务器都会创建一个新的线程调用方法
void service(ServletRequest req, ServletResponse res)  
    销毁
        服务器关闭时或项目从服务器移除时销毁
        销毁时会调用方法void destroy()  


相关配置
    启动时创建Servlet
        Servlet默认在第一次被访问时创建实例,可能会使第一位用户等待一段时间,所以可以在服务器启动时创建
        1.找到web.xml配置文件
2.找到<Servlet></Servlet>标签
3.添加<load-on-startup>2</load-on-startup>标签(数字越小,创建优先级越高)
        底层实现
            1.通过反射,用Class xxx=Class.Forname(xxx)拿到字节码文件
2.xxx.newInstance()动态创建实例(调用无参构造,如果该类没有无参构造则抛出异常)
    url-pattern配置方式
        完全路径匹配
            以  /  开始
            /MyWeb/fathersday
        目录匹配
            以  /  开始,以  *  结束
            /MyWeb/*
            /*
        扩展名匹配
            不能以  /  开始,以  *  开始
            *.action
            *.do
        优先级:完全路径匹配>目录匹配>扩展名匹配
    路径
        相对路径
        绝对路径
            以/开头
            第一个/默认代表根路径,即项目路径(MyWeb)

将编写的这个servlet配置到服务器中
    配置web.xml文件
    <!-- 配置Servlet -->
  <servlet>
      <!-- Servlet名称 -->
      <servlet-name>Test</servlet-name>
      <!-- Servlet全路径 -->
      <servlet-class>com.father.ServletDemo01</servlet-class>
  </servlet>
  
  <!-- Servlet映射-->
  <servlet-mapping>
      <servlet-name>Test</servlet-name>
      <!-- Servlet访问路径 -->
      <url-pattern>/Test</url-pattern>
  </servlet-mapping>
    在网页中访问localhost:(端口号)/(Web项目名称)/Test即可访问类com.father.ServletDemo01,并执行里面得Service方法


GenericServlet类
(通用servlet)
    ServletConfig getServletConfig()
          Returns this servlet's ServletConfig object.
    ServletContext getServletContext()
          Returns a reference to the ServletContext in which this servlet is running.
    HttpServlet类
(Http协议使用的servlet)
        void doGet(HttpServletRequest req, HttpServletResponse resp)——处理HTTP的GET请求
        void doPost(HttpServletRequest req, HttpServletResponse resp) ——处理HTTP的POST请求


ServletConfig对象
    用于获得Servlet的配置信息
    String getInitParameter(String name)
          Returns a String containing the value of the named initialization parameter, or null if the parameter does not exist. 获得servlet初始化参数
    Enumeration getInitParameterNames()
          Returns the names of the servlet's initialization parameters as an Enumeration of String objects, or an empty Enumeration if the servlet has no initialization parameters. 获得servlet所有初始化参数名称
    String getServletName()
          Returns the name of this servlet instance.


ServletContext对象
    作用
        获得全局初始化参数
        获得文件MIME的类型
        作为域对象存取数据
        用来读取web项目下的文件
    ServletContext对象作为域对象存取数据
        作用范围:整个Web工程
        创建,Tomcat为每个web项目创建一个单独ServletContext对象
        销毁,服务器关闭或者项目移除时


回复 使用道具 举报
叶凌青
Servlet的概述
就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.
独立编写一个Servlet:
Servlet的作用:用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
编写一个类 implements  Servlet接口.
将编写的这个类配置到服务器中.
Servlet的关系
Servlet        :接口(Implementing Classes:
FacesServlet, GenericServlet, HttpServlet

        |
        |
GenericServlet:通用的Servlet(Implemented Interfaces:
java.io.Serializable, Servlet, ServletConfig

        |
        |
HttpServlet(Implemented Interfaces:
java.io.Serializable, Servlet, ServletConfig

编写一个类继承HttpServlet,重写doGet和doPost方法.
配置
Servlet的生命周期
生命周期:就是一个对象从创建到销毁的过程.
Servlet生命周期:Servlet从创建到销毁的过程.
何时创建:用户第一次访问Servlet创建Servlet的实例
何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
描述概述:用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线
程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或
者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.
回复 使用道具 举报
邵倩



Servlet  接口
     |
GenericServlet :
     |
HttpServlet : 编写一个类 继承httpservlet,重写doGet和doPost,配置

案例 登录  :在登录页面输入账户密码,在后台拿到数据,在数据库中查询用户名密码是否匹配 若匹配则登录成功

实现步骤:
在数据库中创建user表 有用户名密码等字段
创建 user 实体类     属性与表中字段一一对应
导包   c3p0   mysql驱动包  DBUTILS   不用build path
引入login的页面
创建  UserServlet(接收数据  把数据封装到实体类  创建UserService对象 调用userService的login(User user)方法 ,根据login方法的返回值来提示是否登录成功),  
         UserService(login(User user)方法: 创建UserDao对象 调用userDao的login(User user)方法) ,
         UserDao(login(User user)方法: 创建QueryRunner对象  编写查询的sql语句 调用queryRunner的query()方法 )   

Servlet生命周期
用户第一次访问servlet的时候,服务器创建一个servlet实例,那么servlet中init方法就会执行,
每次请求服务器都会创建一个新的线程访问servlet中的service方法,
在service方法内部根据请求方式的不同,调用doxxx的方法.
当servlet中服务器中移除掉,或者关闭服务器,servlet的实例就会被销毁,那么destroy方法就会执行.

response中设置响应头:
setHeader(String name,String value)  --- 一个key对应一个value的响应头

使用JS控制读秒效果
<script type="text/javascript">
var time = 5;
window.onload = function(){
  setInterval('changeTime()',1000);
}

function changeTime(){
  time--;
  document.getElementById("s1").innerHTML = time;
}
</script>

servletContext是一个域对象
作用范围:整个web工程
创建:服务器启动的时候 tomcat服务器为每个web项目创建一个单独servletContext对象
销毁:服务器关闭时 或者项目从服务器中移除的时候

回复 使用道具 举报
凌辉:
生命周期:就是一个对象从创建到销毁的过程.
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>  --- 传入正整数,整数越小,被创建的优先级就越高.
url-pattern配置方式共有三种:
1.完全路径匹配        :以 / 开始                                例如:        /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目录匹配                :以 / 开始 需要以 * 结束.        例如: /* ,/aaa/* ,/aaa/bbb/*
3.扩展名匹配                :不能以 / 开始 以 * 开始的. 例如: *.do , *.action
***** 错误的写法        : /*.do
回复 使用道具 举报
Do1 中级黑马 2018-6-4 22:12:45
46#
本帖最后由 Do1 于 2019-11-23 00:36 编辑



Servlet是一个单例工具,里面主要用到的是request  response 提取响应  这两个东西里面包装好了线程 网络 以及IO流 挺好用的
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马