超详细Servlet介绍+JavaBean+Jsp+request综合案例

文章目录

说一下get和post:
简单来说get请求就是地址栏输入信息,比如超链接过去,比如url+?=…调用doGet处理
post请求一般都是用表单提交,调用doPost处理

一、 Servlet【服务器端小程序】概述

1、 服务器端的应用程序
2、 属于JavaEE的标准规范
3、 Servlet必须继承和实现JavaEE提供的组件(javax.servlethttp.HttpServlet)支持
4、 必须在部署描述文件web.xml中进行配置
5、 在web的应用体系结构中属于控制器。对用户请求的数据进行处理并响应处理的结果。

二、Servlet构建步骤

【前提】:客户端(web浏览器)通过Http提出请求【get或者post】,web服务器接收到请求并将其转发给servlet,如果servlet’没有加载,则web服务器先把它加载到Java虚拟机并执行它。servlet接收并做响应的处理,然后将处理结果发送到web服务器,web服务器将处理结果返回到客户端。【对应request请求和response响应】
1、编写类并继承HttpServlet
2、重写doGet和doPost方法,用于处理用户的get请求或者post请求
3、在web.xml文件中配置部署Servlet
4、部署运行

三、Servlet的生命周期

1、创建Servlet对象

web服务器通过用户的请求路径创建Servlet对象。

2、Servlet对象调用初始化(init)的方法,初始化服务器参数信息(如果有)
在第一次请求Servlet时执行该方法,后续请求不再执行,Servlet对象常驻服务器内存。
3、调用服务的方法(doGet或者doPost)对用户请求的数据进行处理。
4、调用销毁的方法(destroy)清除Servlet对象
 销毁的方法一般在服务器关闭的时候执行
注意

Servlet在第一次访问时调用构造方法创建对象,然后在调用init方法进行初始化。后续请求只是调用服务的方法,处理用户的数据。

四、示例

1.编写UsersServlet.java
package com.servlet;

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

public class UsersServlet extends HttpServlet {
    public UsersServlet(){
        System.out.println("正在创建Servlet对象......");
    }
    @Override
    public void init() throws ServletException {
        System.out.println("正在初始化Servlet对象......");
    }

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("正在处理用户的get请求.......");
    }

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("正在处理用户的post请求.......");
    }

    @Override
    public void destroy() {
        System.out.println("正在销毁Servlet对象.......");
    }
}


2.配置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">
    <!--配置Servlet类路径,该配置由web容器进行解析并创建Servlet类对象-->
    <servlet>
        <servlet-name>UsersServlet</servlet-name>
        <servlet-class>com.servlet.UsersServlet</servlet-class>
    </servlet>
    <!--该配置主要指定Servlet的访问路径-->
    <servlet-mapping>
        <servlet-name>UsersServlet</servlet-name>
        <url-pattern>/servlet/UsersServlet</url-pattern>
    </servlet-mapping>
</web-app>
3.在index.jsp里面访问servlet
<%--
  Created by IntelliJ IDEA.
  User: 顾念思成
  Date: 2021/4/23
  Time: 9:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>测试</title>
  </head>
  <body>
  <a href="servlet/UsersServlet">get方式请求</a>

  <form action="servlet/UsersServlet" method="post">
    <input type="submit" name="smt" value="post请求">
  </form>

  </body>
</html>

演示:

index页面
在控制台查看:

