javaweb实验:Servlet应用开发

news2024/12/22 19:07:59

目录

  • 前言
  • 实验目的
  • 实验内容
  • 实验原理或流程图
  • 实验过程
    • 一个简单的servlet
      • Servlet
      • 表单
      • 结果展示
    • 使用servlet处理表单请求
      • servlet
      • 结果展示
    • 在Servlet中获取应用程序配置参数
      • servlet
    • 使用Servlet处理用户登录请求
      • Servlet
      • 登录表单
      • 登陆成功页面
      • 登录失败页面
      • 结果展示![在这里插入图片描述](https://img-blog.csdnimg.cn/2deecf549f224b729a42ed6251b08c70.png)
    • 配置web.xml
  • 总结

前言

本实验的目的是掌握Servlet的基本概念和编程技巧,了解Servlet的生命周期和工作原理,学习如何使用Servlet处理客户端的请求和响应,以及如何在Servlet中使用JavaBean、Session、Cookie等技术实现数据的存取和传递。

本实验分为四个部分:

第一部分:创建一个简单的Servlet程序,了解Servlet的配置和运行方式,以及如何在Servlet中获取请求参数和输出响应内容。

第二部分:使用Servlet处理表单请求

第三部分:在Servlet中获取应用程序配置参数,并在页面上显示结果。

第四部分:使用Servlet处理用户登录请求,根据登录验证结果,分别跳转至登录成功页面和登录失败页面。

实验目的

  1. 学会 Servlet的创建、配置及运行方法;
  2. 学会使用Servlet获取表单数据;
  3. 学会配置和获取应用初始化参数的方法;
  4. 学会使用Servlet的跳转方法实现客户端跳转和服务器端跳转。

实验内容

(一)编写和运行一个简单的Servlet,向浏览器窗口(页面)输出如下内容:“Welcome to China!”、“热情好客的中国欢迎您!”和系统当前时间。输出效果如图所示
在这里插入图片描述
(二)使用Servlet处理表单请求

(三)在Servlet中获取应用程序配置参数。

(四)使用Servlet处理用户登录请求,根据登录验证结果,分别跳转至登录成功页面和登录失败页面。

实验原理或流程图

Servlet是运行在服务器端的Java程序,它主要是为了扩展服务器的功能。编写和运行Servlet一般要经过4个步骤:(1)编辑源文件,它是继承HttpServlet的Java类;(2)编译源文件;(3)在服务器中部署该Servlet,即将类文件存放到服务器的适当目录中,并修改web.xml部署描述文件;(4)使用浏览器访问该Servlet程序。
Servlet程序的生命周期包括:加载程序、初始化、服务、销毁、卸载五个阶段。Servlet程序的生命周期中最为重要的就是service()方法,doGet()和doPost()是专门负责处理Http请求的。
Servlet与JSP的联系与区别:JSP是一种服务器端的动态页面技术,它的实质也是Servlet。它的编写较Servlet容易。二者的主要区别是:Servlet通常是实现业务逻辑,而JSP通常实现表示逻辑。
Servlet本身存在HttpServletRequest和HttpServletResponse对象的声明,可以使用Servlet接收用户提交的内容。
可以通过表单或超链接从一个JSP或者是一个HTML页面跳转进Servlet,也可以从Servlet跳转到其他的Servlet、JSP或其他页面,采用跳转形式有两种:(1)使用HttpServletResponse接口的sendRedirect()方法实现的客户端跳转;(2)使用RequestDispatcher接口的forward()方法实现的服务器端跳转。

实验过程

一个简单的servlet

Servlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.write("Welcome to China!<br>热情好客的中国欢迎您!<br><br>当前时间:" + new Date());
    }
}

表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>index</title>
</head>
<body>
<a href="HelloServlet">xianshj</a>
</body>
</html>

结果展示

在这里插入图片描述

使用servlet处理表单请求

servlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/input")
public class InputServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.write("<h1>用户名:" + request.getParameter("name") + "<br>密 码:" + request.getParameter("password") + "<h1>");
    }
}

结果展示

