it-swarm-id.com

request.getServletContext () tidak ditemukan, bahkan dengan JAR baru

Kompiler saya tidak dapat menemukan HttpServletRequest getServletContext () metode. 

Saya tidak melakukan sesuatu yang terlalu rumit:

public static void setMySortedSet(HttpServletRequest request, SortedSet<String> set) 
{
   setMySortedSet(request.getServletContext(), set);
}

Beberapa pemecahan masalah yang telah saya coba:

  • Menemukan metode ini dibuat di 2.3, jadi saya memasukkan JAR yang mencerminkan itu (dan memilikinya di jalur build Eclipse saya)
  • Saya menyertakan JAR di build.xml classpath saya.

Ketika saya menggunakan Eclipse metode ditemukan tetapi ketika saya mencoba untuk membangun kelas saya melihat ini:

compile:
[javac] Compiling 1 source files to C:\...\workspace\proj\build\WEB-INF\classes
[javac] C:\...\workspace\proj\src\main\Helper.Java:26: cannot find symbol
[javac] symbol  : method getServletContext()
[javac] location: interface javax.servlet.http.HttpServletRequest
[javac]     return getURISet(request.getServletContext());
[javac]                       ^
[javac] Note: C:\...\workspace\proj\src\main\Helper.Java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 1 error

Adakah ide tentang apa yang bisa saya lewatkan? Saya menghargai tanggapan apa pun.

15
Dave Brock

Menurut metode Javadoc the ServletRequest#getServletContext() diperkenalkan di Servlet 3.0, bukan 2.3. Anda perlu menginstal dan mengintegrasikan wadah Servlet 3.0 yang kompatibel seperti Tomcat 7 , Glassfish 3 , dll di Eclipse dan mengatur Target Runtime Proyek Dinamis Web Anda ke wadah itu. Ketika Anda melakukannya dengan benar, maka Anda melakukan tidak perlu secara manual mengutak-atik path build atau build.xml sama sekali, Eclipse akan menanganinya untuk Anda secara otomatis. Anda juga melakukan tidak perlu mengunduh file JAR longgar dari servletcontainer sewenang-wenang dari merek/versi yang berbeda dan memasukkannya ke dalam buildpath Anda. Itu hanya akan menyebabkan masalah classpath dan portabilitas masa depan.

Lihat juga:

17
BalusC

Metode getServletContext() diperkenalkan di Servlet 3.0, bukan 2.3. Tetapi jika Anda ingin mendapatkan ServletContext maka metode alternatif untuk mendapatkannya adalah:

ServletContext context = request.getSession().getServletContext();

if (username != "" & username != null ) {
    context.setAttribute("savedUserName", username);
}
writer.println("Context Parameter : " + (String)context.getAttribute("savedUserName"));

Dengan cara ini Anda bisa mendapatkan Nilai Parameter Permintaan yang disimpan di browser yang berbeda ....

26
Neha Velhal

Saya memiliki masalah yang sama baru-baru ini. Bahkan itu mulai terjadi setelah menambahkan beberapa toples baru. Ant menemukan kelas HttpServletRequest di Selenium-server.jar yang secara alfabetis lebih dulu sebelum servlet-api.jar (yang seharusnya digunakan). Jadi saya mengganti nama Selenium-server.jar menjadi x-Selenium-server. stoples dan semuanya mulai membangun OK, seperti dulu.

1
Vitalii

Ini bukan masalah dengan kompiler Java Anda. javax disediakan oleh servlet container itu sendiri dan Anda harus memasukkan file jar servlet container ke pengaturan proyek Anda.

javax.servlet.http dan semua kelas yang terkait konteks servlet dan pemrograman servlet hanya terkait dengan Servlet Container Anda. Jadi berhentilah khawatir tentang hal lain dan periksa apakah perpustakaan Tomcat termasuk dalam jalur kelas WEB-APP Anda.

Jika tidak menambahkannya dan semuanya akan baik-baik saja.

Klik kanan pada proyek Anda> Properti> Tambah Perpustakaan> Server Runtime

dan pilih server Anda yang terkait dengan aplikasi Anda.

Anda selesai, ini akan mencakup pustaka Servlet Container ke proyek Anda dan kelas HttpServletRequest & HttpServletResponse akan diselesaikan.

Semoga bisa membantu, informasi lebih lanjut tentang Arsitektur dan konteks Servlet dapat ditemukan Di sini.

0
neel4soft