Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌应用程序引擎上的JSF应用程序作为android应用程序的后端。注入的对象为空_Android_Google App Engine_Jsf_Servlets - Fatal编程技术网

谷歌应用程序引擎上的JSF应用程序作为android应用程序的后端。注入的对象为空

谷歌应用程序引擎上的JSF应用程序作为android应用程序的后端。注入的对象为空,android,google-app-engine,jsf,servlets,Android,Google App Engine,Jsf,Servlets,我在GoogleAppEngine上创建了一个JSF应用程序,为Android应用程序提供数据。我将使用JSF应用程序为Android应用程序准备数据并评估数据。我使用Objectify和Google数据存储进行持久化 现在我要采取下一步,我遇到了麻烦:( 我需要以某种方式将数据从数据存储下载并上传到android应用程序。我的第一个想法是在Web应用程序中使用一个额外的Servlet(而不是Facesservlet),并让Servlet使用业务逻辑(CDIBeans) 调用servlet没有问

我在GoogleAppEngine上创建了一个JSF应用程序,为Android应用程序提供数据。我将使用JSF应用程序为Android应用程序准备数据并评估数据。我使用Objectify和Google数据存储进行持久化

现在我要采取下一步,我遇到了麻烦:( 我需要以某种方式将数据从数据存储下载并上传到android应用程序。我的第一个想法是在Web应用程序中使用一个额外的Servlet(而不是Facesservlet),并让Servlet使用业务逻辑(CDIBeans)

调用servlet没有问题,但是当我注入在JSF应用程序中正常工作的CDIBean时,它们总是空的。注入在应用程序的其他每个部分都正常工作,但是在额外的servlet(我称之为MobileServlet)中,注入的bean总是空的

有什么建议吗?这是我的第一个JSF应用程序,所以我很可能误解了一些重要的东西;)

已编辑:我的一些文件:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>GlideSpeedTester_cdi</display-name>
<welcome-file-list>
    <welcome-file>faces/login.xhtml</welcome-file>
</welcome-file-list>
<filter>
  <filter-name>ObjectifyFilter</filter-name>
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
  </filter>
<filter-mapping>
<filter-name>ObjectifyFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>bluesky</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>
<context-param>
    <param-name>com.sun.faces.enableThreading</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<listener>
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet>
    <description></description>
    <display-name>MobileServlet</display-name>
    <servlet-name>MobileServlet</servlet-name>
    <servlet-class>se.widmantiming.glidespeedtester.servlets.MobileServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MobileServlet</servlet-name>
    <url-pattern>/MobileServlet</url-pattern>
</servlet-mapping>
</web-app>
不起作用的注射:

package se.widmantiming.glidespeedtester.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import se.widmantiming.glidespeedtester.beans.MobileBean;
import se.widmantiming.glidespeedtester.entities.GlideWaxType;
import se.widmantiming.glidespeedtester.entities.User;

public class MobileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

// Injecting just to see if it is null
@Inject
private loginBean loginBean;

private String message = "Hello";

public void init() throws ServletException {

}

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {


    if (loginBean == null) {
        message = "Bean is null";
    }
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<h1>" + message + "</h1>");
}

public void destroy() {

}

public MobileBean getMobileBean() {
    return mobileBean;
}

public void setMobileBean(MobileBean mobileBean) {
    this.mobileBean = mobileBean;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public User getUser() {
    return mUser;
}

public void setUser(User user) {
    mUser = user;
}
包se.widmantiming.glidespeedtester.servlets;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.util.List;
导入javax.inject.inject;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入se.widmantiming.glidespeedtester.beans.MobileBean;
导入se.widmantiming.glidespeedtester.entities.GlideWaxType;
导入se.widmantiming.glidespeedtester.entities.User;
公共类MobileServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
//只是想看看它是否为空
@注入
私人洛根班洛根班;
私有字符串message=“Hello”;
public void init()引发ServletException{
}
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
if(loginBean==null){
message=“Bean为空”;
}
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“+message+”);
}
公共空间销毁(){
}
公共移动电话getMobileBean(){
返回mobileBean;
}
公共无效setMobileBean(MobileBean-MobileBean){
this.mobileBean=mobileBean;
}
公共字符串getMessage(){
返回消息;
}
公共无效设置消息(字符串消息){
this.message=消息;
}
公共用户getUser(){
回归缪斯;
}
公共void setUser(用户){
缪斯=用户;
}

}