在这里插入图片描述
在这里插入图片描述

在Servlet中获取应用程序配置参数

servlet

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class InitParamServlet extends HttpServlet {

    String nuc_url = "";
    @Override
    public void init(ServletConfig config) throws ServletException {
        nuc_url = config.getInitParameter("nuc_url");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.write(nuc_url);
    }
}


使用Servlet处理用户登录请求

Servlet

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

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String myName = "luyunchi";
        String myPassword = "123123";
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        if (name.equals(myName) && password.equals(myPassword)) {
            request.setAttribute("name", name);
            request.getRequestDispatcher("/login_success.jsp").forward(request,response);
        } else {
            request.getRequestDispatcher("/login_failure.jsp").forward(request,response);
        }
    }
}

登录表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
  <center>
    <h1>用户登录</h1>
  </center>
  <hr><br>
  <form action="${pageContext.request.contextPath}/login" method="get">
    <table align="center" border="0">
      <tr>
        <td align="right">用户名:</td>
        <td><input type="text" name="name"></td>
      </tr>
      <tr>
        <td align="right">密 码:</td>
        <td><input type="password" name="password"></td>
      </tr>
      <tr>
        <td colspan="2" align="center">
          <input type="submit" value="提交">&nbsp;
          <input type="reset" value="重置">
        </td>
      </tr>
    </table>
  </form>
</body>
</html>

登陆成功页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功页面</title>
</head>
<body>
    <center>
        <h1>恭喜,您登录成功!</h1>
        <br><br>
        <h1>欢迎<%=request.getAttribute("name")%>光临!</h1>
    </center>
</body>
</html>

登录失败页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录失败页面</title>
</head>
<body>
  <center>
    <h1>用户ID或密码错误!请重新<a href="${pageContext.request.contextPath}/login_6_4.jsp">登录</a> </h1>
  </center>
</body>
</html>

结果展示在这里插入图片描述

在这里插入图片描述

配置web.xml

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

    </welcome-file-list>
    <servlet>
        <servlet-name>ServletDemo</servlet-name>
        <servlet-class>demoSeverlet.HelloServlet</servlet-class>

    </servlet>

    
    <servlet-mapping>
        <servlet-name>ServletDemo</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>ServletDemo1</servlet-name>
        <servlet-class>demoSeverlet.InputServlet</servlet-class>

    </servlet>


    <servlet-mapping>
        <servlet-name>ServletDemo1</servlet-name>
        <url-pattern>/InputServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ServletDemo2</servlet-name>
        <servlet-class>demoSeverlet.LoginServlet</servlet-class>

    </servlet>


    <servlet-mapping>
        <servlet-name>ServletDemo2</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ServletDemo3</servlet-name>
        <servlet-class>demoSeverlet.InitParamServlet</servlet-class>

    </servlet>


    <servlet-mapping>
        <servlet-name>ServletDemo3</servlet-name>
        <url-pattern>/InitParamServlet</url-pattern>
    </servlet-mapping>
</web-app>

总结

本文是对javaweb实验中Servlet应用开发的总结,主要介绍了Servlet的概念、功能、生命周期和编程步骤。Servlet是一种运行在服务器端的Java程序,它可以接收和响应客户端的请求,实现动态的Web内容生成。Servlet的功能包括:处理表单数据、管理会话状态、与数据库交互、实现过滤器和监听器等。Servlet的生命周期由容器管理,一般分为三个阶段:初始化、服务和销毁。Servlet的编程步骤主要有:创建Servlet类,实现init、service和destroy方法;配置web.xml文件,注册Servlet和映射URL;部署和运行Servlet应用,测试其功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

调用百度API实现图像风格转换

目录 1、作者介绍2、基本概念2.1 人工智能云服务与百度智能云2.2 图像风格转换 3、调用百度API实现图像风格转换3.1 配置百度智能云平台3.2 环境配置3.3 完整代码实现3.4 效果展示3.5 问题与分析 1、作者介绍 张元帮&#xff0c;男&#xff0c;西安工程大学电子信息学院&#…

