简单的Servlet容器_根据请求决定具体servlet
来源:互联网 发布:csgo和cf知乎 编辑:程序博客网 时间:2024/05/17 19:21
Servlet容器中放着我们所有要访问的Servlet,根据我们具体的请求来访问不同的Servlet。下面是一个简单的Servlet容器的实现。request和response的封装以及连接器的实现代码这里就不再重复写了,请看上一篇博客。
servlet
- package com.hcserver.servlet;
-
- import java.io.IOException;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- public class MyServlet extends HttpServlet{
-
- private static final long serialVersionUID = 1L;
-
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- this.doPost(req, resp);
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- String aa = req.getParameter("aa");
- String bb = req.getParameter("bb");
- System.out.println("param aa = "+aa);
- System.out.println("param bb = "+bb);
-
- resp.getWriter().print("hello world...");
- }
-
-
-
- }
servlet容器
- package com.hcserver.container;
-
- import java.io.File;
- import java.util.HashMap;
- import java.util.Map;
-
- import javax.servlet.http.HttpServlet;
-
- public class Container {
- public final static String WEB_ROOT = Container.class.getResource("/webapps").getPath();
-
- private Map<String,Map<String,HttpServlet>> projectMap = new HashMap<>();
-
- private static Container container = new Container();
-
- private Container(){}
- public static Container getInstance(){
- return container;
- }
-
- public void init(){
- try{
-
- Map<String,HttpServlet> map = new HashMap<>();
- Class<?> servletClass = Class.forName("com.hcserver.servlet.MyServlet");
- HttpServlet newInstance = (HttpServlet)servletClass.getConstructor(new Class[]{}).newInstance(new Object[]{});
- map.put("myServlet", newInstance);
- projectMap.put("hello",map);
-
- }catch(Exception e){
-
- }
- }
-
- public Map<String,HttpServlet> getProject(String projectName){
- return projectMap.get(projectName);
-
- }
-
- public static void main(String[] args) {
- container.init();
-
- }
-
-
- }
处理器修改
- package com.hcserver.process;
-
- import java.util.Map;
-
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import com.hcserver.container.Container;
-
- public class Process {
-
- public void service(HttpServletRequest request,HttpServletResponse response){
- String project = request.getContextPath();
- String servletPath = request.getServletPath();
-
-
- Container container = Container.getInstance();
- Map<String, HttpServlet> servletMap = container.getProject(project);
- HttpServlet servlet = servletMap.get(servletPath);
- try {
-
- servlet.service(request, response);
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
-
- }
最后启动服务,浏览器,输入:http://localhost:8084/hello/MySevlet?aa=1&bb=3回车后浏览器显示 hello world..
后台输出
param aa = 1
param bb = 3