Servlet接口不是javax.servlet.Servlet [英] Servlet interface is not a javax.servlet.Servlet

查看:81
本文介绍了Servlet接口不是javax.servlet.Servlet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我使用的是谷歌应用程序引擎,并且使用rpc servlet 编写如下

p>

 <! -  Servlets  - > 
< servlet>
< servlet-name> RealEstate_Service< / servlet-name>
< servlet-class> com.app.realestate.navi.client.RealEstateService< / servlet-class>

< / servlet>
< servlet-mapping>
< servlet-name> RealEstate_Service< / servlet-name>
< url-pattern> / real_estate / realEstateService /< / url-pattern>
< / servlet-mapping>

RealEstateService

  @RemoteServiceRelativePath(realEstateService)
public interface RealEstateService扩展RemoteService {
ArrayList< ProjectDetails> getProjectDetails();
}

public interface RealEstateServiceAsync {
public void getProjectDetails(AsyncCallback< ArrayList< ProjectDetails>> callback);
}

RealEstateServiceImpl

  @SuppressWarnings( 串行)
公共类RealEstateServiceImpl延伸RemoteServiceServlet实现RealEstateService {

私有静态最后字符串[] contactsFirstNameData = new String [] {
Hollie,Emerson,Healy,Brigitte,Elba,Claudio,
Dena,Christina,Gail, Orville,Rae,Mildred,
Candice,Louise,Emilio,Geneva,Heriberto,Bulrush,
Abigail, ,特里,贝尔};

private final String [] contactsLastNameData = new String [] {
Voss,Milton,Colette,Cobb,Lockhart,Engle,
Pacheco,Blake,Horton,Daniel,Childers,Starnes,
Carson,Kelchner,Hutchinson,Underwood,Rush Bouchard,
Louis,Andrews,English,Snedden};

private final String [] contactsEmailData = new String [] {
mark@example.com,hollie@example.com,boticario@example.com,
emerson@example.com,healy@example.com,brigitte@example.com,
elba@example.com,claudio@example.com,dena @ example .com,
brasilsp@example.com,parker@example.com,derbvktqsr@example.com,
qetlyxxogg@example.com,antenas_sul@example.com ,
cblake@example.com,gailh@example.com,orville@example.com,
post_master@example.com,rchilders@example.com, buster@example.com,
user31065@example.com,ftsgeolbx@example.com};

private final HashMap< String,Project> projects = new HashMap< String,Project>();

public RealEstateServiceImpl(){
initProjects();

$ b $ private void initProjects(){
// TODO:为每个联系人创建一个真实的UID
//
for(int i = 0 ; i< contactsFirstNameData.length&& i< contactsLastNameData.length&& i< contactsEmailData.length; ++ i){
Project project = new Project(String.valueOf(i), contactsFirstNameData [i],contactsLastNameData [i],contactsEmailData [i]);
projects.put(project.getId(),project);



public Project addProject(Project project){
project.setId(String.valueOf(projects.size()));
projects.put(project.getId(),project);
返回项目;
}

public project updateProject(Project project){
projects.remove(project.getId());
projects.put(project.getId(),project);
返回项目;

$ b $ public Boolean deleteProject(String id){
projects.remove(id);
返回true;
}

public ArrayList< ProjectDetails> deleteProject(ArrayList< String> id){

for(int i = 0; i< ids.size(); ++ i){
deleteProject(ids.get(i) );
}

return getProjectDetails();
}

public ArrayList< ProjectDetails> getProjectDetails(){
ArrayList< ProjectDetails> projectDetails = new ArrayList< ProjectDetails>();

迭代器< String> it = projects.keySet()。iterator();
while(it.hasNext()){
Project contact = projects.get(it.next());
projectDetails.add(contact.getLightWeightContact());
}

return projectDetails;
}

public Project getProject(String id){
return projects.get(id);
}


}

RPC调用faies以下错误:

  2013年4月13日上午4:19:02 com.google.appengine.tools.development.ApiProxyLocalImpl log 
SEVERE:javax.servlet.ServletContext日志:不可用
javax.servlet.UnavailableException:Servlet接口com.app.realestate.navi.client.RealEstateService不是在org中的javax.servlet.Servlet
.mortbay.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:362)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:243)
at org.mortbay.component .AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
at org.mortbay.jetty.servlet.Context.startContext (Context.java:140)在org.mortbay.jetty.webapp.WebAppContext.startContext
(WebAppContext.java:1250)
在org.mortbay.jetty.handler.ContextHandler.doStart(ContextHan
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)在org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)

在org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
。在组织.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle .start(AbstractLifeCycle.java:50)
,位于com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:228)
位于com.google.appengine.tools.development.AbstractContainerService .STARTUP(AbstractContainerService.java:255)
在com.google.appengine.tools.development.AbstractServer.startup(AbstractServer.java:79)
在com.google.appengine.tools.development.DevAppServerImpl $服务器。 (DevAppServerImpl.java:451)
,位于com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:198)
,位于com.google.appengine.tools.development.gwt。 AppEngineLauncher.start(AppEngineLauncher.java:97)
在com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509)
在com.google.gwt.dev.DevModeBase.startUp( DevModeBase.java:1093)
位于com.google.gwt.dev.DevModeBase.run(DevModeBase.java:836)
位于com.google.gwt.dev.DevMode.main(DevMode.java: 311)


解决方案

您的web.xml映射错误。您应该使用RealEstateServiceImpl而不是RealEstateService

 < servlet> 
