首页 > 其他分享 >工厂模式配置servlet(servlet升级版)

工厂模式配置servlet(servlet升级版)

时间:2023-06-02 16:37:18浏览次数:32  
标签:http req javax import 工厂 servlet 升级版 out

1、创建一个类

点击查看代码
package com.bh.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class DeptController extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");

        PrintWriter out = resp.getWriter();
        out.println("<html><body>");
        out.println("<h1>hello dept</h1>");
        out.println("<body></html>");
    }

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

2、创建一个总的servlet类
点击查看代码
package com.bh.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ResourceBundle;

/*所有的servlet都通过这个AllController来转发*/
public class AllController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 如何转发给具体的干活的Controller
        //System.out.println(req.getRequestURL());//结果:http://localhost:8080/mvc01_war_exploded/dept.do
        //System.out.println(req.getRequestURI());//结果:/mvc01_war_exploded/dept.do
        //System.out.println(req.getServletPath());//结果:/dept.do

        //获得请求的url
        String requestUrl = req.getServletPath().substring(1);

        //判断请求地址来进行响应的调用(推荐使用工厂模式)
        if ("dept.do".equals(requestUrl)) {
            DeptController dept = new DeptController();
            dept.doPost(req,resp);
        } 
    }
}

3、配置servlet在web.xml中
点击查看代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<!--原本是一个类配置一个servlet,现在都使用一个用*.do来标识-->
    <servlet>
        <servlet-name>all</servlet-name>
        <servlet-class>com.bh.controller.AllController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>all</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>



    <!--<servlet>
        <servlet-name>dept</servlet-name>
        <servlet-class>com.bh.controller.DeptController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>dept</servlet-name>
        <url-pattern>/dept</url-pattern>
    </servlet-mapping>-->

</web-app>

工厂模式版
1、创建一个接口
点击查看代码
package com.bh.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface IAction {
    public void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;

}


2、创建实现类
点击查看代码
package com.bh.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class DeptController1 implements IAction {
    @Override
    public void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>hello DEPT</h1>");
        out.println("</body></html>");
    }
}

点击查看代码
package com.bh.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class EmpController implements IAction{
    @Override
    public void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>hello EMP</h1>");
        out.println("</body></html>");
    }
}

3、配置properties文件
点击查看代码
dept.do=com.bh.controller.DeptController1
emp.do=com.bh.controller.EmpController
4、创建总的servlet类
点击查看代码
package com.bh.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ResourceBundle;

/*所有的servlet都通过这个AllController来转发*/
public class AllController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 如何转发给具体的干活的Controller
        //System.out.println(req.getRequestURL());//结果:http://localhost:8080/mvc01_war_exploded/dept.do
        //System.out.println(req.getRequestURI());//结果:/mvc01_war_exploded/dept.do
        //System.out.println(req.getServletPath());//结果:/dept.do

        //获得请求的url
        String requestUrl = req.getServletPath().substring(1);

        //判断请求地址来进行响应的调用(推荐使用工厂模式)
    /*    if ("dept.do".equals(requestUrl)) {
            DeptController dept = new DeptController();
            dept.doPost(req,resp);
        } else if("emp.do".equals(requestUrl)){
            EmpController emp = new EmpController();
        } else if ("xxx.do") {
            XXXControll xxx = new XXControl();
        }*/
        //工厂模式
        //读取url的配置文件
        ResourceBundle rb = ResourceBundle.getBundle("url");
        String classname = rb.getString(requestUrl);


        IAction action=null;

        //根据干活的类,创建类的实例
        try {
            Class clz = Class.forName(classname);
             action = (IAction) clz.newInstance();
        } catch (ClassNotFoundException e) {

        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        action.doAction(req,resp);


    }
}

5、配置web.xml文件
点击查看代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>all</servlet-name>
        <servlet-class>com.bh.controller.AllController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>all</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>

标签:http,req,javax,import,工厂,servlet,升级版,out
From: https://www.cnblogs.com/liangkuan/p/17452163.html

