摘自书中:
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;
}
}
任何帮助将不胜感激。
最佳答案
关于java - 卡在 "Concurrency In Practise"文章中,没有 list 2.1。无状态 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23723262/