服务器在切换到Java1.7和eclipse时未正确地将Ajax映射到Servlet
TLDR:如果我使用Tomcat而不是Glassfish,或者使用jkd 1.7而不是JDK1.8,我是否必须使用不同的语法来访问我的servlet?我无法让jquery ajax与servlet通信(在Eclipse1.7JDK tomcat中,而不是在Netbeans1.8JDK glassfish中) 我正在尝试将我的项目从NetBeans1.8JDK转换为Eclipse1.7JKD 它在Netbeans中运行良好。我花了5个多小时试图让它在Eclipse上运行 我认为问题在于它没有将我的ajax“搜索”映射到servlet“/search” servlet被注释服务器在切换到Java1.7和eclipse时未正确地将Ajax映射到Servlet,java,ajax,eclipse,servlets,netbeans,Java,Ajax,Eclipse,Servlets,Netbeans,TLDR:如果我使用Tomcat而不是Glassfish,或者使用jkd 1.7而不是JDK1.8,我是否必须使用不同的语法来访问我的servlet?我无法让jquery ajax与servlet通信(在Eclipse1.7JDK tomcat中,而不是在Netbeans1.8JDK glassfish中) 我正在尝试将我的项目从NetBeans1.8JDK转换为Eclipse1.7JKD 它在Netbeans中运行良好。我花了5个多小时试图让它在Eclipse上运行 我认为问题在于它没有将我的
@WebServlet(name = "SearchServlet", urlPatterns = {"/search"})
我必须假设这适用于JDK1.7
我在添加与netbeans相同的glassfish服务器时遇到问题。我设法添加了它,但后来它消失了,我没有任何可用的服务器,直到我放弃并安装了tomcat。但是,我不知道您是否应该进一步配置它
我试图通过将glassfish服务器工具拖到IDE中来添加它,但它没有说明要更新的内容:没有要更新的内容。所以我只是坚持用tomcat
以下是我运行jsp时的日志:
Apr 20, 2015 1:48:48 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:animelist1' did not find a matching property.
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version: Apache Tomcat/8.0.21
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built: Mar 23 2015 14:11:21 UTC
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number: 8.0.21.0
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name: Windows 7
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version: 6.1
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture: amd64
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home: C:\Program Files\Java\jdk1.7.0_79\jre
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version: 1.7.0_79-b15
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor: Oracle Corporation
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE: C:\Users\J\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME: C:\Program Files\apache-tomcat-8.0.21
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=C:\Users\J\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=C:\Program Files\apache-tomcat-8.0.21
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dwtp.deploy=C:\Users\J\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=C:\Program Files\apache-tomcat-8.0.21\endorsed
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dfile.encoding=Cp1252
Apr 20, 2015 1:48:48 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.7.0_79\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Google\Cloud SDK\google-cloud-sdk\bin;C:\Program Files\Java\jdk1.7.0_79\jdk1.7.0_79\bin;.
Apr 20, 2015 1:48:48 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Apr 20, 2015 1:48:48 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Apr 20, 2015 1:48:48 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Apr 20, 2015 1:48:48 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Apr 20, 2015 1:48:48 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 772 ms
Apr 20, 2015 1:48:48 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 20, 2015 1:48:48 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.21
Apr 20, 2015 1:48:49 PM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Apr 20, 2015 1:48:49 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Apr 20, 2015 1:48:49 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Apr 20, 2015 1:48:49 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1162 ms
以下是我试图通过单击jsp上的按钮进行搜索时的日志:
Apr 20, 2015 1:50:11 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet SearchServlet as unavailable
Apr 20, 2015 1:50:11 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet SearchServlet
javax.naming.NameNotFoundException: Name [main.SearchServlet/annj] is not bound in this Context. Unable to find [main.SearchServlet].
at org.apache.naming.NamingContext.lookup(NamingContext.java:818)
at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
at org.apache.catalina.core.DefaultInstanceManager.lookupFieldResource(DefaultInstanceManager.java:573)
at org.apache.catalina.core.DefaultInstanceManager.processAnnotations(DefaultInstanceManager.java:461)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:144)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:121)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1095)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
第一次搜索之后的进一步搜索给出以下信息:
POST http://localhost:8080/animelist1/search 404 (Not Found)jQuery.ajaxTransport.send @ jquery-1.10.2.js:8706jQuery.extend.ajax @ jquery-1.10.2.js:8136(anonymous function) @ basic.js:8jQuery.event.dispatch @ jquery-1.10.2.js:5095jQuery.event.add.elemData.handle @ jquery-1.10.2.js:4766
我不得不更改我的环境变量以降级到JDK1.7。我已将它们放在下面,以防它们不正确并导致问题(一直在与它们纠缠不休,但我认为它们现在是这样的):
(没有添加/更改用户变量)
系统变量:
路径
爪哇之家酒店
C:\Program Files\Java\jdk1.7.0_79
我即将放弃并恢复使用Netbeans 1.8 JDK,并将我的web项目上传到Google App Engine(仅适用于1.7)之外的其他地方。我会再给它一个小时,以防有人能帮助我,但我已经花了太长时间浪费我的时间,当有另一个选择
就像我说的,我怀疑问题与我的服务器配置或与此相关的文件有关。下面我将粘贴我的ajax和servlet。它们都可以在NetBeans1.8JDK中工作,但可能需要为Eclipse1.7JDK进行更改
谢谢你的阅读
Jquery
$(document).ready(function () {
$('#searchForm').submit(function () {
$.ajax({
url: 'search',
type: 'POST',
dataType: 'text',
data: $('#searchForm').serialize(),
success: function (data) {
$('#displaySearchResults').html(data);
// $('#displaySearchResults').slideDown(500);
//
$("#sortable1").empty();
$.each(JSON.parse(data), function (listID, mapData) {
$("#sortable1").append(
"<li class=userList><div class=selectedItemId id=" + mapData.id + "><img class=selectedItemImg src="
+ mapData.url + " alt=" + mapData.name
+ " style='width:216px;height:300px'></img><div id='animeTitle'>"
+ mapData.name+ "</div></div></li>");
// <ul id="sortable1" class="connectedSortable">
// <li class="ui-state-default">Item 1</li>
// var d1 = mapData.id;
// var d2 = d1.replace("'","");
// var div = document.createElement(d2);
// document.body.appendChild(div);
// $("#"+divName).text(mapData.id);
// $("#displaySearchResults2").text(mapData.name);
// $("#displaySearchResults3").text(mapData.url);
});
}
});
return false;
});
});
TLDR:如果我使用Tomcat而不是Glassfish,或者使用jkd 1.7而不是JDK1.8,我是否必须使用不同的语法来访问我的servlet?我无法让jquery ajax与servlet通信(在Eclipse1.7JDK tomcat中,而不是在Netbeans1.8JDK glassfish中)正如我所知,表示法 @WebServlet(name=“SearchServlet”,urlPatterns={”/search“}) 仅适用于JDK1.8 但是,如果您仍然使用JDK1.7,请忘记符号并用此映射填充web.xml
<servlet>
<servlet-name>search</servlet-name>
<servlet-class>yourPackage.search</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>search</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>
搜索
yourPackage.search
搜索
/搜寻
它与Java版本无关@WebServlet是JEE注释,而不是标准的JDK注释。由于这是一个标准,它在Tomcat和Glassfish中的作用是相同的。您唯一的问题可能是辅助Eclipse中的应用程序部署尚未正常工作。如中所示:servlet类文件根本没有部署到服务器上。谢谢您的回答。我工作了这么久,我想我们很接近了。我明白你刚才说的话了。我有一种“感觉”,这可能与我需要重新指定主/基/根位置有关。。。我这样说是因为在netbeans版本中,我通过访问或访问jsp,而在eclipse版本中,我需要访问或。对于eclipse,转到404s。为什么会这样?谢谢你!!!我将/添加到我的server.xml文件中,页面在localhost:8080加载,但现在它在打开。这意味着需要配置一些不同的东西来告诉它从哪里“开始寻找”东西。。。。
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package main;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.gson.Gson;
import entities.Anime;
import entities.Ann;
import entities.Info;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author J
*/
@WebServlet(name = "SearchServlet", urlPatterns = {"/search"})
public class SearchServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@EJB
private AnnJAXB annj;
// @EJB
// private AnnJAXB annJAXB = new AnnJAXB();
@EJB
private Ann ann;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet SearchServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet SearchServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// processRequest(request, response);
// Map <String, Object> map = new HashMap<String, Object>();
String searchQuery = request.getParameter("searchQuery");
// response.getWriter().write(searchQuery);
// map.put("searchQuery", searchQuery);
// returnResults(response, map);
returnResults(response, searchQuery);
}
private void returnResults(HttpServletResponse response, String searchQuery) throws IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
ArrayList<Map> arrayOfMap = new ArrayList<Map>();
try {
for (Anime anime : annj.Unmarshalling(searchQuery).getAnn()) {
Map<String, String> map = new HashMap<String, String>();
map.put("name", anime.getName());
map.put("id", anime.getId());
for (Info temp : anime.getAnime()) {
if (temp.getSrc() != null) {
map.put("url", temp.getSrc());
}
}
arrayOfMap.add(map);
}
response.getWriter().write(new Gson().toJson(arrayOfMap));
} catch (Exception e) {}
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
<servlet>
<servlet-name>search</servlet-name>
<servlet-class>yourPackage.search</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>search</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>