前言

本实验的目的是掌握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应用,测试其功能。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