2025年java原生方法,Java Servlet原生调用方法过程简化

java原生方法,Java Servlet原生调用方法过程简化该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 初学 java web 之后 了解了 jsp 跟 Servlet 交互的过程 具体过程如下 创建一个 servlet 并重写 doPost 和 doGer 方法 在 MXL 文件中配置 servlet 的接收请求的路径 在 jsp 中请求该路径 在 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类和方法

小讯
上一篇 2025-03-20 22:43
下一篇 2025-03-27 12:12

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63660.html