首页 > 其他分享 >Servlet—环境,生命周期,session

Servlet—环境,生命周期,session

时间:2022-11-08 16:33:40浏览次数:50  
标签:生命周期 name void request session LX03 Servlet

Servlet简介

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。 最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

Eclipse JSP/Servlet 环境搭建:

Tomcat下载网址:http://tomcat.apache.org/download-70.cgi 解压文件夹如下:
  • bin:二进制执行文件。里面最常用的文件是startup.bat,如果是 Linux 或 Mac 系统启动文件为 startup.sh。
  • conf:配置目录。里面最核心的文件是server.xml。可以在里面改端口号等。默认端口号是8080,也就是说,此端口号不能被其他应用程序占用。
  • lib:库文件。tomcat运行时需要的jar包所在的目录
  • logs:日志
  • temp:临时产生的文件,即缓存
  • webapps:web的应用程序。web应用放置到此目录下浏览器可以直接访问
  • work:编译以后的class文件。
然后点击startup.bat启动Tomcat,如下图

接着我们在浏览器中输入 http://localhost:8080/,如果弹出如下界面,表示tomcat安装成功并且启动起来了:

在Eclipse中window然后点击preferences然后选择server的RunTime Environment中的add添加刚才下载的Tomcat

写相关servlet类

1.首先,配置Servlet要加入Servlet的api,将Tomcat全加进去可以 点击Add Library选择你的Tomcat文件的位置就可以 2.然后创建一个类继承HttpServlet,如下列代码所示extends HttpServlet
package com.demo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class D extends HttpServlet{    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
           //respon的getWriter方法服务端回应客户端信息
        response.getWriter().write("66");
    }
}
配置映射文件(创建Web项目的时候一定要创建Web.xml)映射文件就在web.xml里面配置例如我的类名是D所以我的web.xml配置如下代码所示
<servlet>
      <servlet-name>D</servlet-name>
      <servlet-class>com.hzj.D</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>D</servlet-name>
      <url-pattern>/D</url-pattern>
  </servlet-mapping>
以上的代码意思就是一启动项目,就会启动Tomcat服务器,然后会根据映射文件来访问对应的Servlet,然后测试一下看能不能输出,运行可以输出 3.request的getParameter方法接受客户端传来的数据信息,如下列代码获取传来的name和age
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name=request.getParameter("name");
        String age=request.getParameter("age");
        response.getWriter().write("nihao");
        System.out.println(name+" "+age);
    }
}

然后控制台可以看到djm 21

Servlet的url配置方式,主要有以下方式

精确路径 :/abc,如LX03精确路径
<servlet>
      <servlet-name>LX03</servlet-name>
      <servlet-class>com.demo.LX03</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>LX03</servlet-name>
      <url-pattern>/LX03</url-pattern>
  </servlet-mapping>
输出LX03 以do结尾的:*.do,以do结尾的去找LX04
 <servlet>
      <servlet-name>LX04</servlet-name>
      <servlet-class>com.demo.LX04</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>LX04</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
输出LX04 如果没有就是找这个所有的匹配的: /
 <servlet>
      <servlet-name>D</servlet-name>
      <servlet-class>com.demo.D</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>D</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
输出D

Servlet从创建到销毁所经历的方法,Servlet的生命周期

void init(ServletConfig) 
void service(ServletRequest,ServletResponse)
void destory()
init方法是单例只执行一次,并且只有程序执行的时候才会被调用,Tomcat启动不会调用 什么时候被调用: init()方法只会被调用一次,是在第一次访问(or 创建) Servlet 的时候被调用,在后续的每次请求时都不会再调用 init() 方法了。 作用: init()方法用于 Servlet 的初始化,可以简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
public LX03() {
        super();
        System.out.println("---LX03---");
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(this);
}
 Servlet 调用inti方法的时间
     -- 可以是用户第一次访问该 Servlet 时——web.xml 文件的<load-on-startup>标签
     不配置或者配置为小于零的数;
     -- 也可以指定 Servlet 在服务器第一次启动时调用 init 方法——web.xml 文件
     的<load-on-startup>标签配置为大于等于0的数。

 当用户调用一个 Servlet时,会创建一个 Servlet 实例,
 每个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或者 doPost 方法。
只输出一次---Lx03---多次输出一样的内存地址,只执行一次,如下图

web.xml编码,设为utf-8

<servlet>
      <servlet-name>LX03</servlet-name>
      <servlet-class>com.demo.LX03</servlet-class>
      <init-param>
          <param-name>encode</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>LX03</servlet-name>
      <url-pattern>/LX03</url-pattern>
  </servlet-mapping>
写入以下代码获取
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletConfig config = this.getServletConfig();
        String encode = config.getInitParameter("encode");
        System.out.println(encode);    
  }
输出UTF-8