< servlet-name> RealEstate_Service< / servlet-name>
< servlet-class> com.app.realestate.navi.client.RealEstateServiceImpl< / servlet-class>
< / servlet>

注意:在业余时间,请通过GWT RPC的基本信息此处


hi this bug not able to trace - help required .

I am using google app engine and writing rpc servlet as below

<!-- Servlets -->
<servlet>
    <servlet-name>RealEstate_Service</servlet-name>
    <servlet-class>com.app.realestate.navi.client.RealEstateService</servlet-class>

</servlet>
<servlet-mapping>
    <servlet-name>RealEstate_Service</servlet-name>
    <url-pattern>/real_estate/realEstateService/</url-pattern>
</servlet-mapping> 

RealEstateService

@RemoteServiceRelativePath("realEstateService")
public interface RealEstateService extends RemoteService {
ArrayList<ProjectDetails> getProjectDetails();
}

public interface RealEstateServiceAsync {
    public void getProjectDetails(AsyncCallback<ArrayList<ProjectDetails>> callback);
}

RealEstateServiceImpl

@SuppressWarnings("serial")
public class RealEstateServiceImpl extends RemoteServiceServlet implements RealEstateService{

      private static final String[] contactsFirstNameData = new String[] {
          "Hollie", "Emerson", "Healy", "Brigitte", "Elba", "Claudio",
          "Dena", "Christina", "Gail", "Orville", "Rae", "Mildred",
          "Candice", "Louise", "Emilio", "Geneva", "Heriberto", "Bulrush", 
          "Abigail", "Chad", "Terry", "Bell"};

      private final String[] contactsLastNameData = new String[] {
          "Voss", "Milton", "Colette", "Cobb", "Lockhart", "Engle",
          "Pacheco", "Blake", "Horton", "Daniel", "Childers", "Starnes",
          "Carson", "Kelchner", "Hutchinson", "Underwood", "Rush", "Bouchard", 
          "Louis", "Andrews", "English", "Snedden"};

      private final String[] contactsEmailData = new String[] {
          "mark@example.com", "hollie@example.com", "boticario@example.com",
          "emerson@example.com", "healy@example.com", "brigitte@example.com",
          "elba@example.com", "claudio@example.com", "dena@example.com",
          "brasilsp@example.com", "parker@example.com", "derbvktqsr@example.com",
          "qetlyxxogg@example.com", "antenas_sul@example.com",
          "cblake@example.com", "gailh@example.com", "orville@example.com",
          "post_master@example.com", "rchilders@example.com", "buster@example.com",
          "user31065@example.com", "ftsgeolbx@example.com"};

      private final HashMap<String, Project> projects = new HashMap<String, Project>();

      public RealEstateServiceImpl() {
        initProjects();
      }

      private void initProjects() {
        // TODO: Create a real UID for each contact
        //
        for (int i = 0; i < contactsFirstNameData.length && i < contactsLastNameData.length && i < contactsEmailData.length; ++i) {
          Project project = new Project(String.valueOf(i), contactsFirstNameData[i], contactsLastNameData[i], contactsEmailData[i]);
          projects.put(project.getId(), project); 
        }
      }

      public Project addProject(Project project) {
          project.setId(String.valueOf(projects.size()));
          projects.put(project.getId(), project); 
        return project;
      }

      public Project updateProject(Project project) {
          projects.remove(project.getId());
          projects.put(project.getId(), project); 
          return project;
      }

      public Boolean deleteProject(String id) {
          projects.remove(id);
        return true;
      }

      public ArrayList<ProjectDetails> deleteProjects(ArrayList<String> ids) {

        for (int i = 0; i < ids.size(); ++i) {
            deleteProject(ids.get(i));
        }

        return getProjectDetails();
      }

      public ArrayList<ProjectDetails> getProjectDetails() {
        ArrayList<ProjectDetails> projectDetails = new ArrayList<ProjectDetails>();

        Iterator<String> it = projects.keySet().iterator();
        while(it.hasNext()) { 
          Project contact = projects.get(it.next());          
          projectDetails.add(contact.getLightWeightContact());
        }

        return projectDetails;
      }

      public Project getProject(String id) {
        return projects.get(id);
      }


}

RPC call faies with following error

Apr 13, 2013 4:19:02 AM com.google.appengine.tools.development.ApiProxyLocalImpl log
SEVERE: javax.servlet.ServletContext log: unavailable
javax.servlet.UnavailableException: Servlet interface com.app.realestate.navi.client.RealEstateService is not a javax.servlet.Servlet
    at org.mortbay.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:362)
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:243)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:228)
    at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:255)
    at com.google.appengine.tools.development.AbstractServer.startup(AbstractServer.java:79)
    at com.google.appengine.tools.development.DevAppServerImpl$Servers.startup(DevAppServerImpl.java:451)
    at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:198)
    at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:97)
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509)
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093)
    at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:836)
    at com.google.gwt.dev.DevMode.main(DevMode.java:311)

解决方案

Your web.xml mapping is wrong. You should be using RealEstateServiceImpl instead of RealEstateService

<servlet>
        <servlet-name>RealEstate_Service</servlet-name>
        <servlet-class>com.app.realestate.navi.client.RealEstateServiceImpl</servlet-class>
</servlet>

Note: In your spare time please go through basic information on GWT RPC here.

这篇关于Servlet接口不是javax.servlet.Servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