遇见狂神说 --- [ 文件上传,邮件发送实现 ]

传送门==>B站遇见狂神说


笔记和练习只是跟着视频整理的;但是有的知识点并没有整理进来



文件上传

先创建一个空文件夹的项目;

在这里插入图片描述

在这里插入图片描述

在file处新建module

在这里插入图片描述

在这里插入图片描述


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"
         metadata-complete="true">
</web-app>

浏览器文件上传其实就是以流的方式提交到服务端.

pom.xml文件导入依赖,下载jar包

  <dependencies>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>
    
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
    </dependency>
  </dependencies>

注意

上传文件需要放在外界无法直接访问的目录,例如web-inf目录; 且上传文件的文件名一定要保持唯一性; 网站会限制文件上传的最大值和类型(后缀名);

ServletFileUpload==>处理上传文件数据,将表单的每一项输入封装为Fileltem对象;
解析请求时需要 DiskFileltemFacyory对象


注意 get提交方式;文件大小有限制

提交文件的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--注意 get提交方式;文件大小有限制--%>
<form action="${pageContext.request.contextPath}/upload.do"  enctype="multipart/form-data" method="post">
    上传者:<input type="text" name="user">
    <div><input type="file" name="myFile0"></div>
    <input type="submit" value="上传提交">
    <input type="reset" value="重置页面">
</form>
</body>
</html>

上传后的提示页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
 提示信息===>${message}
</body>
</html>

处理上传的文件

package com.xiaozhi.servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

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.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;

public class FileServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //首先判断表单是否为 ==>上传文件的表单;
        if (!ServletFileUpload.isMultipartContent(req)) {
            //普通表单=>终止方法;
            return;
        }
        String message=null;
        try {
            //带文件的表单;
            //创建上传文件的最终保存地址;
            String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");
            //拿到上传文件时;若保存地址不存在就去创建保存目录;
            File uploadFile = new File(uploadPath);
            if (!uploadFile.exists()) {
                //创建目录;
                uploadFile.mkdir();
            }

            //使用缓存; 当文件过大时;先存为临时文件;
            String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
            //拿到上传文件时;若保存地址不存在就去创建保存目录;
            File tempFile = new File(tempPath);
            if (!tempFile.exists()) {
                //创建临时目录;
                tempFile.mkdir();
            }

            //先创建DiskFileItemFactory对象;=======================================>>>
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            //设置缓冲区大小为 1M;
            diskFileItemFactory.setSizeThreshold(1024 * 1024);
            //临时文件保存目录;
            diskFileItemFactory.setRepository(tempFile);

            //获取ServletFileUpload对象============================================>>>
            //作用是处理上传文件数据,将表单的每一项输入封装为Fileltem对象;
            ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);

            //监听文件上传进度;
            servletFileUpload.setProgressListener(new ProgressListener() {
                //l:已读取的文件大小; l1:文件大小
                public void update(long l, long l1, int i) {
                    System.out.println("文件总大小==>" + l1 + " -已经上传==>" + l);
                }
            });

            //处理文件乱码;
            servletFileUpload.setHeaderEncoding("utf-8");
            //设置单个文件最大值; 3M
            servletFileUpload.setFileSizeMax(3 * 1024 * 1024);
            //设置总大小; 100M
            servletFileUpload.setSizeMax(100 * 1024 * 1024);


            //处理上传的文件;============================================>>>
            //前端请求解析; 封装为fileItem对象
            List<FileItem> fileItems = servletFileUpload.parseRequest(req);
            for (FileItem fileItem : fileItems) {
                //判断是输入框还是上传文件的;
                //注意这个方法: 当返回 false 时才是文件类型的;
                if (fileItem.isFormField()) {
                    //获取其他标签框的name;
                    String name = fileItem.getName();
                    //处理乱码问题;(统一编码)
                    String value = fileItem.getString("utf-8");
                    System.out.println(name + "<--->" + value);
                } else {
                    //获取文件名;
                    String uploadName = fileItem.getName();
                    System.out.println("注意上传的文件名==>" + uploadName);

                    //对空文件名进行限制拦截;
                    if ( uploadName == null||uploadName.trim().equals("")) {
                        continue;
                    }

                    //输入文件的名字;与后缀名;
                    String realName = uploadName.substring(uploadName.lastIndexOf("/") + 1);
                    String nameSuffix = uploadName.substring(uploadName.lastIndexOf(".") + 1);

                    System.out.println("实际文件名==>" + realName + "后缀文件类型=>" + nameSuffix);

                    //使用UUID生成的随机通用码保证文件唯一性;
                    String uploadFileID = UUID.randomUUID().toString();

                    //文件的存放地址问题============================================>>>
                    //文件真实地址加上uuid的通用码;
                    String realPath=uploadPath+"/"+uploadFileID;
                    File realFile = new File(realPath);
                    if (!realFile.exists()) {
                        //创建目录;
                        realFile.mkdir();
                    }

                    //文件传输==>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>流的方式;
                    InputStream inputStream=fileItem.getInputStream();
                    //输出流;
                    FileOutputStream out=new FileOutputStream(realPath+"/"+realName);
                    //创建传输的缓冲区;
                    byte[] bytes=new byte[1024];
                    int len=0;
                    while ((len=inputStream.read(bytes))>0){
                        out.write(bytes,0,len);
                    }
                    //关闭;释放资源;
                    out.close();
                    inputStream.close();
                    message="<==上传成功==>";
                    //清除临时文件;
                    fileItem.delete();
                }
            }
        } catch (FileUploadException e) {
            message="失败!!!";
            e.printStackTrace();
        }
        //转发消息;
        req.setAttribute("message",message);
        req.getRequestDispatcher("info.jsp").forward(req,resp);
    }
}

