精华内容
下载资源
问答
  • Servlet重写service

    2019-07-28 20:09:12
    有时候应该模块的业务需求太多,则需要写较多的else if语句,所以为了方便,我们可以通过service写一个反射,然后在serlet层继承BaseServlet即可。 以下是BaseServlet工具代码: public class BaseServlet extends ...

    有时候应该模块的业务需求太多,则需要写较多的else if语句,所以为了方便,我们可以通过service写一个反射,然后在serlet层继承BaseServlet即可。

    以下是BaseServlet工具代码:
    public class BaseServlet extends HttpServlet {
    /**
    * 客户端请求servlet时,调用该servlet无参构造函数来创建对象,调用完后调用init方法,再调用service方法,因为(BaseServlet有service方法了就不会去找HttpServlet的service方法)
    * 所以BaseServlet必须写一个service的方法来截断HttpServlet的service方法
    * Servlet_生命周期:
    1.被创建:执行init方法,只执行一次
      --默认情况下,第一次被访问时,Servlet被创建,然后执行init方法;

    –可以配置执行Servlet的创建时机;
    2.提供服务:执行service方法,执行多次

    3.被销毁:当Servlet服务器正常关闭时,执行destroy方法,只执行一次
    * */
    public void service(HttpServletRequest request,HttpServletResponse response){
    try {
    request.setCharacterEncoding(“utf-8”);
    } catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    response.setCharacterEncoding(“utf-8”);
    String type=request.getParameter(“type”);
    //反射省略ifelse
    Class cla=this.getClass();
    try {
    Method method=cla.getMethod(type, HttpServletRequest.class,HttpServletResponse.class);
    method.invoke(this, request,response);
    } catch (NoSuchMethodException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    e.printStackTrace();
    }
    }

    }

    展开全文
  • 通过class反射获取到其service实现类路径下的实体类3.主要代码块,关于WebApplicationContext相关介绍可上网获知//WebApplicationContext中可以获得ServletContext的引用,以便web应用可以访问spring上下文,spring中...

    1.编写service接口与实现类

    2.通过class反射获取到其service实现类路径下的实体类

    3.主要代码块,关于WebApplicationContext相关介绍可上网获知

    //WebApplicationContext中可以获得ServletContext的引用,以便web应用可以访问spring上下文,spring中提供WebApplicationContextUtils的getWebApplicationContext(ServletContext src)方法来获得WebApplicationContext对象

    WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();

    //反射获取到对应java

    Class c1 = Class.forName(packageName);

    //获取方法名称,methodName为service层方法

    Method method = c1.getDeclaredMethod(methodName,String.class);

    //获取注入的service类型,serviceName值为:xxServceiImpl,

    //在通过invoke方法执行对应的方法

    method.invoke(wac.getBean(serviceName),params);

    4.还可以通过重写注解方法,实现spring DI注入service或dao,实现java反射调用service层或dao层方法

    展开全文
  • 今天用类似反射的技术()重写service方法

    昨天在写一个AJAX网页时用类似反射的技术重写servlet的service方法,实现一个servlet多种功能,将主要功能数据库更新(添加新用户)放在doGet()里,次要功能数据库查询(查询用户名是否已存在)放在另一个方法里。实际运行时发现在进行查询操作时总是返回true。查看代码发现eclipse在重写的service方法的首行自动生成了super.service(request,reponse);语句。该语句尝试调用父类的service方法。

    代码示例:

    class Father {
    public void service() {
    System.out.println("Method service() of Father is running...");
    doGet();
    }
    public void doGet() {
    System.out.println("Method doGet() of Father is running...");
    }

    class Son extends Father{
    public void service() {
    super.service();
    }
    public void doGet() {
    System.out.println("Method doGet() of Son is running...");
    }
    public static void main(String[] args) {
    Son son=new Son();
    son.service();
    }
    }

    运行结果:

    Method service() of Father is running...
    Method doGet() of Son is running...


    该自动生成语句导致用于添加新用户的doGet()方法总是被调用,于是在调用查询某个用户名是否存在时,由于该用户名已被添加到数据库,故总是返回true。

    展开全文
  • /** * 抽象类,不能配置到web.xml中 */ public abstract class BaseServlet extends HttpServlet { /** * 直接重写service方法,避免httpServlet分发 */ @Override public void service(HttpServletRequest req, ...

    package cn.meeting.core;

    import java.io.IOException;

    import java.lang.reflect.Method;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    /**

    * 抽象类,不能配置到web.xml中

    */

    public abstract class BaseServlet extends HttpServlet {

    /**

    * 直接重写service方法,避免httpServlet分发

    */

    @Override

    public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // 接收一个参数,用于执行用户指定的方法

    String methodName = req.getParameter("cmd");

    if (methodName == null || methodName.trim().equals("")) {

    methodName = "execute";

    }

    // 通过反射来调用子类的方法

    try {

    Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);

    method.invoke(this, req, resp);

    } catch (Exception e) {

    throw new RuntimeException(e);

    }

    }

    /**

    * 要求子类,必须要拥有一个默认的方法

    */

    public abstract void execute(HttpServletRequest req, HttpServletResponse resp) throws Exception;

    }

    HTTP 中的 304 有了一些了解。

    304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

    如 果客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。

    因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。

    展开全文
  • 我们知道,如果我们自定义一个servlet继承HttpServlet,并且重写HttpServlet中的doGet或doPost方法,那么从浏览器发送过来的request请求将调用HttpServlet中的service方法,在service方法中,根据获得的method是get...
  • 父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用 super 关键字来访问父类中的被重写方法),如果父类中的方法为 private 类型的,那么子类虽能继承,但无法覆盖子类和父类的方法必须是...
  • ServiceImpl类中有一个私有方法MethodA,而ServiceImpl是被spring管理的,该类中有一些用@Autowired注入的依赖项,因此不能直接new来创建它的实例,需要通过spring来创建它的实例,那么该怎么测试该私有方法呢?...
  • 不推荐重写service

    千次阅读 2017-04-23 18:17:34
    不推荐重写HttpServlet类的service,原因是HttpServlet的service方法里面有一串神奇的代码:与浏览器有一个约定!而这个约定的作用 就是可以让网页刷新时不必重新请求一些内容没有变化(跟新)的静态资源,可以极大...
  • 这篇笔记是学习web开发时基于反射和泛型的产物,实际开发时不需要去造这种轮子,仅供学习 引入 整个项目要以数据库的表为基准,有多少张表,就要有多少个实体类,在之前的开发中,我们都是单表开发,根据功能去...
  • DTO(数据传输对象)封装的数据面向表现层(UI),Model封装的数据面向业务逻辑层(service),在业务逻辑层对每个对象都要用ToDTO()方法,代码冗余,考虑将ToDTO()方法进行封装,将Model和DTO传入实现自动属性赋值...
  • 1、介绍Java反射机制和Java注解 2、利用Java反射调用类方法 3、实例讲解:自定义Java注解
  • 本打算继承一个API中的Parent类(Parent继承自GrandParent类),重写其中的service方法,copy了Parent的service方法。不过发现Parent的service中也有super.service方法。当时考虑直接调用GrandParent的service方法。...
  • .NET Core 反射获取所有控制器及方法上特定标签. 有个需求,就是在. NET Core中,我们想在项目 启动时,获取LinCmsAuthorizeAttribute这个特性标签所有出现的地方,把他的参数,放入一个集合并缓存起来,以便后面...
  • // 空方法 什么都不做 子类也不重写 default void nothingTodo(){} // 子类需要重写方法 void todoSomething(); } @Service public class TestServiceImpl implements TestService { public void ...
  • 文章目录Servlet的生命周期Servlet简单源码分析Servlet多线程安全问题 ... Servlet的生命周期 ...service–do、post destroy–销毁 例子: public class DemoServlet extends HttpServlet { @Override
  • Java错题合集(5)

    千次阅读 2020-12-19 04:06:31
    Java 语言标识符是 Sky $Computer NULL 50、java程序内存泄露的最直接表现是 程序抛内存控制的Exception 51、有关servlet和cgi的描述,说法正确的是 servlet处于服务器进程中,它通过多线程方式运行其service方法 ...
  • JMockit Mock 私有方法和私有属性

    千次阅读 2021-03-08 18:22:28
    前面说过 JMockit 因身处前线,所以简直无不可,本节例子演示 JMockit 怎么 Mock 私有方法和私有属性,示例虽然是静态方法和属性,但因采用的是反射手法,所以这种Deencapsulation 的 Mock 手段同样适用于公有的方法...
  • 依赖注入的原理就是简单...模拟一个用户的注册业务,首先是controller层调用service层,然后调用dao层代码实现保存用户。 文件结构: UserController package cn.wzy.controller; import cn.wzy.DI.Inject; ...
  • Google Guava 反射机制工具类

    千次阅读 2019-07-08 17:58:53
    // isOverridable() 该方法是否可以重写 System.out.println("是否可以重写:" + methodInvokable.isOverridable()); // isVarArgs() 该方法是否可变参数 System.out.println("是否可变参数:" + ...
  • 装饰器(也叫注解)对一个类/方法/属性/参数的装饰。它是对这一系列代码的增强,并且通过自身描述了被装饰的代码可能存在行为改变。 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数...
  • 方法三: 每个service的impl都可以指定名称(使用@Service(“名称”))Controller中注入service的时候使用名称来指定注入哪一个(使用@Resource(name="名称"))。@Service注解,其实做了两件事情: 1、声明...
  • Java反射

    2021-02-22 14:35:22
    方法之一,就是运用本文想要阐述的反射机制了。在编写代码的时候,有时在引用第三方类又或者作为一个公共服务给外界使用时,有些属性、方法等信息在编译阶段并不能获取到,需要在运行时才能确定下来。这种机制又叫做...
  • 那么从service里面调用startActivity话,会怎么样呢?会出现下面的异常:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_A...
  • Serlvet接口只定义了一个服务方法就是service,而HttpServlet类实现了该方法并且要求调用下列的方法之一: doGet:处理GET请求 doPost:处理POST请求 当发出客户端请求的时候,调用service 方法并传递一个请求和响应...
  • Android7.0 BatteryService

    千次阅读 2016-10-25 21:17:48
    BatteryService与PMS之间的关系比较密切,提供接口用于获取电池信息、充电状态等。 为了对Android的功耗控制有更深入的了解,我们有必要分析一下BatteryService
  • Java错题合集(2)

    2020-12-19 04:04:41
    String是不可修改的,且java运行环境中对string对象有一个对象池保存 复制代码 47、在java中重写方法应遵循规则的包括() 可以有不同的访问修饰符 参数列表必须完全与被重写方法相同 复制代码 48、关于身份证号,...
  • 注解可以用来修饰类,方法,属性等,可以看做是一个特殊的标记,程序在编译或运行时检测到这些标记,从而进行一些特殊的操作。 注解的基本元素 1、修饰符,注解的修饰符必须是public,不写默认为public 2、关键字@...
  • 在日常运维开发工作中,我们经常会去调用第三方服务接口获取数据,...按照以往的思路,通常是先定义一个获取群组信息的方法(当然,我们需要先做接口的认证,获取鉴权token)。 """ zabbix_demo.py """ import requests

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,536
精华内容 8,214
关键字:

反射重写service方法