Javaweb关于servlet

ops/2024/11/27 18:14:49/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

文章目录

  • servlet
    • 1.servlet概述
    • 2.JSP与Servlet
    • 3.Servlet API
    • 4.Servlet生命周期
    • 5.部署运行Servlet

servlet_2">servlet

servlet_4">1.servlet概述

Server+Applet,是一种服务器端的Java应用程序,只有当一个服务器端的程序使用了Servlet API的时候,这个服务端的程序才能称之为Servlet。

Servlet:

  • 本身不做任何业务处理
  • 只是接收请求并决定调用哪个JavaBean去处理请求
  • 确定用哪个页面来显示处理返回的数据

Servlet 任务:

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

2.JSP与Servlet

在这里插入图片描述

联系:

  • JSP文件在容器中会转换成Servlet执行。
  • JSP是对Servlet的一种高级封装,本质还是Servlet。

区别:

在这里插入图片描述

3.Servlet API

主要Servlet API介绍:

  • javax.servlet.Servlet接口
    • 所有Java Servlet的基础接口类,规定了必须由Servlet具体类实现的方法集
  • javax.servlet.GenericServlet类
    • 是Servlet的通用版本,是一种与协议无关的Servlet
  • javax.servlet.http.HttpServlet类
    • 在GenericServlet基础上扩展的基于Http协议的Servlet