[2021-04-23 12:35:38,033] Artifact prjJavaWebDemo10: Artifact is deployed successfully
[2021-04-23 12:35:38,033] Artifact prjJavaWebDemo10: Deploy took 820 milliseconds
23-Apr-2021 12:35:47.010 淇℃伅 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory 鎶妛eb 搴旂敤绋嬪簭閮ㄧ讲鍒扮洰褰� [D:\Tool\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24\webapps\manager]
23-Apr-2021 12:35:47.153 淇℃伅 [Catalina-utility-1] org.apache.jasper.servlet.TldScanner.scanJars 鑷冲皯鏈変竴涓狫AR琚壂鎻忕敤浜嶵LD浣嗗皻鏈寘鍚玊LD銆� 涓烘璁板綍鍣ㄥ惎鐢ㄨ皟璇曟棩蹇楄褰曪紝浠ヨ幏鍙栧凡鎵弿浣嗘湭鍦ㄥ叾涓壘鍒癟LD鐨勫畬鏁碕AR鍒楄〃銆� 鍦ㄦ壂鎻忔湡闂磋烦杩囦笉闇�瑕佺殑JAR鍙互缂╃煭鍚姩鏃堕棿鍜孞SP缂栬瘧鏃堕棿銆�
23-Apr-2021 12:35:47.159 淇℃伅 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Tool\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24\webapps\manager] has finished in [149] ms
正在创建Servlet对象......
正在初始化Servlet对象......
正在处理用户的post请求......
正在处理用户的get请求......
正在处理用户的post请求......
D:\Tool\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24\bin\catalina.bat stop
Using CATALINA_BASE:   "C:\Users\顾念思成\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\635bcd47-5d5e-469a-9ebd-5b8a041c7730"
Using CATALINA_HOME:   "D:\Tool\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24"
Using CATALINA_TMPDIR: "D:\Tool\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24\temp"
Using JRE_HOME:        "D:\Java\jdk"
Using CLASSPATH:       "D:\Tool\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24\bin\bootstrap.jar;D:\Tool\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24\bin\tomcat-juli.jar"
23-Apr-2021 12:44:10.068 淇℃伅 [main] org.apache.catalina.core.StandardServer.await A valid shutdown command was received via the shutdown port. Stopping the Server instance.
23-Apr-2021 12:44:10.068 淇℃伅 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
23-Apr-2021 12:44:10.235 淇℃伅 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
23-Apr-2021 12:44:10.397 淇℃伅 [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
正在摧毁Servlet对象......
23-Apr-2021 12:44:10.416 淇℃伅 [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
23-Apr-2021 12:44:10.418 淇℃伅 [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
23-Apr-2021 12:44:10.419 淇℃伅 [main] org.apache.coyote.AbstractProtocol.destroy 姝e湪鎽ф瘉鍗忚澶勭悊鍣� ["http-nio-8080"]
23-Apr-2021 12:44:10.420 淇℃伅 [main] org.apache.coyote.AbstractProtocol.destroy 姝e湪鎽ф瘉鍗忚澶勭悊鍣� ["ajp-nio-8009"]
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Disconnected from server

五、实例:jsp+JavaBean+servlet+request实现简单的登录验证

1.编写login.jsp页面
<%--
  Created by IntelliJ IDEA.
  User: 顾念思成
  Date: 2021/4/23
  Time: 10:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
    <form action="dologin.jsp" method="post">
        账号:<input type="text" name="uname" >
        密码:<input type="password" name="upasswd">
        <input type="submit" value="登录" >
        <input type="reset" value="取消">
    </form>

</body>
</html>

2.编写收集用户信息的dologin.jsp页面,并将数据设置到request范围,转发给UsersServlet

(1)设置字符编码

<%
  request.setCharacterEncoding("utf-8");
  response.setCharacterEncoding("utf-8");
%>

(2)将User添加到request的scope并跳转到servlet页面处理数据

<jsp:useBean id="us" class="com.bean.User" scope="request"/>

<!--调用指令,与import类似,可以实例化一个对象 id是实例化对象名称 -->
<jsp:setProperty name="us" property="*"/>
<!--设置属性,name是实例化对象名称id,property指定属性,param指定参数,value指定内容取得属性是getProperty标签-->
<jsp:forward page="servlet/UsersServlet"/>
<!--上述动作标签为转发的动作标签,替代以下代码RequestDispatcher dispater=request.RequestDispatcher("/servlet/UsersServlet");dispater.forward(request,response);-->

(3)整体代码:

<%--
  Created by IntelliJ IDEA.
  User: 顾念思成
  Date: 2021/4/23
  Time: 10:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>数据处理</title>
</head>
<%
  request.setCharacterEncoding("utf-8");
  response.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="us" class="com.bean.User" scope="request"/>

<!--调用指令,与import类似,可以实例化一个对象 id是实例化对象名称 -->
<jsp:setProperty name="us" property="*"/>
<!--设置属性,name是实例化对象名称id,property指定属性,param指定参数,value指定内容取得属性是getProperty标签-->
<jsp:forward page="servlet/UsersServlet"/>
<!--上述动作标签为转发的动作标签,替代以下代码RequestDispatcher dispater=request.RequestDispatcher("/servlet/UsersServlet");dispater.forward(request,response);-->
<body>

</body>
</html>

3.编写UsersServlet

(1) 设置字符编码

//设置字符编码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

(2)设置响应内容类型

//设置响应的内容类型  text前是处理后是下载
        resp.setContentType("text/html");

(3)定义字符输出流对象

//获取输出字符流对象 准备输出信息
        PrintWriter out = resp.getWriter();

(4)从request属性中获取User对象,并做逻辑上的判断,不为空然后跳转到loginok.jsp页面,把req和resp都转过去

        //从request的属性中获取User对象
        User us = (User) req.getAttribute("us");
        if (us!=null){
            if (us.getUname()!=null&&us.getUpasswd()!=null){
                //转发User对象到loginok.jsp
                RequestDispatcher dispatcher = req.getRequestDispatcher("/loginok.jsp");
                dispatcher.forward(req,resp);

            }else{
                out.println("账号或者密码错误,请重新<a href='login.jsp'>登录</a>!");
            }
        }else{
            out.println("请从login.jsp页面<a href='login.jsp'>登录</a>!");
        }

        System.out.println("正在处理用户的post请求......");
    }

(5)整体代码:

package com.servlet;

import com.bean.User;

import javax.servlet.RequestDispatcher;
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 UsersServlet extends HttpServlet {

    public UsersServlet() {
        System.out.println("正在创建Servlet对象......");
    }

    @Override
    public void init() throws ServletException{
        System.out.println("正在初始化Servlet对象......");
    }

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("正在处理用户的get请求......");
    }

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //设置字符编码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //设置响应的内容类型  text前是处理后是下载
        resp.setContentType("text/html");
        //获取输出字符流对象 准备输出信息
        PrintWriter out = resp.getWriter();

        //从request的属性中获取User对象
        User us = (User) req.getAttribute("us");
        if (us!=null){
            if (us.getUname()!=null&&us.getUpasswd()!=null){
                //转发User对象到loginok.jsp
                RequestDispatcher dispatcher = req.getRequestDispatcher("/loginok.jsp");
                dispatcher.forward(req,resp);

            }else{
                out.println("账号或者密码错误,请重新<a href='login.jsp'>登录</a>!");
            }
        }else{
            out.println("请从login.jsp页面<a href='login.jsp'>登录</a>!");
        }

        System.out.println("正在处理用户的post请求......");
    }
    @Override
    public void destroy(){
        System.out.println("正在摧毁Servlet对象......");
    }
}