web.xml配置servlet

<servlet>
   <servlet-name>upload</servlet-name>
   <servlet-class>com.xiaozhi.servlet.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>upload</servlet-name>
   <url-pattern>/upload.do</url-pattern>
</servlet-mapping>

运行

在这里插入图片描述

在这里插入图片描述


邮件发送

首先会把邮件存到服务器;根据对应的邮件;再通过服务器发出.

发送邮件==>SMTP协议;

接收邮件==>POP3协议

需要用到的jar包; mail/1.4.7.jar ; activation/1.1.1.jar
到maven仓库下载

https://mvnrepository.com/artifact/javax.mail/mail/1.4.7

https://mvnrepository.com/artifact/javax.activation/activation/1.1.1

使用到的主要是三个作用对象;

session对象 定义整个程序所需要的环境信息, 例如主机名,端口号,采用邮件发送和接收协议.>
创建 Transport对象 发送邮件
>
引用 message对象 ,表示一封电子邮件


创建一个普通项目后,将jar包导入;

在这里插入图片描述

在jar包存在这个类 ==>MimeMessage
百度

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

在这里插入图片描述

简单的邮件; ===>纯文本邮件
复杂邮件 ==> 有附件,图片…


发送邮件,要先获得协议与支持,开启服务,POP3,SMTP

例如在QQ邮箱开启服务,开启后会生成授权码;

在这里插入图片描述

在这里插入图片描述


实现发送一封纯文本邮件

package com.xiaozhi;

import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;

//尝试发送一封纯文本邮件;
public class TestSendMail01 {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {

        Properties properties=new Properties();
        //设置qq邮件服务器;
        properties.setProperty("mail.host","smtp.qq.com");
        //邮件发送协议;
        properties.setProperty("mail.transport.protocol","smtp");
        //需要验证用户名与密码;
        properties.setProperty("mail.smtp.auth","true");

        //QQ邮箱的SSL加密;
        MailSSLSocketFactory sf=new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable","true");
        properties.put("mail.smtp.ssl.socketFactory",sf);

        //使用JavaMail发送邮件;
        //1.首先创建整个应用程序的全局session对象;(启动==>session销毁结束)
        //QQ的独特创建方式;===>
        Session session=Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                //userName:用户名 password:授权码
                return new PasswordAuthentication("发送人@qq.com","授权码");
            }
        });

        //开启session的debug模式;
        session.setDebug(true);

        //2.session==>获取Transport对象
        Transport ts=session.getTransport();
        //3.使用邮箱的授权码,用户名,连接邮件的服务器;
        ts.connect("smtp.qq.com","发送人@qq.com","授权码");

        //4.创建邮件; 需要传递session;
        MimeMessage message=new MimeMessage(session);
        //需要指明邮件的发送人;
        message.setFrom(new InternetAddress("发送人@qq.com"));
        //指明收件人==> 此处为自发;
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("接收人@qq.com"));
        //邮件标题;
        message.setSubject("在吗在吗","utf-8");
        //文本内容;
        message.setContent("<h3 style='color: #FF1493'>好耶,收到消息的话请回复.</h3>","text/html;charset=UTF-8");

        //5.发送邮件; 需要指明发送的地址;
        ts.sendMessage(message, message.getAllRecipients());
        //6.关闭;
        ts.close();
    }
}

运行,邮件成功发出

在这里插入图片描述


我在刚开始运行时出现了这个错误问题;

