首页 > 其他分享 >前端菜鸟玩Servlet

前端菜鸟玩Servlet

时间:2022-11-16 10:44:42浏览次数:30  
标签:请求 Servlet 菜鸟 前端 req ServletContext servlet resp

简介

Servlet(Server Applet) 。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,理解Servlet为后者。

所以说servlet就是实现了Servlet接口的类!用来响应HTTP请求并处理返回

生命周期

同样的在一个servlet的创建到销毁同样存在钩子函数

  1.  Servlet 通过调用 init () 方法进行初始化。
  2.  Servlet 调用 service() 方法来处理客户端的请求。
  3.  Servlet 通过调用 destroy() 方法终止(结束)。

init()

整个生命周期只执行一次,,init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。可以做一些例如建立数据连接的操作

service()

在service方法会调用doGet、doPost、doPut、doDelete等方法,所以我基本只要根据客户端的请求方式重写doGet、doPost方法,因为这get,post两种请求方式最多。

destroy()

整个生命周期只执行一次,可以做一些例如关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘以及其他类似的清理活动。

 

注解配置方式

在servlet3开始往后无需想之前版本使用web.xml中的配置去映射到某个servlet才能使用,可以直接使用注解WebServlet实现,写在方法前

//@WebServlet("/login")
@WebServlet(name = "login", value = "/login" loadOnStartup="1")
public class login extends HttpServlet {
    /*get请求时返回登录页面*/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");   //执行相应数据格式为html
           ......
               
}

value是指访问地址,loadOnStartup是指servlet在加载时的顺序,理解成优先级

 

HelloServlet

package com.hhtc.javaweb;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet { //最重要的是继承HTTPServlet抽象类,该类最终继承自Servlet接口
    private String message;

    public void init() {
        message = "Hello World!";
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>init()初始化的数据message为:" + message + "</h1>");
        out.println("</body></html>");
    }

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
    
    public void destroy() {
        PrintWriter out = response.getWriter();
        out.println("destroy()执行");
    }
}

ServletContext对象

该对象是全局存储信息的对象,所有的客户端都可以访问这个共有的对象,

WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用,并且它被所有客户端共享。

由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。公共聊天室就会用到它。

当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁。

共享数据

//某个servlet设置共享数据       
        ServletContext context = this.getServletContext();//获取上下文
        String username = "lsp";
        context.setAttribute("username",username);

//另一个servlet获取共享数据
        final ServletContext context = this.getServletContext();
        String username = (String)context.getAttribute("username");

请求转发

一般请求转发都是使用HTTPServletRequest实现,虽然该ServletContent上下文对象也可实现

this.getServletContext().getRequestDispatcher("/login").forward(request, response);

 

因为存在ServletContext中的数据在服务器中会长时间,这样就会占用很多内存,因此在使用ServletContext时,建议不要往里面添加过大的数据!

 

HttpServletResponse

HttpServletResponse和下面的HttpServletRequest都是在调用doGet,doPost方法时传入的两个对象参数

HttpServletResponse是第二个参数,用于设置HTTP响应

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

请求重定向:resp.sendRedirect("/login/index2");

在服务器收到请求后,一般逻辑都是处理好数据之后对其响应返回数据,但不,可以直接请这个请求处理交由另一个servlet去处理,再去响应。

还有很多方法,例如void setCharacterEncoding(String charset),用于设置响应的编码类型,等等很多方法都是对HTTP响应的设置

 

 

HttpServletRequest

HttpServletRequest是doPost或doGet方法的第一个参数,用于设置HTTP请求

在servlet程序中可以通过Cookie[] getCookies()返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。

读取请求参数

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form action="${pageContext.request.contextPath}/login" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/> 
    <input type="submit" value="提交">
</form>
</body>
</html>

从上边前端页面输入的数据要在servlet中拿到数据

  • req.getRequestDispatcher("/index.jsp").forward(req,resp);  请求转发,也就是返回哪个jsp页面
  • req.getParameter("name")  获取前端传过来的参数,可以是get方式也可以是post方式传过来的,反正通过k获取

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");//设置请求响应编码
        resp.setCharacterEncoding("utf-8");
        //获取请求参数
        final String username = req.getParameter("username");
        final String password = req.getParameter("password"); 
        System.out.println("用户名:" + username);
        System.out.println("密码:" + password); 

        //请求转发
        req.getRequestDispatcher("/success.jsp").forward(req,resp);
    }
}

 

参考:https://www.cnblogs.com/wyzstudy/p/15711382.html

标签:请求,Servlet,菜鸟,前端,req,ServletContext,servlet,resp
From: https://www.cnblogs.com/ruyan-lx/p/16894727.html

相关文章

  • Servlet::过滤器监听器拦截器
    过滤器(filer)概念客户端对应发出某种请求,将该请求拦截不给予回应,这就是为什么在xml配置中,filer要写到配置的最前面的原因经过实操,看出过滤器的作用,大致方向是,检查核对......
  • 前端常见的Vue面试题目汇总
    请说一下响应式数据的原理默认Vue在初始化数据时,会给data中的属性使用Object.defineProperty重新定义所有属性,当页面到对应属性时,会进行依赖收集(收集当前组件中的watcher)......
  • 前端几何计算GIS分析算法库介绍及优缺点分析
    前言在WebGIS开发中,经常要用到一些常用的几何计算,GIS空间分析等功能,如点到线的距离、点与多边形的关系、计算面积、缓冲区分析、最短路径分析等,这样灵活性会更好;那怎么......
  • 后端程序员必会的前端知识-01:html、css
    第一章.HTML与CSSHTML是什么:即HyperTextMarkuplanguage超文本标记语言,咱们熟知的网页就是用它编写的,HTML的作用是定义网页的内容和结构。HyperText是指用超链......
  • 后端程序员必会的前端知识-02:JavaScript
    第二章.Javascript它是一种脚本语言,可以用来更改页面内容,控制多媒体,制作图像、动画等等例子修改页面内容js代码位置<script> //js代码</script>引入js脚......
  • Vue3解决前端跨域问题
    在vue.config.js里添加代理备注:例如vue想请求不在同一台服务器上的localhost:8080服务器的接口,在下面proxy里的target里写上要访问的服务器的前缀,然后写一个别名'/project......
  • Servlet
    1.Servlet[1]Servlet简介Server+let​意为:运行在服务器端的小程序。​Servlet实际上就是一个接口。​狭义上的Servlet,指的就是Servlet接......
  • 前端如何通过页面点击,来打开其他应用。类似百度网盘一样。
    可以通过a标签的href,来打开其他应用。<ahref="bilipc:">打开哔哩哔哩</a> 一般在注册表中,软件会预留在注册表中一种信息,用于唤出该软件。比如哔哩哔哩  如何......
  • 【Javaweb】六-servlet层
    AdminServlet.jap@WebServlet("/AdminServlet")publicclassAdminServletextendsHttpServlet{@Overrideprotectedvoidservice(HttpServletRequestrequ......
  • day31 1 tomcat介绍与创建web项目 & 2 继承HttpServlet类、配置webxml全局配置文件 &
    ServletJavaServlet是运行在Web服务器或应用服务器上的程序,作为客户端(Web浏览器或其他HTTP客户端)和服务端(HTTP服务器上的数据库或应用程序)之间的中间层。使用Servlet可......