JavaWeb servlet的使用

2023-11-19

在jsp文件中没有java代码我们才算是学完啦,从EL表达式和JSTL标签,在减少在login.jsp和index.jsp中的java代码,而今天的学习是让在jsp中彻底没有java代码,原本写在doLogin.jsp做登录判断的java代码,我们不在写在jsp文件中了,而是将java代码写在java文件中,今天开始我们的新的知识啦,servlet的使用。


目录

一.servlet是什么?

二.servlet的作用

三.使用servlet接收用户发来的请求

1.实现servlet接口

2.配置路径

3.继承servlet


一.servlet是什么?

 servlet是java编写的服务器端的程序,运行在web服务器中。


二.servlet的作用

1.接收用户端发来的请求

2.调用其他java程序来处理请求

3.将处理结果,返回到服务器中


三.使用servlet接收用户发来的请求

  • 首先我们不在需要doLogin.jsp文件,在java文件下方创建一个包名为com.xxx.servlet,该下方的类为LoginSerblet。

1.实现servlet接口

实现servlet接口的话,我们需要把servlet中的方法重写,会得到五个方法。

初始化:当请求第一次进入servlet就会调用该方法。

  @Override
public void init(ServletConfig arg0) throws ServletException {
	//第一次进来:当请求第一次进入servlet就会调用该方法
	System.out.println("我初始化啦");
}
  

服务: 代码都是写在该方法中

/**
   * 服务
   */
  @Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		
	}
  

销毁:销毁的情况分为:

                            1.服务器关闭
                            2.这个类被修改啦

  @Override
	public void destroy() {
		//销毁的情况分为:1.服务器关闭
	    //           2.这个类被修改啦
	  System.out.println("我销毁啦");
		
	}

得到配置:

  /**
   * 得到配置
   */
  @Override
	public ServletConfig getServletConfig() {
		return null;
	}
  

得到信息:

 @Override
	public String getServletInfo() {
		
		return null;
	}
 
  • 实现servlet的运用:该代码是替代了原本的login.jsp文件,在该类中和doLogin.jsp的接收用户发来的请求一样。

     代码如下,代码详细讲解

package com.yjx.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.http.HttpRequest;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginServlet implements Servlet{
	
	//第一步实现servlet接口
	
	
	/**
	 * 初始化
	 */
  @Override
public void init(ServletConfig arg0) throws ServletException {
	//第一次进来:当请求第一次进入servlet就会调用该方法
	System.out.println("我初始化啦");
}
  
  
  /**
   * 服务
   */
  @Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		//代码都是写在该方法中
	   //ServletRequest:其实就是request 请求
	   //ServletResponse:就是response 响应
	   
	   //强转响应和请求,为响应和请求的子类
	  HttpServletRequest request=(HttpServletRequest)req;
	  HttpServletResponse response=(HttpServletResponse)res;
	  
	  req.setCharacterEncoding("utf-8");//防止乱码的代码
	  //先获取到传过来的数据
	  String name=req.getParameter("username");
	  String pwd=req.getParameter("pwd");
	 
	  //将数据打印在页面上,在原先jsp文件中我们直接out.print
	  //但是在该java文件中我们需要通过响应对象获取了输出对象
	   PrintWriter out=response.getWriter();
	  //out设置的变量名,可以随意设置,但是我们经常都是用out.print所有将变量名设置为out更好
	  
	     
	  //当获取到数据后,判断该用户是否登录成功
	  if("zking".equals(name)&&"zking123".equals("pwd")) {
		 out.print("登录成功");
		  
	  }else {
		  out.print("登录失败");
	  }
	}
  
     //以上步骤过后,我们需要进行配置,不然登录请求发送时不知道进入那个java文件中,所以我们要配置servlet的访问路径
     //配置路径去到web.xml文件中配置
  
  /**
   * 销毁
   */
  @Override
	public void destroy() {
		//销毁的情况分为:1.服务器关闭
	    //           2.这个类被修改啦
	  System.out.println("我销毁啦");
		
	}
  
  
  
  /**
   * 得到配置
   */
  @Override
	public ServletConfig getServletConfig() {
		return null;
	}
  
  
  /**
   * 得到信息
   */
  @Override
	public String getServletInfo() {
		
		return null;
	}
 


}

2.配置路径

我们配置路径在web.xml中配置servlet的访问路径,通过配置的路径访问,代码如下。

注:配置以后记得重启服务器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>JavaWeb20</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  

 
     <!--如果修改了这个 一定要重启服务器-->
     <!--1.配置servlet-->
     <servlet>
        <!--给它取一个名字-->
        <servlet-name>one</servlet-name>
        <!--servlet-class需要填上类的全路径-->
        <servlet-class>com.yjx.servlet.LoginServlet</servlet-class>
    </servlet>
 
   <!--2.配置servlet的访问路径-->
    <!--mapping映射-->

     <servlet-mapping>
    <!--对应的servlet的名字-->
     <servlet-name>one</servlet-name>
     <!--给它配置一个访问的路径-->
    <url-pattern>/login.do</url-pattern>
  </servlet-mapping>