Exception in thread "main" javax.mail.internet.ParseException: Expected ';', got ","
	at javax.mail.internet.ParameterList.<init>(ParameterList.java:292)
	at javax.mail.internet.ContentType.<init>(ContentType.java:114)
	at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1331)
	at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2107)
	at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2075)
	at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1770)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
	at com.xiaozhi.TestSendMail01.main(TestSendMail01.java:63)

排除了一下;找到原因是在设置发送文本内容时的;type参数"text/html;charset=UTF-8" 时,把; 写成了,;
还是太马虎了…


发送带有图片的邮件

package com.xiaozhi;

import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties;

public class TestSendMail02 {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {

        Properties properties=new Properties();
        //设置qq邮件服务器;
        properties.setProperty("mail.host","smtp.qq.com");
        //邮件发送协议;
        properties.setProperty("mail.transport.protocol","smtp");
        //需要验证用户名与密码;
        properties.setProperty("mail.smtp.auth","true");

        //QQ邮箱的SSL加密;
        MailSSLSocketFactory sf=new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable","true");
        properties.put("mail.smtp.ssl.socketFactory",sf);

        //使用JavaMail发送邮件;
        //1.首先创建整个应用程序的全局session对象;(启动==>session销毁结束)
        //QQ的独特创建方式;===>
        Session session=Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                //userName:用户名 password:授权码
                return new PasswordAuthentication("发送人@qq.com","授权码");
            }
        });

        //开启session的debug模式;
        session.setDebug(true);

        //2.session==>获取Transport对象
        Transport ts=session.getTransport();
        //3.使用邮箱的授权码,用户名,连接邮件的服务器;
        ts.connect("smtp.qq.com","发送人@qq.com","授权码");

        //4.创建邮件; 需要传递session;
        MimeMessage message=new MimeMessage(session);
        //需要指明邮件的发送人;
        message.setFrom(new InternetAddress("发送人@qq.com"));
        //指明收件人==> 此处为自发;
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("收件人@qq.com"));
        //邮件标题;
        message.setSubject("在吗在吗","utf-8");

        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%图片的发送实现%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%====>
        //首先准备好图片文件;
        MimeBodyPart image=new MimeBodyPart();
        //数据处理图片;
        DataHandler dataHandler=new DataHandler(new FileDataSource("F:\\idea使用\\B站狂神说java\\Web复习狂神说系列\\9月4日学习邮件发送\\java普通程序实现邮件\\src\\com\\xiaozhi\\img0.jpg"));
        image.setDataHandler(dataHandler);
        //设置图片Id;
        image.setContentID("img0.jpg");

        //准备文本需要的数据;
        MimeBodyPart text=new MimeBodyPart();
        //注意要添加图片的引用;
        text.setContent("请您查看图片哦==><img src='cid:img0.jpg'>","text/html;charset=UTF-8");

        //标注发送内容之间的关系;
        MimeMultipart mmp=new MimeMultipart();
        mmp.addBodyPart(text);
        mmp.addBodyPart(image);
        mmp.setSubType("mixed");

        //5.将内容全部添加到邮件中;
        message.setContent(mmp);
        //保存修改;
        message.saveChanges();
        //6.发送邮件; 需要指明发送的地址;
        ts.sendMessage(message, message.getAllRecipients());
        //7.关闭;
        ts.close();
    }
}

运行:已发送;

在这里插入图片描述

这里第一次写的时候,也是出现了一个问题;
text.setContent("请您查看图片哦==><img src='cid:img0.jpg'>","text/html;charset=UTF-8");写的时候没注意到要添加图片引用;
然后邮件发过去的时候图片变成了附件;且下载后格式不对了.


发送带有附件的邮件

注意文件名在设置时要注意编码问题,否则发出去的文件名会乱码的.

file.setFileName(MimeUtility.encodeWord("附件名"));

内容部分,对于不同的版块可进行拼接

//首先准备好图片文件;
MimeBodyPart image=new MimeBodyPart();
//数据处理图片;
DataHandler dataHandler=new DataHandler(new FileDataSource("F:\\idea使用\\B站狂神说java\\Web复习狂神说系列\\9月4日学习邮件发送\\java普通程序实现邮件\\src\\com\\xiaozhi\\img0.jpg"));
image.setDataHandler(dataHandler);
//设置图片Id;
image.setContentID("img0.jpg");

//准备文本需要的数据;
MimeBodyPart text=new MimeBodyPart();
text.setContent("请您查看图片哦==><img src='cid:img0.jpg'>","text/html;charset=UTF-8");

MimeBodyPart file=new MimeBodyPart();
file.setDataHandler(new DataHandler(new FileDataSource("F:\\idea使用\\B站狂神说java\\Web复习狂神说系列\\9月4日学习邮件发送\\java普通程序实现邮件\\src\\com\\xiaozhi\\常用正则表达式.txt")));
//设置文件的名称;注意文件名编码
file.setFileName(MimeUtility.encodeWord("常用正则表达式集锦.txt"));

