qq_57931996 2023-03-15 12:29 采纳率: 88.9%
浏览 21
已结题

JSP web应用开发

JSP 上传文件
主要问题:可以获取到上传文件的内容但是网页出现NullPointer报错理想效果应该是打印出“文件上传成功"
次要问题:文件上传获取的sava.txt文件中文是乱码的
文件相关代码下面已给出
上传页面

img

网页报错

img


上传的文件内容

img


获取的文件内容

img

书上的实例

img

img

img

img

img

jsp文件
```html

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <head>
    <title>upload</title>
  </head>
  <body>
    <form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    </br>
    <input type="submit" value="开始上传">
    </form>
  </body>
</html>

servlet文件

package com.jqe.file.servlet;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberInputStream;
import java.io.LineNumberReader;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UploadServlet extends HttpServlet{
    private PrintWriter out;
    @Override
    protected void doPost(HttpServletRequest req,HttpServletResponse resp)
    {
        try{
            req.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(req.getInputStream()));
            File file=new File("e://save.txt");
            if(!file.exists()){
                file.createNewFile();
            }
            File fileTemp=new File("e://temp.txt");
            if(!fileTemp.exists()){
                fileTemp.createNewFile();
            }
            BufferedWriter bufferedWriter= new BufferedWriter(new FileWriter(fileTemp));
            String str=null;
            int maxNumLine=0;
            while((str=bufferedReader.readLine())!=null){
                maxNumLine++;
                bufferedWriter.write(str);
                bufferedWriter.newLine();
                bufferedWriter.flush();
            }
            bufferedWriter.close();
            bufferedReader.close();
            BufferedReader bufferedReader1=new BufferedReader(new FileReader(new File("e://temp.txt")));
            BufferedWriter bufferedWriter1=new BufferedWriter(new FileWriter(file));
            String str1=null;
            int num=0;
            while((str1=bufferedReader1.readLine())!=null){
                num++;
                if(num>4&&num<maxNumLine){
                    bufferedWriter1.write(str1);
                    bufferedWriter1.newLine();
                    bufferedWriter1.flush();
                }
            }
            bufferedReader1.close();
            bufferedWriter1.close();
            fileTemp.delete();
            out.println("文件提交成功");
        }catch(UnsupportedEncodingException e){
            //TODO Auto-generated catch block
            e.printStackTrace();
            out.println("其他错误");
        }catch(IOException e){
            //TODO Auto-generated catch block
            out.println("文件提交失败");
            e.printStackTrace();
        }
    }
}
web.xml
```html


  <servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>com.jqe.file.servlet.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>upload</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>
  • 写回答

1条回答 默认 最新

  • MarkHan_ 2023-03-15 13:30
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    在你的UploadServlet中,out变量没有被初始化,所以在out.println("文件提交成功")处会抛出NullPointerException异常。你需要将out初始化为resp.getWriter(),如下所示:

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            req.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
            out = resp.getWriter();  // 初始化out
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(req.getInputStream()));
            // ...
    
    
    

    至于文件内容出现乱码的问题,可能是因为你在读写文件时没有指定正确的字符编码。在读取文件时,你可以指定文件编码为UTF-8,如下所示:

    BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(new FileInputStream("e://temp.txt"), "UTF-8"));
    
    
    

    在写文件时,你可以使用BufferedWriter的构造函数指定文件编码为UTF-8,如下所示:

    BufferedWriter bufferedWriter1 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
    
    
    

    请注意,为了正确地处理文件编码,你需要确保上传的文件本身采用UTF-8编码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等