利用反射优雅的处理用户请求

Posted superxuezhazha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用反射优雅的处理用户请求相关的知识,希望对你有一定的参考价值。

我们使用servlet接收用户请求时,会将不同的请求,发送个不同不同的servlet,这样不够优雅。而且扩展功能的时候,要新建许多servlet。

比如说,对于用户,我们可能需要  登录、注册、修改密码、注销等。但是它都是用户的操作。我们可以通过反射,来将用户的操作,提交给同一个servlet,然后分发给不同的函数:

以登录为例

技术图片
<div class="form">
<form action="userServlet" method="post">
    <input type="hidden" name="action" value="login" />
    <label>用户名称:</label>
    <input class="itxt" type="text" placeholder="请输入用户名"
           autocomplete="off" tabindex="1" name="username"
           value="" />
    <br />
    <br />
    <label>用户密码:</label>
    <input class="itxt" type="password" placeholder="请输入密码"
           autocomplete="off" tabindex="1" name="password" />
    <br />
    <br />
    <input type="submit" value="登录" id="sub_btn" />
</form>
</div>
View Code

我们添加一个  <input type="hidden" name="action" value="login" />  隐藏项。然后在userServlet中,通过反射处理

技术图片
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    //doGet(request, response);
    String action = request.getParameter("action");
    
     try {
        Method m = this.getClass().getDeclaredMethod(action, HttpServletRequest.class,HttpServletResponse.class);
        try {
            m.invoke(this, request,response);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
}
userServlet

 

这样就可以优雅的把一类功能提交给一个servlet。

以上是关于利用反射优雅的处理用户请求的主要内容,如果未能解决你的问题,请参考以下文章

优雅地处理重复请求(并发请求)

优雅地处理重复请求(并发请求)

优雅的处理Redis访问超时

利用Kubernetes优雅地处理HTTP请求

利用java 反射机制来实现一个servlet处理多种请求

java 反射代码片段