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>uploadtitle>
  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"文件提交成功");
        }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>uploadservlet-name>
    <servlet-class>com.jqe.file.servlet.UploadServletservlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>uploadservlet-name>
    <url-pattern>/uploadurl-pattern>
  servlet-mapping>

该回答引用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编码。