</web-app>

3.继承servlet

大家可以看到实现servlet的写法会更加复杂,而我们去继承servlet会更简单,也是比较推荐大家使用继承来写。

  •  当我们继承了servlet要将doGet和doPost两个方法重写。
  • doGet方法中专门处理get请求,doPost方法中专门处理post请求。我们可以在doGet方法中调用doPost方法,这样字就不需要写两遍了,就算是get请求也很进入到doPost方法中。
  • 在这里我们不在需要像实现一样那么麻烦的去配置路径,只需要@WebServlet("/test.do") 这样一串代码,然后通过该路径访问,在该里面需要加斜杠,在表单提交时在action输入给servlet配置的路径的名字,但是去掉斜杠。

代码如下:

package com.yjx.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("all")
@WebServlet("/test.do") //直接填访问路径
public class MyServlet extends HttpServlet{
	
	//使用继承会更加简便一些
	//doGet:专门处理get请求
	//doPost:专门处理post请求
	//我们目前给大家讲过的只有表单有post请求
    //一般默认为get请求但是我们可以设置

	 @Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		  //在该方法中调用doPost方法,当进入到get请求时,直接到doPost方法中
		 doPost(req, resp);
	 }
	 
	 
	 @Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	   req.setCharacterEncoding("utf-8");
	   //获取到值
	   String name=req.getParameter("username");
	   String pwd=req.getParameter("pwd");
	   
	   resp.setCharacterEncoding("gb2312");
	   
	  PrintWriter out=resp.getWriter();
	   //进行匹配
	   if("zking".equals(name)&&"zking123".equals(pwd)) {
		  out.print("登陆成功"); 
	   }else {
		   out.print("登录失败");
	   }
	   
	}
}

login.jsp代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <!-- 这里输入给servlet配置的路径的名字 -->
     <form action="test.do">
     <p><input name="username"></p>
     <p><input name="pwd"></p>
     <button>登录</button>
     
     </form>
</body>
</html>

今天的学习就到这路啦,大家看下代码,代码中都有详细注解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb servlet的使用 的相关文章

  • HTML5 支持命名空间吗?

    我们是否可以使用新标签来扩展 HTML5 例如
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 将输入中每个单词的第一个字符设为大写

    我想知道如何在输入区域自动生成单词的第一个字符 目前我的代码是 Name
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • CSS - div 与父 div 底部对齐(内联块)

    我知道这个 html 很草率 有一些不必要的额外 div 但无论如何 我无法理解为什么 ID 为 info box right 的 div 与父 div 的底部对齐 您可以看到 文本 与下面的 jsfiddle 示例的底部 有什么想法可以让
  • 如何为 TBODY 应用垂直滚动条

    我的表中有 4 列和 5 行数据 我必须为 TBODY 应用垂直滚动条 TH 标题内容不应滚动 我对场景进行了编码 并且在我将滚动类应用于 TBODY 之前它工作正常 一旦我将滚动样式类应用于 TBODY 它就会破坏之前的对齐方式 任何人都
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • AngularJS 在指令运行之前通过 AJAX 检索数据

    我正在使用 AngularUIuiMap http angular ui github com directives map实例化谷歌地图的指令 uiMap 指令非常适合处理硬编码数据 mapOptions and myMarkers 但是
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个