//先把图片和文本拼接到一块;
MimeMultipart mmp0=new MimeMultipart();
mmp0.addBodyPart(text);
mmp0.addBodyPart(image);
mmp0.setSubType("mixed");

//再把图片和文本拼起来的作为一个主体;
MimeBodyPart mainBody=new MimeBodyPart();
mainBody.setContent(mmp0);

//再把附件拼到主体上;
MimeMultipart all=new MimeMultipart();
all.addBodyPart(file);
all.addBodyPart(mainBody);
all.setSubType("mixed");
//5.将内容全部添加到邮件中;
message.setContent(all);
//保存修改;
message.saveChanges();

使用JavaWeb发送邮件

先创建一个maven项目

pom.xml配置

 <!--导入依赖-->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <!--使用插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
    </dependencies>

实体类User

package com.xiaozhi.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//使用注解;得到一些常用方法;
@Data
//有参构造;
@AllArgsConstructor
//无参构造;
@NoArgsConstructor
public class User {
    private String name;
    private String password;
    private String email;
}

工具类SendEmail;使用多线程的方式;

package com.xiaozhi.utils;

import com.sun.mail.util.MailSSLSocketFactory;
import com.xiaozhi.entity.User;
//注意导包问题;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class SendEmail  extends Thread{
    private User user;

    public SendEmail(User user) {
        this.user=user;
    }
    //发送人邮箱;
    private String fromEamil="发件人@qq.com";
    //发送人授权码;
    private String code="授权码";
    @Override
    public void run() {
        try {
            Properties properties = new Properties();
            //设置qq邮件服务器;
            properties.setProperty("mail.host", "smtp.qq.com");
            //邮件发送协议;
            properties.setProperty("mail.transport.protocol", "smtp");
            //需要验证用户名与密码;
            properties.setProperty("mail.smtp.auth", "true");

            //QQ邮箱的SSL加密;
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            properties.put("mail.smtp.ssl.enable", "true");
            properties.put("mail.smtp.ssl.socketFactory", sf);

            //使用JavaMail发送邮件;
            //1.首先创建整个应用程序的全局session对象;(启动==>session销毁结束)
            //QQ的独特创建方式;===>
            Session session = Session.getDefaultInstance(properties, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //userName:用户名 password:授权码
                    return new PasswordAuthentication(fromEamil, code);
                }
            });

            //开启session的debug模式;
            session.setDebug(true);
            //2.session==>获取Transport对象
            Transport ts = session.getTransport();
            //3.使用邮箱的授权码,用户名,连接邮件的服务器;
            ts.connect("smtp.qq.com", fromEamil, code);

            //4.创建邮件; 需要传递session;
            MimeMessage message = new MimeMessage(session);
            //需要指明邮件的发送人;
            message.setFrom(new InternetAddress(fromEamil));
            //指明收件人==>
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail()));
            //邮件标题;
            message.setSubject("XX注册提示邮件", "utf-8");
            //文本内容;
            message.setContent("用户"+ user.getName()+",您的密码为"+user.getPassword(),
                    "text/html;charset=UTF-8");
            //5.发送邮件; 需要指明发送的地址;
            ts.sendMessage(message, message.getAllRecipients());
            //6.关闭;
            ts.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

模拟注册首页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="${pageContext.request.contextPath}/regist.do" method="post">
    用户:<input name="userName" ><br/>
    密码:<input name="password" type="password"><br/>
    邮箱:<input type="text" name="email"><br/>
    <input type="submit" value="点击注册">
  </form>
  </body>
</html>

模拟成功页面;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
提示消息${success}
</body>
</html>

处理请求的Servlet类

package com.xiaozhi.servlet;
import com.xiaozhi.entity.User;
import com.xiaozhi.utils.SendEmail;
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 UserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收用户请求的参数;
        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        String email = req.getParameter("email");

        //存入用户对象;
        User user=new User(userName,password,email);

        //调用发送邮件的工具类;
        SendEmail sendEmail=new SendEmail(user);
        //启动线程;
        sendEmail.start();

        //转发页面;
        req.setAttribute("success","注册成功");
        req.getRequestDispatcher("success.jsp").forward(req,resp);
    }
}

配置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-->
    <servlet>
        <servlet-name>regist</servlet-name>
        <servlet-class>com.xiaozhi.servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>regist</servlet-name>
        <url-pattern>/regist.do</url-pattern>
    </servlet-mapping>
</web-app>

运行

在这里插入图片描述

在这里插入图片描述


  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小智RE0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值