如何创建Servlet:

  1. 实现Servlet接口

    public class FirstServlet implements Servlet{public FirstServlet() {System.out.println("FirstServlet 构造器。。。。");}@Overridepublic void destroy() {System.out.println("destory.....删除方法");}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic String getServletInfo() {return null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {System.out.println("FirstServlet init......初始化方法init");}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {}
    }
    
  2. 继承GenericServlet类

    public class SecondServlet extends GenericServlet{public SecondServlet() {}@Overridepublic void init() throws ServletException {System.out.println("SecondServlet init ....");}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {}
    }
    
  3. 继承HttpServlet类

public class ThreeServlet extends HttpServlet{public ThreeServlet() {System.out.println("Threeservlet constructor..");}@Overridepublic void init() throws ServletException {System.out.println("ThreeServlet init...");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}@Overridepublic void destroy() {System.out.println("ThreeServlet destory...");System.out.println("");}
}

在web.xml中配置:

xml"><servlet><servlet-name>first</servlet-name><servlet-class>servlet.FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>first</servlet-name><url-pattern>/first.do</url-pattern></servlet-mapping>
<!--第二种方法的配置信息-->
<servlet><servlet-name>Second</servlet-name><servlet-class>servlet.SecondServlet</servlet-class></servlet><servlet-mapping><servlet-name>Second</servlet-name><url-pattern>/second.do</url-pattern></servlet-mapping>

4.Servlet生命周期

  1. Servlet 初始化后调用 init () 方法。
  2. Servlet 调用 service() 方法来处理客户端的请求。
  3. Servlet 销毁前调用 destroy() 方法。
  4. Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
生命周期谁来做何时做
实例化Servlet 容器当Servlet容器启动或者容器检测到客户端请求时
初始化Servlet 容器实例化后,容器调用Servlet的init()初始化对象
处理请求Servlet 容器得到客户端请求并做出处理时
销毁Servlet 容器当程序中的Servlet对象不再使用的时候,或者Web服务器停止运行的时候

init():

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

public void init() throws ServletException {// 初始化代码...
}

service():

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException{
}

doGet() :

GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 method的 HTML 表单,它由 doGet() 方法处理。

public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {// Servlet 代码
}

doPost():

POST 请求来自于一个特别指定了 method为 POST 的 HTML 表单,它由 doPost() 方法处理。

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {// Servlet 代码
}

destroy():

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

  public void destroy() {// 终止化代码...}

5.部署运行Servlet

部署:

xml"><!--    配置Servlet--><servlet><servlet-name>UserLoginServlet</servlet-name><servlet-class>com.hz.servlet.UserLoginServlet</servlet-class><!-- 配置参数编码 --><init-param><param-name>charset</param-name><param-value>utf-8</param-value></init-param><!-- 启动tomcat就加载Servlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>UserLoginServlet</servlet-name><url-pattern>/userLoginServlet</url-pattern></servlet-mapping>
或
@WebServlet(name = "UserLoginServlet", value = "/userLoginServlet",initParams = {@WebInitParam(name = "charencoding",value = "utf-8")})
<!-- java中获取 -->
private  String bm = "";
@Override
public void init(ServletConfig config) throws ServletException {bm = config.getServletContext().getInitParameter("charencoding");
}
<!-- 注意:<servlet-mapping>与<servlet>中的<servlet-name>必须一致-->
<!-- @WebServlet("/userLoginServlet")//注解等同于在web.xml中配置 -->
<!--  配置公共参数  --><context-param><param-name>charencoding</param-name><param-value>utf-8</param-value></context-param>

servlet中获得内置对象:

//servlet获取pageContext
PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this,request,response,null,true,8192,true);
//获得out对象
PrintWriter out = response.getWriter();
out.print("<h1>这是out对象</h1>");
//获得session对象
HttpSession session = request.getSession();
//获得application对象
ServletContext application = this.getServletContext();

运行:

@WebServlet(name = "UserLoginServlet", value = "/userLoginServlet")
public class UserLoginServlet extends HttpServlet {private  String bm = "";@Overridepublic void init(ServletConfig config) throws ServletException {bm = config.getServletContext().getInitParameter("charencoding");}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.编码request.setCharacterEncoding(bm);//2.获取用户值String uname = request.getParameter("uname");String upwd = request.getParameter("upwd");String remember = request.getParameter("remember");//3.调用方法UserDao userDao = new UserDaoImpl();User user = userDao.loginUser(uname,upwd);HttpSession session = request.getSession();//4.跳转页面if (user !=null){session.setAttribute("user",user);session.setMaxInactiveInterval(60);if (remember != null){String sName = URLEncoder.encode(uname,"utf-8");Cookie cookie = new Cookie("uname",sName);Cookie cookie1 = new Cookie("upwd",upwd);cookie.setMaxAge(60);cookie1.setMaxAge(60);cookie.setPath("/");cookie1.setPath("/");response.addCookie(cookie);response.addCookie(cookie1);}response.sendRedirect("/indexServlet");}else {response.sendRedirect("/login.jsp");}}
}

http://www.ppmy.cn/ops/137134.html

相关文章

Rust学习(十):计算机科学简述

Rust学习&#xff08;十&#xff09;&#xff1a;计算机科学简述 在计算机技术这片广袤的领域中&#xff0c;深入理解其内在机制与逻辑需要付出诸多努力。 学习基础知识是构建计算机技术能力大厦的基石&#xff0c;而这一过程往往漫长而艰辛。只有在对基础知识有了扎实的掌握…

【软考速通笔记】系统架构设计师③——信息安全技术基础知识

文章目录 一、前言二、信息安全基础知识2.1 信息安全的基本要求2.2 信息安全的范围2.3 网络安全表现2.4 安全措施包括 三、信息安全系统的组成框架3.1 技术体系&#xff1a;3.2 组织机构体系&#xff1a;3.3 管理体系 四、信息加解密技术4.1 对称密钥加密算法4.2 非对称密钥加密…

org.apache.log4j的日志记录级别和基础使用Demo

org.apache.log4j的日志记录级别和基础使用Demo&#xff0c;本次案例展示&#xff0c;使用是的maven项目&#xff0c;搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件&#xff0c;log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…

SQL 复杂查询

目录 复杂查询 一、目的和要求 二、实验内容 &#xff08;1&#xff09;查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。&#xff08;分别采用子查询和连接方式实现&#xff09; 查询出每个订单的消费者姓名及联系方式。 在…

aws rds-mysql不支持性能详情监控

Amazon RDS 数据库引擎 支持的引擎版本和区域实例类限制 Amazon RDS for MariaDB 有关适用于 RDS for MariaDB 的性能详情的版本和区域可用性的更多信息&#xff0c;请参阅支持 Amazon RDS 中 Performance Insights 的区域和数据库引擎。 以下实例类别不支持性能详情&#xf…

突破Zustand的局限性:与React ContentAPI搭配使用

Zustand在状态管理中是非常适手的工具&#xff0c;在很多场景中我们都可以用它来解决复杂问题. 但是由于Zustand的设计理念&#xff0c;它仍然有一些限制&#xff0c;在这里用官网中的小demo举一个很简单的例子&#xff1a; import { create } from zustand type CountStore …

(计算机组成原理)期末复习

第一章 计算机的基本组成&#xff1a;硬件软件&#xff08;程序&#xff09;计算机系统 软件有系统软件&#xff08;系统管理工具&#xff09;&#xff0c;应用软件 计算机硬件&#xff1a;包括主机和外设&#xff0c;主机包括CPU和内存&#xff0c;***CPU由运算器和控制器所组…

计算机网络八股整理(一)

计算机网络八股文整理 一&#xff1a;网络模型 1&#xff1a;网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型&#xff0c;它由七层组成&#xff0c;从上到下分别是&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;…