我一直在玩java服务器和servlet。但是仍有一个问题。 假设我写了这样一个服务器:
class server {
public static void main(String[] args){
int port = 8080;
try{
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
}catch(Exception e){
System.out.println("Something went wrong");
}
}
}
这将在端口8080上侦听httprequest。 现在假设我有一个看起来像这样的servlet:
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HTML>");
}
}
我可以轻松地使用像tomcat或glassfish这样的现有服务器来部署这个servlet。但是可以从上面的简单服务器部署它吗?
答案 0 :(得分:1)
不,你需要一个Servlet实现,或者你想重新发明轮子创建自己的。例如,Catalina是Tomcat servlet实现。
答案 1 :(得分:0)
没有。您需要处理servlet代码并返回html的java实现。基本上glassfish或tomcat是一个服务器,它监听你的请求,在后端运行java代码并返回结果。在表面层面上,tomcat和glassfish使用基本服务器来捕获请求。但是还有很多事情要做。
在简单的服务器中,没有什么可以处理用servlet编写的java代码。
您的服务器将返回servelet文本而不是运行它。
答案 2 :(得分:0)
servlet需要一个java容器实现,比如tomcat或glassfish。如果你认为tomcat或glassfish太重,可以试试jetty。
public class HelloHandler extends AbstractHandler
{
public void handle(String target,Request baseRequest,
HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>Hello World</h1>");
}
}
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
server.setHandler(new HelloHandler());
server.start();
server.join();
}
您还可以通过netty编写一个简单的Servlet实现。