Squeak.ru - шаблоны программирования

При вызове функции Java из сервлета функция не будет выполняться

Я создаю простое веб-приложение Maven на JSP и Java (сервлет). Функциональность моего веб-приложения заключается в поиске в БД лиц, которые в ней зарегистрированы. Он ищет по идентификатору или имени. Итак, у меня есть JSP с формой, которая отправляет данные моему сервлету, и в сервлете я вызываю функцию из класса Java, которая устанавливает соединение с БД и извлекает данные.

Но я упомянул, что функция никогда не вызывает или что-то еще, я не знаю как. Кто-нибудь может помочь?

web.xml:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <display-name>TestServlet</display-name>
    <description></description>
    <servlet-class>mvnproject.servlet.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
  </servlet-mapping>
</web-app>

JSP:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
    <jsp:directive.page contentType="text/html; charset=ISO-8859-1" 
        pageEncoding="ISO-8859-1" session="false"/>
    <jsp:output doctype-root-element="html"
        doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
        omit-xml-declaration="true" />
    <jsp:directive.page import="mvnproject.*" />
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Serch</title>
</head>
<body>
<h1>Zoek Persoon</h1>
        <form action="TestServlet" method="POST">
            <select name="serchOn">
            <option value="ID" name="ID">ID</option>
            <option value="name" name="name">name</option>
            </select>
            <input type="text" name="input"></input>
            <input type="submit" placeholder="Serch"></input>
        </form>
</body>
</html>
</jsp:root>

Сервлет:

package mvnproject.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.connector.Request;

/**
 * Servlet implementation class TestServlet
 */
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());

        Functions f = new Functions();

        String name = request.getParameter("serchOn");
        String input = request.getParameter("input");
        System.out.println(" " + name + " " + input);
        System.out.println("calling db conn function");
        f.dbConn(name, input);
        System.out.println("Script completed");

    }



    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



    }

}

Функции Java:

import java.sql.*;

public class Functions {
  public void dbConn(String nVal, String inpVal){

    System.out.println("Running function...");

    if(nVal != null || inpVal != null){
        String sqlSerch;
        if(nVal.equals("name")){
            sqlSerch = "ID, aNaam FROM profiles WHERE naam = " + nVal;
        }else{
            sqlSerch = "naam, aNaam FROM profiles WHERE ID = " + nVal;
        }

        //driver / db path
            final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
            final String DB_URL = "jdbc:mysql://localhost/profile";
            //DB user&password
            final String USER = "root";
            final String PASS = "Ciber2015!";
            //declare con & sql var
            Connection conn = null;
            Statement stmt = null;
            //register jdbc driver
            try{
                Class.forName(JDBC_DRIVER);
                //make a connection
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                //SQL Statement
                stmt = conn.createStatement();
                String sql = "SELECT"+ sqlSerch;
                ResultSet rs = stmt.executeQuery(sql);

                //Declareer variablen met data uit db
                int id = rs.getInt("id");
                String naam = rs.getString("naam");

                System.out.println(id + naam);

            }catch(Exception e){
                System.out.println("Eception");
            }           

            System.out.println(" - " + nVal + " - " + inpVal);              
    }
}

Скажите, пожалуйста, если я что-то не так делаю.

24.09.2015

  • полный код сервлета, включая фрагмент web.xml? 24.09.2015
  • Пожалуйста, просмотрите это! Действие вашей формы должно соответствовать шаблону URL-адреса, под которым ваш сервлет зарегистрирован в den web.xml stackoverflow.com/questions/23751965/ 24.09.2015
  • Правильно ли я понимаю, что вы видите сообщения calling db conn function и Script completed в консоли, но не видите Running function... между ними? 24.09.2015
  • Нет функции print, вызывающей db, и все, что после нее, не отображается в консоли 24.09.2015
  • @swinkler мой сервлет называется я уверен в этом 24.09.2015
  • Вам нужно будет изменить действие на action="/TestServlet" формы, так как оно должно соответствовать URL-шаблону сервлета. 24.09.2015
  • @Rahul, если я так делаю, я получаю 404, это не значит, что я не могу добраться до сервлета 24.09.2015
  • Не могли бы вы выложить вывод консоли - я не очень понимаю, что печатается, а что нет. Спасибо 24.09.2015
  • Кажется, ваш сервлет вообще не выполняется. Можете ли вы отладить его, чтобы увидеть, выполняется ли метод doGet / doPost? Или добавьте System.out.println("running doGet"); (соответственно doPost) в качестве первой строки в каждом методе. 24.09.2015
  • Это то, что я получаю, если ищу ID, а значение поиска равно 3: ID 3 Вот и все 24.09.2015
  • Ваш метод http - POST, а метод сервлета - doGet(). Я считаю это неправильным, они должны быть идентичны. doPost() метод обрабатывает POST запросы, а doGet() метод обрабатывает GET запросов. 24.09.2015
  • Мой сервлет на 100% работает, иначе я бы не увидел, какой идентификатор или имя были переданы. И я сначала попробовал это в посте do, но кто-то сказал мне, что мне нужно использовать doGet. Так что я не знаю, какой из них использовать @Jozef 24.09.2015
  • Совет: имейте в виду, условие nVal == "name" не в том, как вы сравниваете Strings, используйте метод String equals(). Строка должна стать если (nVal.equals("name")) {//code} 24.09.2015
  • @drgPP я знаю, твое право 24.09.2015
  • Что ж, я не вижу другого выхода, кроме отладки сервлета в среде IDE, чтобы увидеть, что происходит после строки System.out.println(" " + name + " " + input);. Кстати. в вашем случае не имеет значения, используете ли вы метод GET или POST, просто будьте последовательны. 24.09.2015

Ответы:


1

Так что для тех, кого это интересует, проблема была не в моем коде, а в затмении. На нем была запущена старая версия моего проекта, а новая была сохранена. Спасибо за ваше время, нежные (wo) мужчины

24.09.2015
  • Ой! Поэтому я плачу за JRebel ;-) 24.09.2015
  • Да, я не хочу платить: хаха, я всего лишь студент 24.09.2015
  • Я просто хотел дать решение, которое сработало для меня, но больше не повторится. 24.09.2015
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...