ODB 2.4.0 使用延迟指针 lazy_shared_ptr 时遇到的问题

最近在学习使用C下的ORM库——ODB&#xff0c;来抽象对数据库的CURD&#xff0c;由于C的ORM实在是太冷门了&#xff0c;ODB除了官方英语文档&#xff0c;几乎找不到其他好用的资料&#xff0c;所以在使用过程中也是遇到很多疑惑&#xff0c;也解决很多问题。近期遇到的一个源码…

欧拉角,四元数与旋转矩阵

目录 一、欧拉角二、四元数三、旋转矩阵四、Python下欧拉角、四元数和旋转矩阵的相互转换总结 一、欧拉角 对于在三维空间里的一个参考系&#xff0c;任何坐标系的取向&#xff0c;都可以用三个欧拉角(x,y,z)来表现。对于夹角的顺序和标记&#xff0c;夹角的两个轴的指定&…

Baklib分享:做好企业内部知识管理的方法?

企业内部知识管理是一个重要的任务&#xff0c;它涵盖了许多领域&#xff0c;包括知识生成、知识共享、知识保护等。在现代企业中&#xff0c;知识管理被认为是一项战略性的任务&#xff0c;可以为企业带来许多好处&#xff0c;例如提高员工生产力、减少错误和失误、加强员工的…

RabbitMQ 小白教程,从安装到使用

主要内容 AMQP简介 RabbitMQ简介 RabbitMQ原理 Erlang安装 安装RabbitMQ RabbitMQ账户管理 交换器 学习目标 知识点要求AMQP简介掌握RabbmitMQ简介掌握RabbitMQ原理掌握Erlang安装掌握安装RabbitMQ掌握RabbitMQ账户管理掌握交换器掌握 一、 AMQP简介 1 AMQP是什么?…

微信小程序 vue+nodejs高校食堂外卖点餐平台系统rf6md

前端vueelementui, (1) vue引入elementui 1.使用npm安装element-ui npm i element-ui -S 2.在main.js中导入使用vue import element-ui/lib/theme-chalk/index.css //别忘了导入样式 import ElementUI from element-ui Vue.use(ElementUI) 后端&#xff1a;java(springbootss…

蓝牙资讯|智能家居标准Matter 1.1 发布,智能家居产品兼容更丰富

据“CSA 连接标准联盟”官方微信号&#xff0c;Matter 1.1 版本已发布&#xff0c;“1.1 版本带来的更新使设备制造商和开发者上手更容易、产品获取认证更方便&#xff0c;也让产品能更快地交付给用户。该版本还为电池供电设备提供了更大支持&#xff0c;而这类设备涉及多种类型…

VIBRO-METER VM600 MPC4 机械保护卡

4个动态通道和2个转速通道每个动态通道2个处理输出&#xff0c;每个双通道1个处理输出(每个MP C4 2个)&#xff0c;每个转速器通道1个处理输出高度可配置的卡支持机械保护应用所需的所有测量&#xff0c;如相对和/或绝对振动高度集成的卡对(带IOC4T)包括传感器电源、缓冲输出、…

5.2 标准IO:文件的打开、关闭及代码实现

目录 标准IO 文件的打开 标准I/O-fopen-mode参数 ​编辑 标准I/O-fopen-示例 标准I/O-fopen-新建文件权限 标准I/O-处理错误信息 标准I/O-错误信息处理-示例1 标准I/O-错误信息处理-示例2 文件的关闭 标准IO 文件的打开 打开就是占用资源 下列函数可用于打开一个…

四个PCB工程师最头痛的Allegro问题及解答,你一定要看

Allegro是一款功能强大的PCB设计软件&#xff0c;广泛应用在电子设计行业&#xff0c;在使用Allegro过程中&#xff0c;工程师会遇见到多种复杂的技术问题&#xff0c;本文将针对工程师最头痛的Allegro问题进行回答&#xff0c;希望对小伙伴们有所帮助。 1、如何创建新的Allegr…

汽车电子电气架构里的VCU DCU ZCU ECU怎么区分?

