该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

初学java web之后,了解了jsp跟Servlet交互的过程。

具体过程如下:

创建一个servlet,并重写doPost和doGer方法

在MXL文件中配置servlet的接收请求的路径

在jsp中请求该路径

在servlet中写一个方法,在doPost或者doGet方法中判断传递过来的参数来实际调用哪一个方法

由上面步骤,我们会发现,如果在一个servlet中写很多方法,那岂不是要写很多判断;

下面是我个人想的简化上面过程的代码,实现了不用写判断,直接根据路径来实现请求的方法

第一步、实现Filter类,获取请求路径,判断请求的是方法还是页面,如果是页面则返回index.jsp

public class FilterDemo implements Filter {

static Demo demo=null; //serlvet类

@Override

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain chian) throws IOException, ServletException {

// TODO Auto-generated method stub

HttpServletRequest req=(HttpServletRequest)arg0;//获取request对象

HttpServletResponse resp=(HttpServletResponse)arg1;//获取request对象

String uri = req.getRequestURI();

if (uri.indexOf(".jsp")<0) {

demo.doGet(req, resp);

}else{

resp.sendRedirect("../index.jsp");

}

}

@Override

public void init(FilterConfig arg0) throws ServletException {

demo=new Demo();

}

}

第二步、实现继承servlet的Demo类

public class Demo 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 {

//---加载类

try {

//假如请求路径是 端口/项目名/Main/doPos2

//获取请求路径

String uri = req.getRequestURI();

//分割请求路径

//分割之后就是{"",项目名,Main,doPos2}

String[] strs=uri.split("/");

//获取项目名的后一个路径

String str1=strs[2];

//获取项目名的后两个路径 --假如路径不存在,则返回404

String str2=strs[3];

//将包名和str1拼接路径,将类加载--报错则返回404

Class> c1=null;

c1 = Class.forName("com.xj.controller."+str1);

//获取无参构造方法

Constructor> constructor;

constructor = c1.getConstructor();

//将私有暴露

constructor.setAccessible(true);

//获取str2方法--报错则返回404

Method dd=c1.getDeclaredMethod(str2,HttpServletRequest.class,HttpServletResponse.class);

dd.setAccessible(true);

//调用方法并传递参数

dd.invoke(constructor.newInstance(), req,resp); } catch (Exception e) {

resp.sendRedirect("../404.jsp");

}

}

}

第三步、实现具体的方法

protected void doPos2(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.sendRedirect("/FangTieBa/index.jsp");

}

上述方法重点在于利用反射获取Servlet类和方法

java原生方法,Java Servlet原生调用方法过程简化相关推荐

  1. 反射java调用方法_java 使用反射调用方法

    每个Method的对象对应一个具体的底层方法.获得Method对象后,程序可以使用Method里面的invoke方法来执行该底层方法. Object invoke(Object obj,Object ...

  2. Java 中使用反射来创建对象、调用方法

    Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形   假设已有下面的类: import java.l ...

  3. 本地方法(JNI)——调用 java 方法

    [0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--调用 java 方法 的基础知识 : 2) C语言调用java 方法,包括: ...

  4. Java反射————Method根据方法名称字符串调用方法

    引言 之前浏览廖雪峰老师的个人博客网站,无意间发现了关于在Java8中获取参数的方法,随手一转<Java 8中获取参数名称>,没想到今天遇到一个功能,非常符合这种反射调用的使用场景.回看了 ...

  5. java 方法重载调用_Java方法的定义以及调用、方法重载、可变参数以及递归

    何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 System.out.println();/ ...

  6. Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数

    Java 方法的定义.调用.值传递.重载.命令行传递参数 1. 什么是方法? 2. 方法的定义和调用 3. 值传递和引用传递 4. 方法的重载 5. 命令行传递参数 6. 可变参数(输入参数的数量不确 ...

  7. Java方法:方法解释,方法的定义及调用

    文章目录 方法 方法命名 ⭐方法的定义及调用 方法 System.out.println():调用系统类里面的标准输出对象中的方法 Java方法是语句的集合,在一起执行一个功能 方法是解决一类问题的步 ...

  8. Java学习第八天<什么是方法><方法的定义和调用><方法的重载><命令行传参><可变参数><递归详解>

    什么是方法 System.out.println(); 调用系统类里的标准输出对象(out)中的方法println public class Demo01 {//main 方法public stati ...

  9. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法

    在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...

  10. java基础深入_java编程基础之方法深入

    大纲 方法入门 概述 前讲解的循环操作,可以解决的是代码重复的问题,但是此时的重复的代码必须是有规律的.那循环操作,能解决所有的代码重复吗?答案肯定是不行的,比如针对于某一种功能的重复操作,循环就无法 ...

最新文章

  1. 非对称卷积增强CNN特征拟合
  2. 机器学习-终结者是否会出现
  3. 修改开发环境、工程、文件的字符集
  4. NeuSoft(2)添加系统调用
  5. python爬虫qq音乐教学视频_爬取QQ音乐(讲解爬虫思路)
  6. LIBSVM在MATLAB中的使用及SVM最优参数选取示例代码
  7. 不止代码:路径数量(ybtoj-最小生成树)
  8. pika集群水平扩展——让性能容量不再受限
  9. Mac电脑的12个神奇隐藏功能
  10. 提示 使用驱动器D:中的光盘之前需要将其格式化
  11. Android 画笔功能
  12. 关于jmeter TPS解读
  13. 小米手环6解决天气未同步问题
  14. Redis在项目中的应用(点评)
  15. 电容或电感的电压_如何通俗的理解电流,电压,电阻,电容和电感电工技术知识学习干货分享...
  16. KEIL,#ifdef宏定义下失效代码差异性显示
  17. 【C语言】数组知识点总结
  18. 大丰银行:银行IPO被否第一家,宣告商业银行IPO的审核标准发生了重大变化
  19. 中国超级计算机放哪了,中国的超级计算机都在做哪些工作?
  20. python爬取笔趣阁小说的代码微小调整修改

热门文章

  1. JadClipse eclipse反编译插件
  2. LAMP架构,纯文本作品
  3. String Statistics(2008年珠海市ACM程序设计竞赛)
  4. Linux的proc文件系统详解
  5. 真格量化——50期权历史波动率策略
  6. Fragment Or DialogFragment Can not perform this action after onSaveInstanceState
  7. mysql中的内置函数
  8. 解决:pip警告!DEPRECATION: The default format will switch to columns in the future.
  9. react dispatch_React系列自定义Hooks很简单
  10. C++中相对路径与绝对路径以及斜杠与反斜杠的区别 及 处理代码