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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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


请同学们按照如上要求,总结今日所学。


52 个回复

正序浏览
Do1 中级黑马 2018-6-4 22:12:45
46#
本帖最后由 Do1 于 2019-11-23 00:36 编辑



Servlet是一个单例工具,里面主要用到的是request  response 提取响应  这两个东西里面包装好了线程 网络 以及IO流 挺好用的
回复 使用道具 举报
凌辉:
生命周期:就是一个对象从创建到销毁的过程.
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
回复 使用道具 举报
邵倩



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的概述
就是一个运行在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第一次被访问时,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中 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
快速配置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  设置响应头
回复 使用道具 举报
本帖最后由 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登录页面的操作,设置时间跳转和记录登录成功次数的案例;
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");
回复 使用道具 举报
林恒山
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 运行在服务端的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的使用,从前台接收数据,处理数据,并将结果响应给前台
通过设置时间跳转页面案例,掌握如何设置响应头信息
通过记录网站登录成功案例,掌握一个重要对象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进行存值当登录成功就取值 然后计数变量自增
    在接着存值. 这个值就目前止登录成功的人数。

回复 使用道具 举报
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的内容。今天学习的知识可以通过今天的案例来一步步理解和掌握。今天的案例可以归总为一个,就是用户登录案例。在这个案例中,最先的一步是用户从浏览器访问服务器的一个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,并添加进域对象,当判断登录成功后,在调用方法获得域对象并得到该变量,自增,再赋给自身。并跳转至新的页面,在该页面在调用方法获得域对象再获得该变量,输出其值,这个值就是到目前为止登录成功的人数。
回复 使用道具 举报
吴俊斌

登入案例:
     前期导包 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它定义一个变量用来记录登入的次数.再登入成功里跳转到
计数的页面,连接一次就变量++.输出变量就好了.

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

回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马