文章目录 一、VCU二、DCU三、ECU四、ZCU五、车辆电子电气架构的域架构 一、VCU VCU&#xff08;Vehicle Control Unit&#xff0c;车辆控制单元&#xff09;&#xff1a;VCU是车辆级别的控制单元&#xff0c;负责管理和协调车辆的各个系统和子系统之间的通信和协同工作。它可以…

javaweb实验:JSP+JDBC综合实训__数据库记录的修改、删除

目录 前言实验目的实验内容编程实现后台的用户管理功能 实验原理或流程图实验原理流程图 实验过程AdduserquerAllUserdoAddUser结果展示 实验结论 前言 本实验的目的是让学生掌握使用JSP和JDBC技术对数据库中的记录进行修改和删除的方法。实验内容包括以下几个部分&#xff1a…

STM32单片机蓝牙APP手势语音温控电风扇落地扇人体感应

实践制作DIY- GC0134-蓝牙APP手势语音温控电风扇 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP手势语音温控电风扇 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32单片机语音识别模块PAJ7620U2手势识别传感器DS18B20温度传感器5V风扇LCD1602显示器红外接…

机器学习算法的基本概念、分类和评价标准,以及一些常用的机器学习算法的原理和特点

机器学习是一门研究如何让计算机从数据中学习和推理的科学。机器学习算法是实现机器学习的具体方法&#xff0c;它们可以根据不同的目标、数据类型和应用场景进行分类和比较。本文将介绍机器学习算法的基本概念、分类和评价标准&#xff0c;以及一些常用的机器学习算法的原理和…

MacBook杀毒软件CleanMyMac X2023

Mac 上也广泛存在恶意软件&#xff0c;并且能够突破系统自身的防护&#xff0c;通过渠道传播到电脑上&#xff0c;威胁大家的数据安全和窃取个人信息&#xff01;所以&#xff0c;MacBook杀毒软件还是很有必要安装的。 始于颜值&#xff0c;忠于实力。CleanMyMac X是我用过UI风…

复杂软件版本如何使用git工具进行管理

1.需求说明 一个项目&#xff0c;如果长期开发下去&#xff0c;我们会碰到各种各样的客户&#xff0c;然后就会有各种各样的需求。这时候就会出现一个问题&#xff1a;如果我们的代码都是一个项目&#xff0c;客户的主体流程都是一样&#xff0c;但部分客户又有一些特别的定制…

JDK1.8 与 Language Level 8 关系

什么是Java&#xff1f; 是 SUN(Stanford University Network&#xff0c;斯坦福大学网络公司 ) 1995 年推出的一门高级 编程语言。 是一种面向 Internet 的编程语言。Java 一开始富有吸引力是因为 Java 程序可以在 Web 浏览器 中运行。这些 Java 程序被称为 Java 小程序…

六级备考26天|CET-6|仔细阅读|考研英语2023年英语(一)|8:20~10:00

text1 4/5 text2 3/5 text3 2/5 text4 3/5 12/20 目录 text 1 1. 重点词汇 2. 原文 3. 题目 text 1 1. 重点词汇 sympathise / ˈsɪmpəθaɪz / vi.同情&#xff1b;吊唁&#xff1b;共鸣 &#xff08;等于 sympathize&#xff09; ener…

OJ练习第109题——根到叶路径上的不足节点

根到叶路径上的不足节点 力扣链接&#xff1a;1080. 根到叶路径上的不足节点 题目描述 给你二叉树的根节点 root 和一个整数 limit &#xff0c;请你同时删除树中所有 不足节点 &#xff0c;并返回最终二叉树的根节点。 假如通过节点 node 的每种可能的 “根-叶” 路径上值…

KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图

前言&#xff1a;KuiperInfer是一个从零实现一个高性能的深度学习推理库&#xff0c;中文教程已经非常完善了。本系列博客主要是自己学习的一点笔记和二次开发的教程&#xff0c;欢迎更多的AI推理爱好者一起来玩。这篇写一下计算图相关的知识点&#xff0c;重点说明ONNX有什么缺…