相关文章

  • 工厂配电设计-1
    de  最近看一本很老的书:1954年4月初版的,可见书在苏联出版应该更早,估计是1940年代。这本书写的很多内容,概念是知道的,但是提供这么详细的介绍的。国内的书不多。现把其中的一些计算记录下来:1.需要系数的概念:  kc=Pp/Pn Pp:最大的计算负荷kW;Pn:设备的额定容量kW......
  • 工厂配电设计-2
    本文介绍关于变压器的选择  1.变压器的额定容量应当相当于半小时或一小时的最高负荷;  2.变压器允许在最大负荷期间过载(一般为3%)  3.变压器一昼夜的负荷系数: Pcp:有功负荷的平均值; PMax:有功负荷的最大值;负荷系数每低10%,变压器允许在最大负荷期间过载3%,最多不......
  • 设计模式详解之抽象工厂模式--企业的运行模式
    前言本文主要讲述设计模式中的抽象工厂模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。一.什么是抽象工厂模式抽象工厂是23种设计模式中创建型模式的一种,抽象工厂是由多个工厂组合而成。上一章我们提到的工厂模式只存在一个抽象角色,而抽象工厂是......
  • 容器工厂
    一、通过工厂+反射+配置文件创建对象简单的说就是以后我们不用自己new对象了,对象的实例化都交给工厂来完成,我们需要对象的时候直接问工厂拿一个就行,一会我们会来看一个例子。在这里有一点要说明,springIOC与工厂模式并不是完全相同的,最大的不同在于普通的工厂模式内部还是使用new......
  • 工厂方法
    工厂方法模式(定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行) 工厂方法模式是对简单工厂模式的进一步抽象化,可以使系统在不修改原来代码的情况下引进新的产品,满足开闭原则。优点:1、用户只需要知道具体工厂的名称就可得到所要的产......
  • 抽象工厂
    抽象工厂打破了工厂类和产品类(大类例如:手机、平板)这种一对一的关系。一个具体的工厂类可以产生多个大类的产品以往的工厂类不在只能生产单一的产品类了,例如:广东工厂可以生产手机以及口罩,手机厂不仅仅能生产小米手机还可以生产一加手机了代码示例......
  • Spring MVC官方文档学习笔记(二)之DispatcherServlet
    1.DispatcherServlet入门(1)SpringMVC是以前端控制器模式(即围绕着一个中央的Servelt,DispatcherServlet)进行设计的,这个DispatcherServlet为请求的处理提供了一个共用的算法,即它都会将实际的处理工作委托给那些可配置的组件进行执行,说白了,DispatcherServlet的作用就是统......
  • golang实现设计模式之抽象工厂模式总结-代码、优缺点、适用场景
    抽象工厂模式也是一种创建型的设计模式,其是在工厂模式的基础上实现更高程度的内聚。我们知道在工厂模式中,一种产品类就需要新建个对应的工厂类生成产品的实例,这会有什么问题呢?虽然工厂模式解决了简单工厂模式不好扩展的问题,实现了OCP,但一种产品就需要新建一个工厂类,比如有10000种......
  • golang实现设计模式之工厂模式总结-代码、优缺点、适用场景
    工厂模式也是一种创建型模式,它与简单工厂不同的是将实例的创建推迟到具体的工厂类方法中实现,每一种产品生成一个对应的工厂,从而替换掉简单工厂方法模式中那个静态工厂方法。所以在工厂模式中,不同产品就由不同的工厂生产,每次增加产品时,我们就不需要在类似在简单工厂中,在统一的工厂......
  • 02.简单工厂
    定义提供一个创建对象实例的功能,而无需关心具体实现。创建实例的类型可以是接口、抽象类,也可以是具体的类。代码示例///<summary>///工厂类,用来创建api对象///</summary>publicclassFactory{publicstaticIApiCreateApi(intcondition){IApiapi......