• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

javac, classpath i servlety

Object Storage Arubacloud
0 głosów
137 wizyt
pytanie zadane 28 października 2019 w Java przez Maju Nowicjusz (120 p.)
edycja 28 października 2019 przez Maju

Cześć,

Prosiłbym o pomoc w następujących sprawach:

1. Podczas próby kompilacji prostego servleta przez cmd, wyskakują mi błędy:

Main1.java:5: error: cannot find symbol
public class Main1 extends HttpServlet
                           ^
  symbol: class HttpServlet
Main1.java:7: error: cannot find symbol
        public void doGet (HttpServletRequest req, HttpServletResponse resp)
                           ^
  symbol:   class HttpServletRequest
  location: class Main1
Main1.java:7: error: cannot find symbol
        public void doGet (HttpServletRequest req, HttpServletResponse resp)
                                                   ^
  symbol:   class HttpServletResponse
  location: class Main1
Main1.java:8: error: cannot find symbol
                             throws ServletException {
                                    ^
  symbol:   class ServletException
  location: class Main1
Main1.java:1: error: package javax.servlet does not exist
import javax.servlet.*;
^
5 errors

Plik, który kompiluje:

import javax.servlet.*;
import java.io.*;


public class Main1 extends HttpServlet
{
	public void doGet (HttpServletRequest req, HttpServletResponse resp) 
	                     throws ServletException {
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		out.println("<html><body>");
		out.println("<h1>Hello Readers</h1>");
		out.println("</body></html>");
	}
}

W cmd próbowałem już wpisywać:

  1. javac -cp C:\tomcat\bin Main1.java
  2. javac -cp C:\tomcat\bin\servlet-api.jar"Main1.java
  3. javac -cp "C:\tomcat\bin" Main1.java
  4. javac -cp "C:\tomcat\bin\servlet-api.jar" Main1.java

dodatkowo mam ustawioną zmienna środowiskową classpath na: C:\tomcat\bin  , próbowałem też dodawać C:\tomcat\bin\servlet-api.jar . Za każdym razem otrzymuje takie same błędy.

Mam też drugi podobny problem dotyczący JSP. W tym przypadku, przy próbie uruchomienia pliku otrzymuje błąd o tym, że zaimportowanie klasy nie są widoczne. Skompilowane klasy umieściłem w "ROOT/WEB_INF/classes/com/rmaj91/servlets/movies", plik index.jsp znajduje się w katalogu głównym. Poniżej treść pliku jsp oraz kod jednej z klas. Dodam, że mam również ustawioną zmienną środowiskową classpath na "c:\tomcat\webapps\ROOT\WEB-INF\classes"

<%@ page import="com.rmaj91.servlets.movies.*" %> 
<%@ page import="java.util.*" %>
<html>
<head>
<title>List Movies: The Servlet</title>
</head>
<body>
<h1>Some of My Favorites</h1>
<h3>
<%= getMovieList() %> 
</h3>
</body>
</html>
<%!
private String getMovieList()
{
String msg = "";
ArrayList<Movie> movies = MovieIO.getMovies(); 
for (Movie m : movies) 
{
msg += m.year + ": ";
msg += m.title + "<br>";
}
return msg; 
}
%>
package com.rmaj91.servlets.movies;

public class Movie {
	public String title;
	public int year;
	public double price;

	public Movie(String title, int year, double price) {
		this.title = title;
		this.year = year;
		this.price = price;
	}
}

Spędziłem nad tym naprawde duzo czasu, przeszukując internet, fora itp. I już naprawde nie wiem skąd wynikają te błędy. Bardzo proszę o pomoc.

Pozdrawiam

komentarz 28 października 2019 przez Aisekai Nałogowiec (42,190 p.)
edycja 28 października 2019 przez Aisekai
Do czego eksprtujesz? Jar czy war? Jak eksportujesz? Mavenem? Środowiskiem? Podczas kompilacji czy budowania sypie błędem?
komentarz 28 października 2019 przez Maju Nowicjusz (120 p.)
Nie bardzo rozumiem o co chodzi w pytaniu, do niczego nie exportuje poprostu używam skompilowanych plików .class. Jeżeli chodzi o pierwsze pytanie to był problem z importem tak jak kolega niżej napisał.

Co do drugiego pytania dot.  .jsp to, żeby sie nie powtarzać umiesilem pytanie w komentarzu do odpowiedzi mbabane. Jeśli możesz to prosiłbym o zaglądniecię.

Pozdrawiam

1 odpowiedź

+1 głos
odpowiedź 28 października 2019 przez mbabane Szeryf (79,280 p.)

Masz złe importy. HttpServlet jest w

import javax.servlet.http.HttpServlet;

Takie importowanie:

import pakiet.*;

"Załącza" tylko klasy znajdujące się w pakiet. Nie jest tak, że jak dasz gwiazdkę to leci także po podpakietach. Trzeba to jawnie zaznaczać:

import pakiet.*; //wszystkie klasy z 'pakiet'
import pakiet.podpakiet.*; //wszystkie kalsy z 'pakiet.podpakiet' 

Według mnie potrenuj kompilowanie z linii komend na jakiś prostych przykładach typu Hello World, a jak chcesz poznać servlety i inne elementy to lepiej będzie jeśli weźmiesz jakieś IDE i tam to zrobisz. Bez IDE bedziesz wykonywał bardzo dużo pracy i tracił czas na tego typu problemy.

komentarz 28 października 2019 przez Maju Nowicjusz (120 p.)

Dzieki!,

Nie byłem świadomy, że importy działają w ten sposób. Mam jeszcze problem z importem własnej klasy do jsp. troche to uprościłem. Sytuacja wygląda tak, to drzewko podkatalogów  w projekcie:

C:\TOMCAT\WEBAPPS\APP1
└───WEB_INF
    └───classes
        └───movies

w C:\TOMCAT\WEBAPPS\APP1, mam plik index.jsp

<%@ page import="movies.* %> 
<%@ page import="java.util.*" %>
<html>
	<head>
		<title>List Movies: The Servlet</title>
	</head>
<body>
	<h1>Some of My Favorites</h1>
	<h3>
		<%= getMovieList() %> 
	</h3>
</body>
</html>

<%!
private String getMovieList()
{
	String msg = "";
	ArrayList<Movie> movies = MovieIO.getMovies(); 
	for (Movie m : movies) 
	{
		msg += m.year + ": ";
		msg += m.title + "<br>";
	}
	return msg; 
}
%>

w folderze movies, dwa skompilowane pliki: Movie.class i MovieIO.class,

treść plików:

package movies;
public class Movie {
	public String title;
	public int year;
	public double price;

	public Movie(String title, int year, double price) {
		this.title = title;
		this.year = year;
		this.price = price;
	}
}
package movies;
import java.io.*;
import java.util.*;

public class MovieIO {
	public static ArrayList<Movie> getMovies() {
		ArrayList<Movie> movies = new ArrayList<Movie>();
		BufferedReader in = getReader("c:\\data\\movies.txt");
		Movie movie = readMovie(in);
		while (movie != null) {
			movies.add(movie);
			movie = readMovie(in);
		}
		return movies;
	}

	private static BufferedReader getReader(String name) {
		BufferedReader in = null;
		try {
			File file = new File(name);
			in = new BufferedReader(new FileReader(file));
		} catch (FileNotFoundException e) {
			System.out.println("The file doesn't exist.");
			System.exit(0);
		}
		return in;
	}

	private static Movie readMovie(BufferedReader in) {
		String title;
		int year;
		double price;
		String line = "";
		String[] data;
		try {
			line = in.readLine();
		} catch (IOException e) {
			System.out.println("I/O Error");
			System.exit(0);
		}
		if (line == null)
			return null;
		else {
			data = line.split("\t");
			title = data[0];
			year = Integer.parseInt(data[1]);
			price = Double.parseDouble(data[2]);
			return new Movie(title, year, price);
		}
	}
}

Gdy chce uruchomic jsp przez tomcata: localhost:8080/app1, dostaje błędy o tresci:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [19] in the jsp file: [/index.jsp]
Movie cannot be resolved to a type
16: private String getMovieList()
17: {
18: 	String msg = "";
19: 	ArrayList<Movie> movies = MovieIO.getMovies(); 
20: 	for (Movie m : movies) 
21: 	{
22: 		msg += m.year + ": ";


An error occurred at line: [19] in the jsp file: [/index.jsp]
MovieIO cannot be resolved
16: private String getMovieList()
17: {
18: 	String msg = "";
19: 	ArrayList<Movie> movies = MovieIO.getMovies(); 
20: 	for (Movie m : movies) 
21: 	{
22: 		msg += m.year + ": ";


An error occurred at line: [20] in the jsp file: [/index.jsp]
Movie cannot be resolved to a type
17: {
18: 	String msg = "";
19: 	ArrayList<Movie> movies = MovieIO.getMovies(); 
20: 	for (Movie m : movies) 
21: 	{
22: 		msg += m.year + ": ";
23: 		msg += m.title + "<br>";


Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:213)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:519)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:392)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

co tym tym przypadku, moze byc powodem?

Podobne pytania

0 głosów
1 odpowiedź 3,431 wizyt
pytanie zadane 9 maja 2017 w Java przez Milesq Nałogowiec (32,020 p.)
0 głosów
1 odpowiedź 147 wizyt
pytanie zadane 29 października 2020 w Java przez Jedwab Użytkownik (550 p.)
0 głosów
2 odpowiedzi 1,810 wizyt
pytanie zadane 6 marca 2019 w Java przez krystian1997 Obywatel (1,020 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...