Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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
Java REST使用servlet_Java_Rest_Servlets_Gwt - Fatal编程技术网

Java REST使用servlet

Java REST使用servlet,java,rest,servlets,gwt,Java,Rest,Servlets,Gwt,我需要将gwt方法转换为REST 我有一个类正在使用一个包含servelet方法的gwt项目,现在我被指派将该项目转换为rest 我在gwt项目中有一个类,其中包含 public class TOTPService extends HttpServlet { private static final long serialVersionUID = 1L; private Map<String, TOTPUser> totpUsersMap = new Concurr

我需要将gwt方法转换为REST

我有一个类正在使用一个包含servelet方法的gwt项目,现在我被指派将该项目转换为rest

我在gwt项目中有一个类,其中包含

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

    private Map<String, TOTPUser> totpUsersMap = new ConcurrentHashMap<String, TOTPUser>();

    private String TOTP_DB_PATH = "otpdb/TOTP.dat";
    private File TOTP_DB_FILE = null;
    private Gson gson = new Gson();

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    public void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        if(totpUsersMap.size() < 1){
            restoreHOTPData();
        }

        String method = request.getParameter("method");

        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods",
                "GET, PUT, POST, OPTIONS");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type");
        response.addHeader("Access-Control-Max-Age", "86400");

        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        //df.gett
        String utcTime = df.format(new Date());
        System.out.println("--------------------------------");
        System.out.println("Request Received @ " + utcTime);
        if (method != null) {
            if (method.equals("REGISTER")) {
                String username = request.getParameter("username");
                Base32 base32 = new Base32();
                String secretKey = "";
                if(!totpUsersMap.containsKey(username)){
                    secretKey = GoogleAuthenticator.generateSecretKey();
                    System.out.println("\tNew User : [" + secretKey+ "]");
                    byte[] sharedSecret = base32.decode(secretKey);
                    TOTPUser totpUser = new TOTPUser();
                    totpUser.setUsername(username);
                    totpUser.setSecret(sharedSecret);
                    totpUsersMap.put(username, totpUser);
                    backupTOTPUser();
                }else{
                    if(!totpUsersMap.get(username).isSetup()){
                        secretKey = GoogleAuthenticator.generateSecretKey();
                        System.out.println("\tExisting User not finish in setup : [" + secretKey+ "]");
                        //e2 ung paglalagay ng user at pass
                        TOTPUser totpUser = totpUsersMap.get(username);
                        totpUser.setSecret(base32.decode(secretKey));

                        backupTOTPUser();
                    }else{
                        secretKey = base32.encodeAsString(totpUsersMap.get(username).getSecret());
                        System.out.println("\tExisting User finished setup : [" + secretKey+ "]");
                    }


                }

                String s = "otpauth://totp/" + username + "?secret="
                        + secretKey;

                ByteArrayOutputStream outs = QRCode.from(s).to(ImageType.PNG).stream();
                response.setContentType("image/png");
                response.setContentLength(outs.size());

                //e2 ung nag ooutput sa ram
                OutputStream outStream = response.getOutputStream();

                outStream.write(outs.toByteArray());

                outStream.flush();
                outStream.close();

            }
}

NOW i am confused on how to convert this to REST

I create a class inside a rest project

that contains this

@Path("/OTPService")
public class OTPService {

    TOTPService totpService = new TOTPService();

