Servlet开发JavaWeb工程示例详解

下面是关于“Servlet开发JavaWeb工程示例详解”的完整攻略:

1. 准备工作

在开始 Servlet 的开发之前,需要做一些准备工作:

  • 安装 JDK
  • 安装 Tomcat
  • 配置环境变量

JDK 的安装和环境变量的配置这里就不再赘述,大家可以自行搜索相关教程进行操作。

Tomcat 的安装可以从官网下载对应版本的压缩包并解压,或者使用包管理器进行安装。解压后,可以将 Tomcat 安装目录下的/webapps文件夹作为开发的基础目录。

2. 开发 Servlet

在这里,我们以用户登录信息验证为例,通过 Servlet 来接收并处理用户输入的信息。

2.1 创建 Servlet 类

在开发 JavaWeb 工程时,需要新建一个继承了 HttpServlet 的 Java 类,并重写其中的 doGet 或 doPost 方法。

创建 Servlet 类,代码如下:

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 LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 以下处理 POST 请求:
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>登录结果</title>");
        out.println("</head>");
        out.println("<body>");

        if (username.equals("admin") && password.equals("123456")) {
            out.println("<p>登录成功</p>");
        } else {
            out.println("<p>用户名或密码错误</p>");
        }

        out.println("</body>");
        out.println("</html>");
        out.close();
    }
}

2.2 配置 Servlet

在 Servlet 中,我们需要配置 web.xml 文件。在 web.xml 文件中,包含了 Servlet 的映射关系和 URL 地址的匹配规则,还可以对 Servlet 进行初始化和参数配置等。

这里我们进行如下配置:

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

   <servlet>
      <servlet-name>LoginServlet</servlet-name>
      <servlet-class>LoginServlet</servlet-class>
   </servlet>

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

</web-app>

以上配置告诉容器,当请求/LoginServlet地址时,容器会找到名称为 LoginServlet 的 Servlet,并执行 LoginServlet 中重写了的 doPost 方法。

2.3 编写 JSP 页面

接下来,我们需要编写一个 JSP 页面来模拟用户的登录操作,并将用户输入的信息提交到服务器上进行验证。在 JSP 页面中,我们需要使用 <form> 标签来创建一个表单来收集用户的输入数据,并使用 <input> 标签创建文本框,以便输入用户名和密码。

在以上界面元素的基础上,我们还可以在表单中使用 <submit> 标签创建提交按钮。

创建 JSP 页面,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <form action="/LoginServlet" method="post">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username"><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

3. 部署运行

现在,我们已经完成了 Servlet 的开发和配置,接下来需要将代码部署到 Tomcat 服务器上进行运行。

将以上代码放到 Tomcat 目录下的 webapps 文件夹中,并启动 Tomcat 服务器即可。

使用浏览器访问http://localhost:8080/Login.jsp,即可访问该 JSP 页面,并在输入用户名和密码之后提交表单,服务器响应结果。

4. 示例

在以上内容中,我们仅仅是简单实现了一个可以接收用户输入的信息并验证的 Servlet 应用。

接下来,我们通过一个示例进行详细说明。

4.1 示例要求

现在我们有这样一个需求,需要开发一个 Servlet 应用,用于记录系统中的用户登录记录。当用户进行登录操作时,将记录下该用户的登录时间、登录 IP、以及登录时使用的浏览器 UA 字段,并将记录写入到日志文件中。

4.2 实现方法

具体实现方法如下:

4.2.1 创建一个使用者信息记录类

创建一个类用于记录用户信息,并将其序列化为可存储的字符串,该类代码如下:

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

public class UserInfo implements Serializable {
    private static final long serialVersionUID = 6050098418421147139L;
    private String username;
    private String ip;
    private String ua;
    private Date loginTime;

    public UserInfo(String username, String ip, String ua, Date loginTime) {
        this.username = username;
        this.ip = ip;
        this.ua = ua;
        this.loginTime = loginTime;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getUa() {
        return ua;
    }

    public void setUa(String ua) {
        this.ua = ua;
    }

    public Date getLoginTime() {
        return loginTime;
    }

    public void setLoginTime(Date loginTime) {
        this.loginTime = loginTime;
    }

    @Override
    public String toString() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = dateFormat.format(this.loginTime);
        return String.format("%s,%s,%s,%s", dateStr, this.ip, this.username, this.ua);
    }
}

以上代码中,我们创建了一个 UserInfo 类,并添加了用户名、IP 地址、浏览器 UA 字段以及登录时间等属性,并添加了一个 toString 方法来将 UserInfo 转换为可存储的字符串格式。

4.2.2 修改 Servlet