load-on-startup,如下图LX03的为3,LX04的为0

 <servlet>
      <servlet-name>LX03</servlet-name>
      <servlet-class>com.demo.LX03</servlet-class>
      <init-param>
          <param-name>encode</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
      <load-on-startup>3</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>LX03</servlet-name>
      <url-pattern>/LX03</url-pattern>
  </servlet-mapping>
  
  <servlet>
      <servlet-name>LX04</servlet-name>
      <servlet-class>com.demo.LX04</servlet-class>
      <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>LX04</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
当运行LX03的时候,会先输出LX04 如下图输出,所以load-on-startup值越小,优先级越高,默认是-1

Session会话,只要浏览器不关闭就是一次会话,不管开多少个窗口

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //设置session名字为djm
        HttpSession session = request.getSession();
        session.setAttribute("name","djm");
        
    }
 //另一个servlet
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //然后获取上个servlet设置的session
        HttpSession session = request.getSession();
        Object object = session.getAttribute("name");
        System.out.println(object);
        
    }
首先启动LX03 地址栏在输入LX04,这时候就可以拿到LX03的Session

 

前台获取数据session

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");    
        HttpSession session = request.getSession();
        session.setAttribute("name",name);    
    }
  //另一个servlet
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //然后获取上个servlet设置的session
        HttpSession session = request.getSession();
        Object object = session.getAttribute("name");
        System.out.println(object);
        
    }
地址栏输入HHH获取HHH 这时候换为LX04,控制台会输出HHH,并且可以获取多次,缓存的原理

 

注意:session默认为true,true的时候,有的话返回,没有session创建新的session,false的话,有的话返回,没有返回null

application获取信息(和session差不多的方式)

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name=request.getParameter("name");
        ServletContext application = request.getServletContext();
        application.setAttribute("name",name);    
    }
  //另一个servlet
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //然后获取上个servlet设置的application
        ServletContext application = request.getServletContext();
        Object object = application.getAttribute("name");
        System.out.println(object);
        
    }
设置名字 访问

 

request,注意request在另一个servlet取不到,这个是可以自己传,自己收到

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name=request.getParameter("name");
        request.setAttribute("name",name);
        Object object = request.getAttribute("name");
        System.out.println(object);
    }
如下图

 

 

标签:生命周期,name,void,request,session,LX03,Servlet
From: https://www.cnblogs.com/YHSDDJM/p/16870148.html

相关文章

  • 全生命周期服务加持,鸿蒙世界构建按下加速键
    11月4日-6日,第四届华为开发者大会2022(Together)在东莞松山湖举行。正如其主题“创新照见未来”,HDC2022成为万物互联时代创新的展示场,五大场景的创新体验展现出HarmonyOS所......
  • Java中线程的生命周期
    Java中线程的生命周期1介绍本篇文章我们讨论下Java中的一个非常核心的概念:线程的生命周期。在Java编程语言中,多线程编程非常重要。线程从创建到销毁是有生命周期的,在线程的......
  • day12-Servlet02
    Servlet026.GET和POST请求的分发处理开发Servlet,通常编写doGet,doPost方法。来对表单的get和post请求进行分发处理例子在web文件夹下面创建一个html页面,用于提交表......
  • jsp传入servlet数据
    面对老师的19级期末,要用到jsp传入servlet的数据传输,借鉴了其他人的代码,以下是我的程序jsp界面:<%request.getSession().setAttribute("data","怎么写");%>servlet界面:St......
  • Springboot 用session监听器统计在线用户数量
    今天给大家分享这个吧。利用Springboot中的session监听器去实现统计在线用户数量的需求(当然其实用shiro或者security是框架自己带有会话管理的,用起来更加方便)。但是,接下来......
  • React生命周期深度完全解读
    在React中,对于每一次由状态改变导致页面视图的改变,都会经历两个阶段:render阶段、commit阶段。只有class组件才有生命周期,因为class组件会创建对应的实例,而函数组......
  • 6.session对话
              标识符:Stringid=session.getId();System.out.println(id);获得的标识符:1CBE69044AC9EF70C918F006D4F4F069  域对象的作用:保存......
  • Servlet技术
    Servlet是JavaWed三大组件之一,分别是Servlet程序,Filter过滤器,Listener监听器Servlet可以接受客户端发送过来的请求,并响应数据给客户端第一个Servlet程序<servlet-m......
  • 什么是ServletContext
    1.ServletContext是一个接口,它表示Servlet上下文对象2.一个web工程,只有一个ServletContext对象实例3.ServletContext对象是一个域对象什么是域对象?域对象,是可以象Map一......
  • Servlet生命周期
    1.执行Servlet构造方法2.执行init初始化方法第一、二步是在第一次访问的时候创建Servlet程序会调用3.执行service方法第三步每次访问都会调用4.执行destroy销毁方法......