java原生方法,Java Servlet原生调用方法过程简化
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
初学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原生调用方法过程简化相关推荐
- 反射java调用方法_java 使用反射调用方法
每个Method的对象对应一个具体的底层方法.获得Method对象后,程序可以使用Method里面的invoke方法来执行该底层方法. Object invoke(Object obj,Object ...
- Java 中使用反射来创建对象、调用方法
Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形 假设已有下面的类: import java.l ...
- 本地方法(JNI)——调用 java 方法
[0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--调用 java 方法 的基础知识 : 2) C语言调用java 方法,包括: ...
- Java反射————Method根据方法名称字符串调用方法
引言 之前浏览廖雪峰老师的个人博客网站,无意间发现了关于在Java8中获取参数的方法,随手一转<Java 8中获取参数名称>,没想到今天遇到一个功能,非常符合这种反射调用的使用场景.回看了 ...
- java 方法重载调用_Java方法的定义以及调用、方法重载、可变参数以及递归
何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 System.out.println();/ ...
- Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数
Java 方法的定义.调用.值传递.重载.命令行传递参数 1. 什么是方法? 2. 方法的定义和调用 3. 值传递和引用传递 4. 方法的重载 5. 命令行传递参数 6. 可变参数(输入参数的数量不确 ...
- Java方法:方法解释,方法的定义及调用
文章目录 方法 方法命名 ⭐方法的定义及调用 方法 System.out.println():调用系统类里面的标准输出对象中的方法 Java方法是语句的集合,在一起执行一个功能 方法是解决一类问题的步 ...
- Java学习第八天<什么是方法><方法的定义和调用><方法的重载><命令行传参><可变参数><递归详解>
什么是方法 System.out.println(); 调用系统类里的标准输出对象(out)中的方法println public class Demo01 {//main 方法public stati ...
- java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...
- java基础深入_java编程基础之方法深入
大纲 方法入门 概述 前讲解的循环操作,可以解决的是代码重复的问题,但是此时的重复的代码必须是有规律的.那循环操作,能解决所有的代码重复吗?答案肯定是不行的,比如针对于某一种功能的重复操作,循环就无法 ...
最新文章
- 非对称卷积增强CNN特征拟合
- 机器学习-终结者是否会出现
- 修改开发环境、工程、文件的字符集
- NeuSoft(2)添加系统调用
- python爬虫qq音乐教学视频_爬取QQ音乐(讲解爬虫思路)
- LIBSVM在MATLAB中的使用及SVM最优参数选取示例代码
- 不止代码:路径数量(ybtoj-最小生成树)
- pika集群水平扩展——让性能容量不再受限
- Mac电脑的12个神奇隐藏功能
- 提示 使用驱动器D:中的光盘之前需要将其格式化
- Android 画笔功能
- 关于jmeter TPS解读
- 小米手环6解决天气未同步问题
- Redis在项目中的应用(点评)
- 电容或电感的电压_如何通俗的理解电流,电压,电阻,电容和电感电工技术知识学习干货分享...
- KEIL,#ifdef宏定义下失效代码差异性显示
- 【C语言】数组知识点总结
- 大丰银行:银行IPO被否第一家,宣告商业银行IPO的审核标准发生了重大变化
- 中国超级计算机放哪了,中国的超级计算机都在做哪些工作?
- python爬取笔趣阁小说的代码微小调整修改
热门文章
- JadClipse eclipse反编译插件
- LAMP架构,纯文本作品
- String Statistics(2008年珠海市ACM程序设计竞赛)
- Linux的proc文件系统详解
- 真格量化——50期权历史波动率策略
- Fragment Or DialogFragment Can not perform this action after onSaveInstanceState
- mysql中的内置函数
- 解决:pip警告!DEPRECATION: The default format will switch to columns in the future.
- react dispatch_React系列自定义Hooks很简单
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别 及 处理代码