Servlet详解(一)【24/01/15】

目录

一 HTTP协议

二 Servlet

1.什么是servlet?

2.servlet实现

3.Servlet注意事项

4.Servlet生命周期

5.ServletConfig:servlet配置对象

6.ServletContext:servlet上下文对象

7.Session和Cookie

1.什么是会话

2.什么是Cookie

3.为什么要使用Session和Cookie

4.会话的原理

5.cookie和session区别

三 HttpServletResponse


一 HTTP协议

        http协议是基于tcp协议的应用传输层 , 是一种通信协议 。 简单来说就是客户端和服务端之间传输数据的一种规则。

javaweb三大核心组件:

​    1.servlet  控制器

​    2.filter  过滤器

​    3.Listener  监听器

二 Servlet
1.什么是servlet?

        servlet是处理前端请求并且做出程序的前端小程序。

2.servlet实现

方法一:

1.创建一个类 , 实现Servlet接口

2.在web.xml文件中 , 配置servlet

<servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.feisi.controller.HelloServlet(servlet类的全限定名称)</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>

方法二:

        上面那种实现接口的方式需要实现的方法太多 , 而tomcat帮我们写了一个类 , 它实现了不常用的方法 , 我们只需要实现service方法 , 所以我们第二种方式就是:继承GenericServlet类

public class myController_2 extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        
    }
}

方法三(我们用的方法):继承HttpServlet

        它起始就是在方法二的基础上 , 把service方法继续进行了划分 , 当请求方式get的时候 , 调用doget方法 , 当请求方式是post的时候 , 调用封装好的dopost方法 , 而且也不需要我们自己必须覆盖 , 而是可以按照需求重写某一个方法。

public class myController_3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
3.Servlet注意事项

        1.servlet是单例的 , 由服务器创建

        2.servlet是线程不安全的 , 所以不能够在servlet中创建全局性的无状态变量 , 只能创建有状态变量。

4.Servlet生命周期

5.ServletConfig:servlet配置对象
6.ServletContext:servlet上下文对象

        注意:一个应用程序只有一个ServletContext

创建对象:

// ServletContext对象
   ServletContext servletContext = this.getServletConfig().getServletContext() ;

方法:

        1.String getContextPath(): 获取上下文路径,即项目名称

@Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws        ServletException, IOException {
        System.out.println("servlet被调用");
        String contextPath = servletContext.getContextPath();
        System.out.println("路径:"+contextPath);
    }

        2.String MimeType(String name):获取某个资源MIME类型格式

        3.String getRealPath(String path):获取资源的真实路径

        4.ClassLoader getClassLoader():获取类加载器

        5.setAttribute(String key , Object value): 在上下文对象中设置一个key--value键值对信息

        6.getAttribute(String key):获取上下文对象key对应的value信息

        7.removeAttribute(String key ) :移除指定key的信息

7.Session和Cookie
1.什么是会话

        第一次请求该项目资源->退出或关闭浏览器即是完成一次会话

2.什么是Cookie

        cookie是当你浏览某个网站的时候,由web服务器存储在你的机器硬盘上的一个小的文本文件。它其中记录了你的用户名、密码、浏览的网页、停留的时间等等信息。当你再次来到这个网站时,web服务器会先看看有没有它上次留下来的cookie。如果有的话,会读取cookie中的内容,来判断使用者,并送出相应的网页内容,比如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。

3.为什么要使用Session和Cookie

        HTTP最大的特点是无连接无状态,使用Cookie和Session的技术就是为了解决这个问题,简单来说,就是让浏览器在一段时间内认识你

4.会话的原理

        1.当第一次访问项目资源时 , 浏览器会创建一个会话的id , 保存在cookie中

        2.当第一次请求服务器 , session会随着cookie一次发给服务器

        3.服务器会查询是否保存该会话对应的id的对象 , 如果没有则创建session对象 , 保存在服务器中 ,如果有则说明已经存在了则不创建

        4.处理完成后 , 会将session的id保存cookie中 , 然后将session的id待会并且保存在浏览器中

5.cookie和session区别

        1.cookie中保存String类型 , session中保存Object类型

        2.cookie保存在浏览器中 , session保存在服务器中

        3.cookie保存数据是不安全的 , session保存数据是安全的

        4.cookie除非主动清除浏览器数据 , 否则一致存在;而session只要关闭浏览器就会自动清除

Session一些常用方法:


@WebServlet("/Session_Servlet")
public class Session_Servlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入");
//        会话
        HttpSession session = req.getSession() ;

//        保存当前会话
        session.setAttribute("user" , "当前登录的用户对象");
//        获取当前会话对象
        session.getAttribute("user") ;
//        清除当前会话对象
        session.removeAttribute("user");
//        会话失效
        session.invalidate();
//        设置会话失效的最大不活跃状态事件(就是你长时间停留在某个页面不操作)
        session.setMaxInactiveInterval(1000);

        /*
        可以用于判断当前用户是否登录 , 我们通过用户名去获取会话 , 如果这个会话等于null
        说明没有建立会话 , 即说明改用户没有登录。(因为我们只有在登录成功后,才保存会话内容(用户姓名等))
         */
    }
}
三 HttpServletResponse

1.常用方法

--void addCokie(Cokie cokie):添加cokie数据

--void addHeader:添加响应头

--void addDateHeader:添加日期类型的响应头

--OutputStream getOutputStream:获取io字节输出流

2.解决编码乱码问题

resp.setContentType("text/html;charset=utf-8")

3.注意

JavaWeb下的WEB-INF下的文件是不能被直接访问的 , 所以放在它下面的文件安全性是很高的。

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值