Servlet的位置上有beans.xml吗?若bean为null,那个么看起来CDI并没有发现它。有没有可能额外的Servlet找不到它?现在我用一些代码编辑了这个问题,问题是您使用的是Servlet 2,所以需要在web.xml中指定Servlet侦听器以引导Weld(CDI实现)。或者你可以使用
@WebServlet
注释(Servlet 3.0),你不需要额外的配置。不幸的是,我不得不坚持使用Servlet-2.5,因为我使用的是Google App Engine。我的web.xml的这部分不处理Weld的引导吗?org.jboss.weld.environment.servlet.Listener实际上,在servlet中使用CDI与Google App Engine似乎是不可能的,请参见以下链接:servlet的位置上是否有beans.xml?若bean为null,那个么看起来CDI并没有发现它。有没有可能额外的Servlet找不到它?现在我用一些代码编辑了这个问题,问题是您使用的是Servlet 2,所以需要在web.xml中指定Servlet侦听器以引导Weld(CDI实现)。或者你可以使用
@WebServlet
注释(Servlet 3.0),你不需要额外的配置。不幸的是,我不得不坚持使用Servlet-2.5,因为我使用的是Google App Engine。我的web.xml的这部分不处理Weld的引导吗?org.jboss.weld.environment.servlet.Listener实际上,在servlet中使用CDI与Google App Engine似乎是不可能的,请参见以下链接:
package se.widmantiming.glidespeedtester.beans;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import se.widmantiming.glidespeedtester.dataservices.LoginService;
import se.widmantiming.glidespeedtester.entities.User;

@Named
@RequestScoped
public class LoginBean {

    @Inject
    private SessionBean sessionBean;

    private String mUsername;
    private String mPassword;
    private String mConfirmedPassword;
    private String mFirstName;
    private String mLastName;
    private String mEmail;
    private String mTestTeamPassword;


    @Inject
    private LoginService loginService;

    public String login() {
        User user = new User();
        user.setUsername(mUsername);
        user.setPassword(mPassword);

        return login(user);

    }

    private String login(User user) {
        User u = loginService.login(user);
        if (u == null) {
            return "login";
        }
        sessionBean.setUser(u);
        return "main";
    }

    public String createAccount() {
        if (!mPassword.equals(mConfirmedPassword)) {
            return "create_account";
        }
        User user = new User();
        user.setUsername(mUsername);
        user.setPassword(mPassword);
        user.setFirstName(mFirstName);
        user.setLastName(mLastName);
        user.setEmail(mEmail);
        user.setActive(true);
        User u = loginService.createAccount(user, mTestTeamPassword);
        if (u == null) {
            return "create_account";
        }
        return "login";
    }


    public String logout() {
        sessionBean.setUser(null);
        return "login";
    }

    public boolean isLoggedIn() {
        return (sessionBean.getUser() != null);
    }

    public SessionBean getSessionBean() {
        return sessionBean;
    }

    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public String getUsername() {
        return mUsername;
    }

    public void setUsername(String username) {
        mUsername = username;
    }

    public String getPassword() {
        return mPassword;
    }

    public void setPassword(String password) {
        mPassword = password;
    }

    public String getConfirmedPassword() {
        return mConfirmedPassword;
    }

    public void setConfirmedPassword(String confirmedPassword) {
        mConfirmedPassword = confirmedPassword;
    }

    public String getFirstName() {
        return mFirstName;
    }

    public void setFirstName(String firstName) {
        mFirstName = firstName;
    }

    public String getLastName() {
        return mLastName;
    }

    public void setLastName(String lastName) {
        mLastName = lastName;
    }

    public String getEmail() {
        return mEmail;
    }

    public void setEmail(String email) {
        mEmail = email;
    }

    public String getTestTeamPassword() {
        return mTestTeamPassword;
    }

    public void setTestTeamPassword(String testTeamPassword) {
        mTestTeamPassword = testTeamPassword;
    }

    public LoginService getLoginService() {
        return loginService;
    }

    public void setLoginService(LoginService loginService) {
        this.loginService = loginService;
    }

}
package se.widmantiming.glidespeedtester.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import se.widmantiming.glidespeedtester.beans.MobileBean;
import se.widmantiming.glidespeedtester.entities.GlideWaxType;
import se.widmantiming.glidespeedtester.entities.User;

public class MobileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

// Injecting just to see if it is null
@Inject
private loginBean loginBean;

private String message = "Hello";

public void init() throws ServletException {

}

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {


    if (loginBean == null) {
        message = "Bean is null";
    }
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<h1>" + message + "</h1>");
}

public void destroy() {

}

public MobileBean getMobileBean() {
    return mobileBean;
}

public void setMobileBean(MobileBean mobileBean) {
    this.mobileBean = mobileBean;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public User getUser() {
    return mUser;
}

public void setUser(User user) {
    mUser = user;
}