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文件。
不知道你这个问题是否已经解决, 如果还没有解决的话:1.<%@ page contentType=“text/html;charset=UTF-8” %>
charset设置与浏览器匹配的字符集
2.<%@ page import=“java.*” pageEncoding=“UTF-8” %>
pageEncoding设置字符集,与浏览器匹配
3.idea设置统一字符集
这个问题的原因是在运行Servlet页面时,由于某些原因进入了基类中,而基类中没有返回任何内容,导致页面空白。解决方法是将基类中的@WebServlet("/*")注解去掉,只在需要继承该基类的子类中进行注解。具体步骤如下:
找到基类LyyBaseServlet中的@WebServlet("/*")注解,将其删除。
在需要继承该基类的Servlet子类中添加@WebServlet注解,指定urlPatterns为需要处理的url。
例如,在处理商品信息的GoodServlet中加上@WebServlet(urlPatterns = {"/GoodServlet"})注解。
例如,在insert.jsp中将form的action改为"${path}/GoodServlet?m=insert"。
代码示例:
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>