当前位置: 首页 > 知识库问答 >
问题:

JavaEE/Tomcat 9.0.0/IntellijIdea 2016.2:至少一个JAR扫描了TLD,但未包含TLD

卢朝
2023-03-14

启动应用程序时出现问题。它抱怨说:

ScanJars至少对一个JAR进行了TLD扫描,但没有TLD。启用此记录器的调试日志记录,以获取已扫描但未在其中找到TLD的JAR的完整列表。在扫描过程中跳过不需要的JAR可以改善启动时间和JSP编译时间。

有截图输出的链接

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
           version="3.1">

    <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/users</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/context.xml</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
</web-app>

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/users"
              global="jdbc/users"
              auth="Container"
              type="javax.sql.DataSource"
              username="root"
              password="admin"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/users" />
</Context>

InputServlet

package pl.javastart.prepared.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

@WebServlet("/InputServlet")
public class InputServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {

        Connection conn = null;
        ResultSet resultSet = null;
        Statement statement = null;

        try {
            Context initialContext = new InitialContext();
            Context envContext = (Context) initialContext
                    .lookup("java:comp/env");
            DataSource ds = (DataSource) envContext.lookup("jdbc/users");
            conn = ds.getConnection();

            statement = conn.createStatement();
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            // pass2" OR '1'='1'; --
            final String sqlQuery = "SELECT username, password FROM user WHERE "
                    +"username=" + "\"" + username + "\" "
                    +"AND "
                    +"password=" + "\"" + password + "\";";
            System.out.println(sqlQuery);
            resultSet = statement.executeQuery(sqlQuery);

            if(resultSet.next()) {
                String userFound = resultSet.getString("username");
                request.getSession().setAttribute("username", userFound);
                if("admin".equals(userFound)) {
                    request.getSession().setAttribute("privigiles", "all");
                } else{
                    request.getSession().setAttribute("privigiles", "view");
                }
            } else {
                request.getSession().setAttribute("username", "Nieznajomy");
                request.getSession().setAttribute("privigiles", "none");
            }
            request.getRequestDispatcher("result.jsp").forward(request, response);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                resultSet.close();
                statement.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
<h1>Welcome <%= session.getAttribute("username") %></h1>
<h2>Your privigiles: <%= session.getAttribute("privigiles") %></h2>
</body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Log in</title>
</head>
<body>
<h1>Log in</h1>
<form action="InputServlet" method="post">
  <input type="text" placeHolder="Username" name="username">
  <br>
  <input type="password" placeHolder="Password" name="password">
  <br>
  <input type="submit" value="Zaloguj">
</form>
</body>
</html>

旧版本的Tomcat解决方案在此不起作用

共有1个答案

龙宣
2023-03-14

web.xml中添加servlet映射:

<servlet>
    <servlet-name>InputServlet</servlet-name>
    <servlet-class>pl.javastart.prepared.servlet.InputServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>InputServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
 类似资料:
  • 我一直在Tomcat7.30(eclipse juno)上得到这一点 至少对一个罐子进行了TLD扫描,但没有TLD。启用此记录器的调试日志记录,以获取已扫描但未在其中找到TLD的JAR的完整列表。在扫描过程中跳过不需要的JAR可以改善启动时间和JSP编译时间。 好吧,我在中进行了操作,并将所有转换为并取消了对该行的注释 我仍然看到 那么我该怎么做才能看到那些罐子呢? 日志位置: tomcat日志位

  • 当通过ant启动应用程序或编译JSP时,Tomcat7Jasper抱怨JAR文件过多或放错位置。我收到下面的消息 在tomcat中,如何在扫描过程中跳过不需要的JAR可以提高启动时间和JSP编译时间? 如何赋能更好的输出?

  • 下面的查询正在从关系表中收集内容ID。它是确保我的结果有至少2个关键字匹配。 我的问题是,我也有一个“硬关键字”(假设ID 127),这意味着我需要确保硬关键字是必须包含的。我想我需要修改我的子句,但我不知道如何修改。

  • 我是Java EE的新手,尝试使用ServletContextListener,监听器作业是连接到数据库bla bla。当我尝试启动服务器(Tomcat9),它卡在: “信息:已扫描至少一个JAR以查找TLD,但未包含TLD。请为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的JAR的完整列表。在扫描期间跳过不需要的JAR可以改善启动时间和JSP编译时间。” 于是我把“日志属性文件”中

  • 我是JavaEE新手,尝试使用ServletContextListener,侦听器的工作是连接到数据库BLABLA。当我试图启动服务器(Tomcat 9)时,它被卡在: “信息:至少有一个JAR已扫描TLD,但未包含TLD。为此记录器启用调试日志记录,以获取已扫描但未找到TLD的JAR的完整列表。在扫描过程中跳过不需要的JAR可以缩短启动时间和JSP编译时间。” 所以我在“日志属性文件”中更改了一