    @GET
    @Path("/getOtp")
    public void getOtp() {
        // I dont know how will i call doGet and doPost from previous class
    }


}
public类TOTPService扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
私有映射totpUsersMap=新的ConcurrentHashMap();
私有字符串TOTP_DB_PATH=“otpdb/TOTP.dat”;
私有文件TOTP_DB_File=null;
private Gson Gson=new Gson();
@凌驾
公共无效数据集(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
doPost(请求、响应);
}
@凌驾
public void doPost(HttpServletRequest请求,
HttpServletResponse响应)引发ServletException,IOException{
if(totpUsersMap.size()<1){
恢复hotpdata();
}
String方法=request.getParameter(“方法”);
addHeader(“访问控制允许来源”,“*”);
addHeader(“访问控制允许方法”,
“获取、出售、过账、期权”);
addHeader(“访问控制允许头”,“内容类型”);
addHeader(“访问控制最大年龄”,“86400”);
DateFormat df=新的简化格式(“yyyy-MM-dd HH:MM:ss”);
df.setTimeZone(TimeZone.getTimeZone(“UTC”));
//德夫盖特
字符串utcTime=df.format(newdate());
System.out.println(“-------------------------------------”);
System.out.println(“收到请求@”+utcTime);
if(方法!=null){
if(方法等于(“寄存器”)){
字符串username=request.getParameter(“用户名”);
Base32 Base32=新的Base32();
字符串secretKey=“”;
如果(!totpUsersMap.containsKey(用户名)){
secretKey=GoogleAuthenticator.generateSecretKey();
System.out.println(“\t新用户:[”+secretKey+“]”);
字节[]sharedSecret=base32.解码(secretKey);
TOTPUser TOTPUser=新TOTPUser();
totpUser.setUsername(用户名);
totpUser.setSecret(共享secret);
totpUsersMap.put(用户名,totpUser);
backuptpuser();
}否则{
如果(!totpUsersMap.get(username.isSetup()){
secretKey=GoogleAuthenticator.generateSecretKey();
System.out.println(“\t当前用户未在设置中完成:[“+secretKey+”]”);
//e2 ung paglalagay ng用户通行证
TOTPUser TOTPUser=totpUsersMap.get(用户名);
totpUser.setSecret(base32.decode(secretKey));
backuptpuser();
}否则{
secretKey=base32.encodeAsString(totpUsersMap.get(username.getSecret());
System.out.println(“\t当前用户已完成设置:[”+secretKey+“]”);
}
}
字符串s=”otpauth://totp/“+用户名+”?机密=”
+秘钥;
ByteArrayOutputStream outs=QRCode.from(s).to(ImageType.PNG).stream();
response.setContentType(“image/png”);
response.setContentLength(outs.size());
//e2 ung nag ooutput sa ram
OutputStream outStream=response.getOutputStream();
outStream.write(outs.toByteArray());
冲水;
exptream.close();
}
}
现在我对如何将其转换为REST感到困惑
我在rest项目中创建了一个类
包含这个
@路径(“/OTPService”)
公共类OTP服务{
TOTPService TOTPService=新TOTPService();
@得到
@路径(“/getOtp”)
公共无效getOtp(){
//我不知道如何称呼上节课的doGet和doPost
}
}
我在休息方面是新手,我不知道我做得对不对


有没有一种方法可以在我的REST项目中使用这个servlet?或者我需要更改不使用servlet的doGet或doPost方法吗?

来调用一个servlet到REST中 1) 您需要在xml上设置servlet配置,请参阅示例

tput:选择所有树视图原始视图

<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_3_0.xsd" version="3.0">
    <display-name>
        SSOOTPServiceREST
    </display-name>
    <servlet>
        <!--  Default servlet container config  -->
        <servlet-name>
            SSOOTPServiceREST
        </servlet-name>
        <servlet-class>
            org.glassfish.jersey.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>
                jersey.config.server.provider.packages
            </param-name>
            <param-value>
                com.svi.sso.otpsvc.rest
            </param-value>
            <!--  Package where methods to be called by REST  -->
        </init-param>
    </servlet>
    <!--  servlets inside rest  -->
    <servlet-mapping>
        <servlet-name>
            SSOOTPServiceREST
        </servlet-name>
        <url-pattern>
            /otprest/*
        </url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>
            GetOtp
        </servlet-name>
        <servlet-class>
            com.svi.sso.otpsvc.rest.OTPService
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>
            GetOtp
        </servlet-name>
        <url-pattern>
            /otpservice
        </url-pattern>
    </servlet-mapping>
    <!--  Default page to serve  -->
    <welcome-file-list>
        <welcome-file>
            SSOOTPService.html
        </welcome-file>
    </welcome-file-list>
</web-app>

此api将由另一个使用servlet的项目调用。根据给定的url,响应可能是图像或字符串…当前此api位于gwt项目中。您可以参考服务器端的restyGWT:和jersey:查看。另外,David Chandler提供了一个很好的示例:
@Context 
private ServletContext servletContext;
@Context 
private HttpServletRequest request;
@Context
private HttpServletResponse response;
@GET
@Path("/getotp")
public void getOtp(request,response) throws ServletException, IOException {
        doGet(request, response);//servelet to be called
    }