java - 卡在 "Concurrency In Practise"文章中,没有 list 2.1。无状态 Servlet

标签 java servlets concurrency

摘自书中:

2.1.1。示例:无状态 Servlet 在第一章中,我们列出了许多创建线程并从这些线程调用组件的框架,让您有责任使组件成为线程安全的。很多时候,线程安全要求不是源于直接使用线程的决定,而是源于使用 Servlet 框架等工具的决定。我们将开发一个简单的示例(基于 servlet 的分解服务),并慢慢扩展它以添加功能,同时保持其线程安全。

list 2.1 显示了我们的简单分解 servlet。它从 servlet 请求中解包要分解的数字,分解它,并将结果打包到 servlet 响应中。

以及代码示例

@ThreadSafe  
public class StatelessFactorizer implements Servlet { 
public void service(ServletRequest req, ServletResponse resp) {  
    BigInteger i = extractFromRequest(req);  
    BigInteger[] factors = factor(i);   
    encodeIntoResponse(resp, factors);  
        }  
    }  

在没有提供任何其他内容的情况下,我试图通过首先使用有效的动态 Web 模块在 Eclipse 中编写简单的 servlet 来使事情正常工作,然后按照上面示例中所述通过以下代码修改 servlet。但这次我收到了 404 错误,我该如何测试我现在的新 servlet

implements servlet 

相反

extends HttpServlet

我尝试过的代码:

package com.serialize;

import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Test1
 */
@WebServlet("/Test1")
public class Test1 implements Servlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Test1() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter pw = response.getWriter();
        pw.print("test1");
    //  service(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

    @Override
    public void service(ServletRequest req, ServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        BigInteger i = extractFromRequest(req);
        BigInteger[] factors = factor(i);
        PrintWriter pw = resp.getWriter();
        pw.print(factors);
       // encodeIntoResponse(resp, factors);
    }

    private BigInteger extractFromRequest(ServletRequest req) {
        // TODO Auto-generated method stub
        String num = req.getParameter("factor");
        return BigInteger.valueOf(Long.parseLong(num));
    }

    private BigInteger[] factor(BigInteger i) {
        // TODO Auto-generated method stub
        long number = i.longValue();
        BigInteger[] ret = null ;
        for(long j=2,indx=0;j<number/2;j++)
        {
            while(number%j == 0)
            {
                ret[(int) indx++]=BigInteger.valueOf(j);
                number = number / j;
            }

        }

        return ret;
    }
}

任何帮助将不胜感激。

最佳答案

将代码放在 doGet 方法内,而不是服务方法内。

不实现 Servlet,而是从 HttpServlet 类扩展。

您的代码应该与 this 中的代码类似教程

关于java - 卡在 "Concurrency In Practise"文章中,没有 list 2.1。无状态 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23723262/

相关文章:

java - 如何使用Servlet和Ajax?

Java 程序不会终止

testing - 如何使用测试模拟生产并发问题

java - 文件存在时未找到文件

java - 如何将操作添加到 Tensorflow Android 构建中

jsp - 在登录页面刷新时 session 超时

java - HttpUtil、记录器.debug

java - 代码的 “side-effects”到底是什么意思?

java - Realm 对象只能在创建它们的线程上访问

java - 在 MVC 模式中将模型和操作划分为类的最佳方法是什么