修改 Servlet,代码如下:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        UserInfo userInfo = new UserInfo(username, request.getRemoteAddr(), request.getHeader("user-agent"), new Date());

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>登录结果</title>");
        out.println("</head>");
        out.println("<body>");

        if (username.equals("admin") && password.equals("123456")) {
            out.println("<p>登录成功</p>");
            writeUserInfoToLog(userInfo);
        } else {
            out.println("<p>用户名或密码错误</p>");
        }

        out.println("</body>");
        out.println("</html>");
        out.close();
    }

    private void writeUserInfoToLog(UserInfo userInfo) {
        String logFilePath = getServletContext().getRealPath("/") + "log/userlogin.log";
        File logFile = new File(logFilePath);

        FileWriter fileWriter;
        try {
            fileWriter = new FileWriter(logFile, true);
            fileWriter.write(userInfo.toString() + "\n");
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(String.format("[%s] User login record saved to log file: %s", dateFormat.format(new Date()), logFile.getAbsolutePath()));
    }
}

以上代码中,我们在 doPost 方法中,获取了用户的登录信息,并创建了一个 UserInfo 对象,然后在用户登录成功时,调用 writeUserInfoToLog 方法将登录用户的信息写入到本地日志文件中。

4.2.3 创建 JSP 页面

修改 JSP 页面,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <form action="/LoginServlet" method="post">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username"><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

4.3 图示

通过以上示例,我们可以清晰地了解到 Servlet 的开发步骤和基本操作。在实际的开发中,还需要对其进行细致的调节和优化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Servlet开发JavaWeb工程示例详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java线程池的优点及池化技术的应用

    下面我来为你详细讲解 Java 线程池的优点及池化技术的应用。 线程池的优点 在 Java 中,每次创建和启动线程都需要耗费一定的时间和系统资源,一般情况下创建和销毁线程的开销比线程执行任务本身的开销更大。因此,使用线程池技术可以带来以下好处: 1. 提高线程利用率 线程池允许在应用程序启动时预先创建一定数量的线程,如果应用程序需要执行任务,则从线程池中取出…

    Java 2023年5月20日
    00
  • spring-boot-maven-plugin报红解决方案(亲测有效)

    关于“spring-boot-maven-plugin报红解决方案(亲测有效)”的完整攻略,我将分步骤进行讲解,包括解决方案和示例代码。 问题描述 在使用Spring Boot项目时,我们通常会使用官方提供的spring-boot-maven-plugin插件来构建和打包项目,在使用该插件时,可能出现如下错误提示: Plugin execution not …

    Java 2023年5月19日
    00
  • 做Java开发如何月薪达到两万,需要什么技术水平

    如何成为月薪达到两万的Java开发攻略 作为Java开发工程师,月薪达到两万并不是难事。关键在于具备足够的技术水平和项目经验。下面是我们总结的攻略。 技能和技术水平 1. 扎实的Java基础 Java开发基础是成为优秀Java开发人员的重要基础。在掌握掌握Java基础语法、多线程、集合框架、IO/NIO、反射、注解、Lambda、Stream等知识的基础上,…

    Java 2023年5月26日
    00
  • JSP入门教程(4)

    当然,我很高兴为您提供有关“JSP入门教程(4)”完整攻略的详细解释。 简介 在JSP入门教程的第四部分中,我们将学习如何使用JSP中的if-else语句和switch语句,这些语句用于控制流程和决策。 if-else语句 if-else语句是一种流程控制语句,可用于根据条件执行不同的代码块。在JSP页面中,可以使用以下语法来编写if-else语句: &lt…

    Java 2023年6月15日
    00
  • Java实现房屋出租系统详解

    Java实现房屋出租系统详解 系统背景 房屋出租系统是一个关注于在线房屋租赁的平台,使得房东可以上传房屋信息,而租客可以浏览平台上的房源,选择心仪房屋进行租赁。 系统功能 该系统主要包含了以下几个功能模块: 房东和租客注册登录:用户需要注册并登录才能使用平台功能。 房源信息管理:房东可以添加、修改和删除房源信息,租客可以查询房源信息。 订单管理:租客可以下单…

    Java 2023年5月24日
    00
  • 解决mybatis 数据库date 与 java中Date类型映射问题

    解决mybatis 数据库date 与 java中Date类型映射问题可以通过以下步骤: 1. 增加日期类型转换器 在mybatis的配置文件中,我们可以增加一个类型转换器,将数据库中的date类型转换为Java中的Date类型。在mybatis-config.xml文件中增加如下代码: <typeHandlers> <typeHandle…

    Java 2023年5月20日
    00
  • java实战小技巧之字符串与容器互转详解

    Java实战小技巧之字符串与容器互转详解 1. 前言 在Java编程中,我们常常需要将字符串(String)与容器(List、Set、Map)进行转化。本文将详细讲解如何使用Java提供的工具类来实现两者之间的互转。 本文的代码示例基于Java 8及以上版本。 2. 字符串转容器 2.1 字符串转List 2.1.1 普通字符串转List 普通字符串转Lis…

    Java 2023年5月27日
    00
  • 详解Java数组的四种拷贝方式

    下面是详解Java数组的四种拷贝方式: 概述 在Java中,我们可以使用多种方式对数组进行拷贝。这些拷贝方式包括:1. for循环2. System.arraycopy()方法3. Arrays.copyOf()方法4. clone()方法 本文将详细介绍这四种方式,并提供示例演示它们的使用方法和区别。 for循环 使用for循环拷贝数组是最基本和最常用的方…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部