Java学习之路006——Servlet开发

简介: 包括引入servlet的api库、IDEA2022配置servlet有关操作,以及servlet的xml配置与注解使用;以及简单的servlet编程实现。

1、 Servlet api引入

【STEP 1】在创建Web项目中引入Tomcat里面提供servlet-api.jar类库

项目右键 -> 打开模块设置


【STEP 2】选择依赖页面,进行新建一个库。


【STEP 3】如果不使用默认的库,就新增库->Java


【step 4】找到tomcat下的servlet-api.jar包


【STEP 5】选择成功,确定即可。


【6】选中servlet-api库进行添加


【7】在依赖选项卡可以看到servlet-api库有关信息



【8】在项目目录的外部库,也可以看到servelt-api库被添加进来了



2、 创建一个Servlet

public class MyServlet extends HttpServlet {
}


【1】新建一个类,例如Myservlet,继承自HttpServlet


【2】快速生成Get、Post重写的方法。用来提供给外部(客户端)调用的Get、Post请求。


【3】在Html页面里面新增两个触发按钮,用来测试使用


<form action="" method="post">
    <input type="submit" value="this is Post Request">
</form>
<form action="" method="get">
    <input type="submit" value="this is Get Request">
</form>



3、使用Servlet

3.1 基于原始配置

【1】在web.xml配置文件内,进行添加配置


【2】配置servlet有关信息


【3】其中,引用的类路径为,在对应的写Get、Post等方法的类右键,选择复制引用,即可寻找到复制引用的选项。


<!--配置Servlet-->
<servlet>
    <servlet-name>weskyServlet</servlet-name>
    <servlet-class>com.wesky.servlet.demo.MyServlet</servlet-class>
</servlet>
<!--配置Servlet映射-->
<servlet-mapping>
    <servlet-name>weskyServlet</servlet-name>
    <url-pattern>/wesky</url-pattern>
</servlet-mapping>


【4】对类做个输出,以便于测试


【5】修改页面请求的代码,填写action的路径,action路径和配置文件的路径保持一致(前缀没有斜杠,映射路径有斜杠)


【6】然后启动程序


【7】先后点击Post请求和Get请求按钮。在第一次点击的时候,类型会被实例化,后续就没有继续实例化了。并且也都可以看到点击进入到了对应的方法里面。


3.2 Servlet生命周期

测试生命周期

【1】重载三个方法,分别是init,service,destroy;他们分别代表servlet服务的初始化、服务分发、以及销毁。


【2】然后再启动程序,看下效果。

第一次执行:

构造函数 -> init() -> service() -> doXXX()

第二次:service() -> doXXX()

第三次:service() -> doXXX()


【3】关闭服务的时候,执行一次销毁动作。


【4】super.service()方法反编译,可以看到具体实现效果


【5】所以我们可以对super.service进行一些自定义改造,或者不管什么请求,都可以指定为Post请求。例如,判断Post和Get请求走正常渠道,其他请求全部引导向Post方法里面去。


3.3 servlet上使用注解

【注意】Servlet版本必须是3.0以上才可以使用注解

例如查看我当前的servlet版本是6.0


【1】注解说明:

@WebServlet(name = "weskyServlet", urlPatterns = "/wesky2")
name: 代表servlet的名称
urlPatterns: 定义映射路径


【2】html静态页面里面也修改action为wesky2,与注解写的保持一致,用于区分和配置文件实现的差别


【3】对原先配置的xml文件进行注释


【4】运行程序,并点击请求按钮,可以看到也能被访问成功。如果访问不成功,action没有成功跳转,可以清理缓存再试试。


3.4 servlet编程实现

【1】为了节省工作时间,此处就不手写了,直接问ChatGPT要了份代码,我们接下来做个简单的解析


【2】前端代码(login.html)说明:在 HTML 页面中,我们创建了一个简单的登录表单,其中包含用户名和密码的输入框。该表单将提交到 login Servlet。在 Servlet 中,我们可以获取并验证用户输入的用户名和密码,然后决定是否允许用户登录。

<!DOCTYPE html>
<html xmlns:c="https://jakarta.ee/xml/ns/jakartaee">
<head>
  <meta charset="UTF-8">
  <title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<!-- 显示登录表单 -->
<form method="post" action="login">
  <p>
    <label>用户名:</label>
    <input type="text" name="username" />
  </p>
  <p>
    <label>密码:</label>
    <input type="password" name="password" />
  </p>
  <p>
    <input type="submit" value="登录" />
  </p>
</form>
</body>
</html>


【3】servlet部分代码,做了点小调整以后:

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet(name = "loginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 显示登录页面
        request.getRequestDispatcher("/login.html").forward(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
                response.setContentType("text/html;charset=UTF-8"); // 设置字符编码
        PrintWriter writer = response.getWriter(); 
        // 处理登录请求
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if ("admin".equals(username) && "admin123".equals(password)) {
            // 登录成功,重定向到欢迎页面
            response.sendRedirect("hello.html");
        } else {
            // 登录失败,重定向到登录页面并显示错误消息
            writer.write("<script>alert('登录失败!');location.href='login.html';</script>");
        }
        // 释放操作流资源
        writer.flush();
        writer.close();
    }
}


【4】一些说明:

<form method="post" action="login">
post代表访问到doPost里面;action=login代表通过注解的urlPatterns找到/login,从而可以确定servlet服务所在的入口;
Java代码:String username = request.getParameter("username");
前端标签代码:<input type="text" name="username" />
HttpServletRequest request 参数的getParameter方法,传递一个字符串参数,该参数用于匹配前端name与之对应的内容


【5】现在启动程序运行一下,看下效果。看来机器人写的登录页面还是可以用的。

【6】输入错误的用户名或密码,显示失败,点击确定会回到登录页。

【7】输入正确的密码以后,就会跳转到预设的页面了。







目录
相关文章
|
11天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
24 4
|
12天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
35 4
|
12天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
18天前
|
SQL Java 程序员
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
19天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
36 2
|
19天前
|
监控 Java 数据库连接
在Java开发中,数据库连接管理是关键问题之一
在Java开发中,数据库连接管理是关键问题之一。本文介绍了连接池技术如何通过预创建和管理数据库连接,提高数据库操作的性能和稳定性,减少资源消耗,并简化连接管理。通过示例代码展示了HikariCP连接池的实际应用。
18 1
|
12天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
25 0
|
12天前
|
Java API Android开发
kotlin和java开发优缺点
kotlin和java开发优缺点
27 0
WK
|
18天前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
35 0
WK
|
19天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
27 0