4.编写loginok.jsp页面
<%--
  Created by IntelliJ IDEA.
  User: 顾念思成
  Date: 2021/4/23
  Time: 10:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>登录成功</title>
</head>
<c:if test="us==null">
    <c:redirect url="login.jsp"></c:redirect>
</c:if>
<body>
    <h3>登录成功</h3>
    <hr>
    <h5>欢迎${us.uname}登录,您的密码是${us.upasswd}!</h5>
</body>
</html>

数据传输过程:

login.jsp【表单post提交】—>dologin.jsp【接收数据表单数据封装成User类对象并设置到request作用域然后跳转到servlet】---->UsersServlet.java【从request中取出数据做判断成功跳转到loginok.jsp把请求和响应也要跳转过去,否则到login.jsp页面】----->loginok.jsp或者login.jsp

演示:

login.jsp
在这里插入图片描述

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个包含登录和注册功能的 JSP 页面、ServletJavaBean 和 MySQL 数据库连接的示例。 1. 登录页面 login.jsp ``` <html> <head> <title>登录页面</title> </head> <body> <h3>用户登录</h3> <form action="loginServlet" method="post"> 用户名:<input type="text" name="username"><br> 密 码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 2. 注册页面 register.jsp ``` <html> <head> <title>注册页面</title> </head> <body> <h3>用户注册</h3> <form action="registerServlet" method="post"> 用户名:<input type="text" name="username"><br> 密 码:<input type="password" name="password"><br> 确认密码:<input type="password" name="confirm_password"><br> <input type="submit" value="注册"> </form> </body> </html> ``` 3. 用户 JavaBean User.java ``` public class User { private String username; private String password; public User() { } public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` 4. 数据库连接工具类 DbUtil.java ``` import java.sql.*; public class DbUtil { private static String driver = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/test"; private static String user = "root"; private static String password = "123456"; public static Connection getConnection() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } } } ``` 5. 登录 Servlet loginServlet.java ``` import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class loginServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DbUtil.getConnection(); String sql = "SELECT * FROM user WHERE username=? AND password=?"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); rs = stmt.executeQuery(); if (rs.next()) { out.println("<html>"); out.println("<head><title>登录结果</title></head>"); out.println("<body>"); out.println("<h3>登录结果</h3>"); out.println("欢迎您," + username); out.println("</body>"); out.println("</html>"); } else { out.println("<html>"); out.println("<head><title>登录结果</title></head>"); out.println("<body>"); out.println("<h3>登录结果</h3>"); out.println("用户名或密码错误,请重新输入!"); out.println("</body>"); out.println("</html>"); } } catch (Exception e) { e.printStackTrace(); } finally { DbUtil.close(conn, stmt, rs); } out.close(); } } ``` 6. 注册 Servlet registerServlet.java ``` import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class registerServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); String confirm_password = request.getParameter("confirm_password"); if (!password.equals(confirm_password)) { out.println("<html>"); out.println("<head><title>注册结果</title></head>"); out.println("<body>"); out.println("<h3>注册结果</h3>"); out.println("两次密码输入不一致,请重新输入!"); out.println("</body>"); out.println("</html>"); out.close(); return; } Connection conn = null; PreparedStatement stmt = null; try { conn = DbUtil.getConnection(); String sql = "INSERT INTO user(username, password) VALUES (?, ?)"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); stmt.executeUpdate(); out.println("<html>"); out.println("<head><title>注册结果</title></head>"); out.println("<body>"); out.println("<h3>注册结果</h3>"); out.println("恭喜您,注册成功!"); out.println("</body>"); out.println("</html>"); } catch (Exception e) { e.printStackTrace(); } finally { DbUtil.close(conn, stmt, null); } out.close(); } } ``` 以上就是一个包含登录和注册功能的 JSP 页面、ServletJavaBean 和 MySQL 数据库连接的示例。如果您有更多的需求,可以根据自己的业务需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值