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类和方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值