idea servlet不能创建main方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了idea servlet不能创建main方法?相关的知识,希望对你有一定的参考价值。

在idea中,新建了一个web项目,里面写了个servlet继承了HttpServlet,在这个类中创建main方法,直接右键运行main方法,会提示找不到主类。这是为什么?是idea或者maven做了什么魔术吗?注意看,是idea中,普通用命令java xxxx肯定能运行咯。

参考技术A servlet中没有main方法,是一种服务器端的Java应用程序,新建时直接建一个servlet,而不是一个class, Servlet由Web服务器进行加载

IDEA开发servlet

目录

IDEA快捷键

alt+enter快速生成方法
.sout快速生成print方法
.notnull快速生成结构化if判断语句

开发servlet

新建一个New工程,这里直接点下一步

创建一个projectname为servlet01

目前只是一个空项目,只能做一些简答的文件编写,所以继续添加框架支持

添加完成后来尝试开发一个StudentServlet,内容如下;

package com.xy.javaweb.servlet;
public class StudentServlet implements Servlet 

环境依赖

此时会提示我们并没有Servlet这个接口,所以我们需要将依赖servlet api.jar加入
依赖添加方法:
项目结构–>模块–>依赖

中间部分省略…
servlet代码如下

package com.xy.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class StudentServlet implements Servlet 

    @Override
    public void init(ServletConfig servletConfig) throws ServletException 

    

    @Override
    public ServletConfig getServletConfig() 
        return null;
    

    @Override
    public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException 
        //设置响应类型内容
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        //连接数据库JDBC
        Connection conn =null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try 
            //注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取连接
            String url = "jdbc:mysql://localhost:3306/jdbc";
            String user = "root";
            String password = "redhat";
            conn = DriverManager.getConnection(url,user,password);
            //获取预编译的数据库操作对象
            String sql = "select id, name from t_student";
            ps = conn.prepareStatement(sql);
            //执行SQL
            rs = ps.executeQuery();
            //处理数据集
            while(rs.next())
                String id = rs.getString("id");
                String name = rs.getString("name");
                out.println(id+","+name+"<br>");
            
         catch (ClassNotFoundException | SQLException e) 
            e.printStackTrace();
        finally 
            //释放资源
            //输入rs.notnull会自动弹出下列结构
            if (rs != null) 
                try 
                    rs.close();
                 catch (SQLException throwables) 
                    throwables.printStackTrace();
                
            
            if (ps != null) 
                try 
                    ps.close();
                 catch (SQLException throwables) 
                    throwables.printStackTrace();
                
            
            if (conn != null) 
                try 
                    conn.close();
                 catch (SQLException throwables) 
                    throwables.printStackTrace();
                
            


        
    

    @Override
    public String getServletInfo() 
        return null;
    

    @Override
    public void destroy() 

    


index.html代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>student page</title>
</head>
<body>
 <!-----这里的项目名是/xmm。无法动态获取,先写死-->
 <a href="/xmm/servlet/student">student list</a>
</body>
</html>

关键步骤,关联tomcat并配置项目名:

servlet 对象生命周期

如果在servlet配置文件中添加了<load-on-startup>子标签,越小的子标签优先级越大

    <servlet>
        <servlet-name>aservlet</servlet-name>
        <servlet-class>com.xy.javaweb.servlet.Aservlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>

创建了该标签后,servlet会在服务器启动时会被创建出来【默认情况下,服务器不会去实例化对象,要等用户访问该servlet才会被实例化】


serlvet有5个方法,这里我们拿出来三个做案例
public void init()
public void service()
public void destroy()
1.当有用户访问了servlet时,首先会去执行一个无参数构造方法,例如:

public Aservlet()
	System.out.println("这个是无参数构造方法");

2.接着再去执行init(),用来初始化对象
上面两个方法都仅仅执行一遍,接下来再次刷新servlet的访问时,只会调用到service()方法

3.最后,当关闭tomcat服务器时,则会调用destroy()方法,用来释放内存


提问:
init方法为什么存在,他和无参构造方法有什么关系?
答:init方法就是为了代替构造方法,因为人工去写构造方法可能会定义不当(例如写成有参构造),导致无法进行实例化。
servlet规范中,不建议用户自己去构建构造方法,所以提供了init

以上是关于idea servlet不能创建main方法?的主要内容,如果未能解决你的问题,请参考以下文章

idea运行请求接口失败

IDEA不能运行main方法

idea运行main方法failuretofind

IDEA中怎么多开运行main方法

异常idea执行Main方法出现 Exception in thread "main" java.lang.NoClassDefFoundError: javax/servle(代

创建Servlet项目(IDEA版)