随机推荐

  • C++中Template的用法

    模板 Template 指C 程序设计设计语言中采用类型作为参数的程序设计 支持通用程序设计 C 的标准库提供许多有用的函数大多结合了模板的观念 如STL以及IO Stream 函数模板 函数模板定义一族函数 template1 cpp i
  • LDSC:连锁不平衡回归分析

    欢迎关注 生信修炼手册 LDSC全称如下 linkage disequilibrium score regression 简称LDSR或者LDSC 在维基百科中 对该技术进行了简单介绍 通过GWAS分析可以识别到与表型相关的SNP位点 然而
  • Kettle同步表数据null处理

    kettle同步数据时会将空字符串 自动转换为 null 如果表字段非空则会报错 解决方案如下 方案一 kettle菜单栏 编辑 编辑kettle properties文件 配置项 KETTLE EMPTY STRING DIFFERS F
  • 制作及运行 WebUI(NovelAI)Docker 镜像

    准备 Novel AI 模型文件 下载地址 magnet xt urn btih 5bde442da86265b670a3e5ea3163afad2c6f8ecc 只需要部分下载其中的文件 必须的文件 文件 stableckpt anime
  • Node.js知识点详解(一)基础部分

    模块 Node js 提供了exports 和 require 两个对象 其中 exports 是模块公开的接口 require 用于从外部获取一个模块的接口 即所获取模块的 exports 对象 接下来我们就来创建hello js文件 代
  • AI圈最新深度学习量化算法!

    文章摘自AAAI21 译者 一元 量化交易和投资决策是复杂的金融任务 依赖于准确的股票选择 目前深度学习学习的策略使用于股票的问题的方案面临两个重大局限 他们不直接优化利润方面的投资目标 将每只股票视为独立于其他股票 忽略了相关股票之间的丰
  • SpringCloudGateway路由策略:Nacos同集群优先

    使用版本
  • Python sorted()

    最简单的用法 gt gt gt sorted 36 5 12 9 21 21 12 5 9 36 反向排序的 gt gt gt sorted 36 5 12 9 21 reverse True 36 9 5 12 21 更高级的用法 gt
  • win和linux下如何给Qt应用程序添加图标

    给程序添加图标 包含2个部分 第一个 是可执行文件的图标或桌面快捷方式图标 第二个 是程序运行时窗口的图标 分别如下 接下来 我们分别在windows和linux下 讲解如何设置这2种图标 一 在windows系统下 1 设置应用程序图标
  • kubernates k8s minikube 安装 及使用 CentOS 7

    参考文章 CentOS 7安装minikube 重点参考 https www cnblogs com harmful chan p 12731014 html Linux环境上安装MiniKube https blog csdn net u
  • Gitlab merge 时提示”Source branch does not exist”问题的一个解决方案

    背景 将 gitlab 从服务器上迁到阿里云主机 版本从 9 4 1 ce 0 升级到 11 4 3 ce 0 迁移前后均使用 docker 部署 在云主机上运行后 发现在本地推送新分支到 gitlab 并进行 merge 操作时 merg
  • (嵌入式开发)STM32 网站、开发工具使用、参考、数据手册下载不在求人

    目录 一 ST 常用资源网 1 1 ST 之数据手册与用户手册区别 1 2 如何搜索下载对应的芯片文档呢 二 CubeMX 的下载 2 1 如何下载CubeMX 相关软件 2 2 如何自己安装 2 3 CubeMX 资源包当中有什么 三 K
  • Pandas对Excel行和列进行操作

    获取行数据 filename 测试表 xlsx df pd DataFrame pd read excel filename df2 df df 状态 等待付款 df 状态 已提交 print df loc 6000 tolist 输出第6
  • laravel-admin 在指定的相册下添加照片

    相册与照片是一对多的关系 有以下需求 1 点开一条相册数据看到相册的照片列表 2 为相册添加照片时 表单中要看到相册的基本信息 以下是实现步骤 第一步 构建带参数路由 router gt resource manage albumid ph
  • 常用的chrome配置参数

    让chromedriver不打开网页在后台进行 如果对chrome的启动参数感兴趣可以去看看脑补连接 from selenium import webdriver chrome options webdriver ChromeOptions
  • 解决pycharm安装python第三方库时遇到的问题——pycharm实体环境与虚拟环境

    目录 关于cmd打开cd操作的提示 1 pycharm虚拟环境和本地环境有啥区别 2 实体环境和虚拟环境怎么安装库 3 如何查询实体环境安装的库和虚拟环境安装的库 4 怎么切换本地环境或虚拟环境 5 总结使用pycharm时常见的3中环境
  • Jenkins插件开发之环境构建

    1 环境 1 1 jdk 1 1 1 下载 Java Platform Standard Edition 8 ReferenceImplementations 或其他途径下载 1 1 2 java环境配置 1 1 2 1 右键此电脑 属性
  • 【Python】实用小脚本

    本文整理了我在学习和工作中用到的实用python脚本 希望也能帮助到需要的小伙伴 文章目录 视频格式转换 pip快速下载命令 多进程处理百万图片数据集 视频格式转换 安装视频处理库moviepy pip install moviepy 安装
  • 【程序员面试金典】请设计一个算法,求出a和b点的最近公共祖先的编号。

    题目描述 有一棵无穷大的满二叉树 其结点按根结点一层一层地从左往右依次编号 根结点编号为1 现在有两个结点a b 请设计一个算法 求出a和b点的最近公共祖先的编号 给定两个int a b 为给定结点的编号 请返回a和b的最近公共祖先的编号
  • JavaWeb servlet的使用

    在jsp文件中没有java代码我们才算是学完啦 从EL表达式和JSTL标签 在减少在login jsp和index jsp中的java代码 而今天的学习是让在jsp中彻底没有java代码 原本写在doLogin jsp做登录判断的java代