idea这个问题怎么解决

idea中出现这个错误是因为什么?
运行web项目,jsp可以运行出来,但是servlet页面出不来。异常的原因是因为什么呀?
希望大家可以帮助我一下。


```java
package moon.sun;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.*;
public class Lottery_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void  service(HttpServletRequest request,HttpServletResponse response)
                       throws IOException{
      request.setCharacterEncoding("utf-8");
      response.setContentType("text/html;charset=utf-8");
      PrintWriter out=response.getWriter();
      out.println("<html><body bgcolor=cyan>");
      String digitRedball = request.getParameter("digitRedball");
      String digitBlueball = request.getParameter("digitBlueball");
      if(digitRedball.length()==0 ||digitBlueball.length()==0) {
          response.sendRedirect("buyLottery.jsp");//重定向到输入数据页面。
          return;
      }
      //用户买的全部红,蓝球号码:
      HashSet<Integer> userRedball =  getUserDigit(digitRedball);
      HashSet<Integer> userBlueball = getUserDigit(digitBlueball);
      if(userRedball.size()!=6||userBlueball.size()!=1){
          response.sendRedirect("buyLottery.jsp");//必须是红球6个,篮球1个。
          return;
      }
      HashSet<Integer> drawLotteryRedball = drawLottery(6,33);//摇奖出的红球。
      HashSet <Integer> drawLotteryBlueball = drawLottery(1,16);//摇奖出的篮球。
      out.print("<h1>摇奖出的红球<br>"+drawLotteryRedball.toString()+"<br>");
      out.print("摇奖出的蓝球"+drawLotteryBlueball.toString()+"</h1>");
      drawLotteryRedball.removeAll(userRedball);//摇奖出的红球去除用户买的红球号码。
      drawLotteryBlueball.removeAll(userBlueball);//摇奖出的篮球球去除用户买的蓝球号码。
      int leftRedball = drawLotteryRedball.size(); //剩余的红球数量。
      int leftBlueball = drawLotteryBlueball.size();//剩余的篮球数量。
      if(leftRedball == 0&&leftBlueball == 0){    //为了减少代码,减少了中奖分类。
          out.println("<h1>头奖</h1>");
      }
      else if(leftRedball == 0&&leftBlueball == 1){
          out.println("<h1>二等奖</h1>");
      }
      else if(leftRedball == 1&&leftBlueball == 0){
          out.println("<h1>三等奖</h1>");
      }
      else{
          out.println("<h1>没中奖</h1>");
      }
      out.print("<h1>用户买的红球<br>"+userRedball.toString()+"<br>");
      out.print("用户买的蓝球"+userBlueball.toString()+"</h1>");
   } 
   public HashSet<Integer> getUserDigit(String input){
      HashSet<Integer> set = new HashSet<Integer>();
      Pattern pattern;          //模式对象。
      Matcher matcher;          //匹配对象。
      String regex="[0-9][0-9]*" ;//匹配正整数的正则表达式。
      pattern = Pattern.compile(regex); //初试化模式对象。
      matcher = pattern.matcher(input); //初始化匹配对象,用于检索input。
      double sum = 0;
      while(matcher.find()) {
         String str = matcher.group(); 
         set.add(Integer.parseInt(str));//用户买的彩票号码放入集合。
      } 
      return set;
   }
    public HashSet<Integer> drawLottery(int count,int allNumber){ 
        LinkedList<Integer> saveNumber = new LinkedList<Integer>();//存放数。
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i=1;i<=allNumber;i++) { //1到allNumber(球号)
            saveNumber.add(i);          //顺序存入链表saveNumber。
        } 
        Random random = new Random(); 
        while( count > 0) {
           int index = random.nextInt(saveNumber.size());  
           int number = saveNumber.remove(index); //抽取一个球不放回
           count--;
           set.add(number);////开奖号码放入集合。
        }
        return  set;  
    }
}



```java
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package moon.sun;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Lottery_Servlet extends HttpServlet {
    public Lottery_Servlet() {
    }

    public void init(ServletConfig var1) throws ServletException {
        super.init(var1);
    }

    public void service(HttpServletRequest var1, HttpServletResponse var2) throws IOException {
        var1.setCharacterEncoding("utf-8");
        var2.setContentType("text/html;charset=utf-8");
        PrintWriter var3 = var2.getWriter();
        var3.println("<html><body bgcolor=cyan>");
        String var4 = var1.getParameter("digitRedball");
        String var5 = var1.getParameter("digitBlueball");
        if (var4.length() != 0 && var5.length() != 0) {
            HashSet var6 = this.getUserDigit(var4);
            HashSet var7 = this.getUserDigit(var5);
            if (var6.size() == 6 && var7.size() == 1) {
                HashSet var8 = this.drawLottery(6, 33);
                HashSet var9 = this.drawLottery(1, 16);
                var3.print("<h1>摇奖出的红球<br>" + var8.toString() + "<br>");
                var3.print("摇奖出的蓝球" + var9.toString() + "</h1>");
                var8.removeAll(var6);
                var9.removeAll(var7);
                int var10 = var8.size();
                int var11 = var9.size();
                if (var10 == 0 && var11 == 0) {
                    var3.println("<h1>头奖</h1>");
                } else if (var10 == 0 && var11 == 1) {
                    var3.println("<h1>二等奖</h1>");
                } else if (var10 == 1 && var11 == 0) {
                    var3.println("<h1>三等奖</h1>");
                } else {
                    var3.println("<h1>没中奖</h1>");
                }

                var3.print("<h1>用户买的红球<br>" + var6.toString() + "<br>");
                var3.print("用户买的蓝球" + var7.toString() + "</h1>");
            } else {
                var2.sendRedirect("buyLottery.jsp");
            }
        } else {
            var2.sendRedirect("buyLottery.jsp");
        }
    }

    public HashSet<Integer> getUserDigit(String var1) {
        HashSet var2 = new HashSet();
        String var5 = "[0-9][0-9]*";
        Pattern var3 = Pattern.compile(var5);
        Matcher var4 = var3.matcher(var1);
        double var6 = 0.0D;

        while(var4.find()) {
            String var8 = var4.group();
            var2.add(Integer.parseInt(var8));
        }

        return var2;
    }

    public HashSet<Integer> drawLottery(int var1, int var2) {
        LinkedList var3 = new LinkedList();
        HashSet var4 = new HashSet();

        for(int var5 = 1; var5 <= var2; ++var5) {
            var3.add(var5);
        }

        Random var8 = new Random();

        while(var1 > 0) {
            int var6 = var8.nextInt(var3.size());
            int var7 = (Integer)var3.remove(var6);
            --var1;
            var4.add(var7);
        }

        return var4;
    }
}



类型 异常报告

消息 实例化Servlet类[moon.sun.Lottery_Servlet]异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

javax.servlet.ServletException: 实例化Servlet类[moon.sun.Lottery_Servlet]异常
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:682)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:617)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:932)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1695)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:748)
根本原因。

java.lang.ClassNotFoundException: moon.sun.Lottery_Servlet
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1420)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1228)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:682)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:617)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:932)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1695)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:748)

你这个可能和这个 https://blog.csdn.net/m0_46671240/article/details/121073240 文章的情况是样的,没有编译输出class文件。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7791213
  • 这篇博客你也可以参考下:idea环境下 servlet配置导致jsp页面显示源码问题
  • 除此之外, 这篇博客: idea Servlet中乱码问题中的 idea jsp文件在页面显示乱码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    1.<%@ page contentType=“text/html;charset=UTF-8” %>
    charset设置与浏览器匹配的字符集
    2.<%@ page import=“java.*” pageEncoding=“UTF-8” %>
    pageEncoding设置字符集,与浏览器匹配
    3.idea设置统一字符集在这里插入图片描述

  • 以下回答来自chatgpt:

    这个问题的原因是在运行Servlet页面时,由于某些原因进入了基类中,而基类中没有返回任何内容,导致页面空白。解决方法是将基类中的@WebServlet("/*")注解去掉,只在需要继承该基类的子类中进行注解。具体步骤如下:

    1. 找到基类LyyBaseServlet中的@WebServlet("/*")注解,将其删除。

    2. 在需要继承该基类的Servlet子类中添加@WebServlet注解,指定urlPatterns为需要处理的url。

    例如,在处理商品信息的GoodServlet中加上@WebServlet(urlPatterns = {"/GoodServlet"})注解。

    1. 将处理页面的url改为对应子类的url。

    例如,在insert.jsp中将form的action改为"${path}/GoodServlet?m=insert"。

    1. 如果还有其他Servlet子类需要继承该基类,同样进行步骤2和3的修改即可。

    代码示例:

    LyyBaseServlet.java

    public class LyyBaseServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("application/json;chartset=utf-8");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request,response);
        }
    
        protected void jsonResponse(HttpServletResponse response,Object o) throws IOException {
            ObjectMapper mapper=new ObjectMapper();
            mapper.writeValue(response.getOutputStream(),o);
        }
    }
    

    GoodServlet.java

    @WebServlet(urlPatterns = {"/GoodServlet"})
    public class GoodServlet extends LyyBaseServlet {
        // ...
    }
    

    insert.jsp

    <form action="${path}/GoodServlet?m=insert" method="post" align="center">
        <!-- ... -->
    </form>
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^