吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3177|回复: 5
收起左侧

[Java 原创] 【原创】JavaEE中关于Servlet的封装,欢迎大家提出建议

[复制链接]
轩辕龙琊 发表于 2018-2-22 17:46
package com.system.Servlet;

import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* 完成对任意用户的请求进行处理的Servlet的封装
* 1、更新,删除,新增操作。
* 2、能够实现一个Servlet处理多种请求方式,简化在doGet方法中出现的大量if语句
* 3、方便后期维护
*
* 实现封装的思想:Java反射技术,来完成对Servlet的再一次封装
* @AuThor Administrator
*f:xxxx 转发
*r:xxxx 重定向
*/
@SuppressWarnings("serial")
public class BaseServlet extends HttpServlet {

        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
                String v = request.getParameter("v");
                request.setCharacterEncoding("utf-8");
                response.setCharacterEncoding("utf-8");
                Method method ;
                try {
                        method = getClass().getMethod(v, HttpServletRequest.class,HttpServletResponse.class);
                } catch (NoSuchMethodException e) {
                        // TODO Auto-generated catch block
                        throw new RuntimeException("此方法"+v+"不存在",e);
                }
                //找到方法,则请求调用
                try {
                        String result = (String)method.invoke(this, request,response);
                        if(result != null && !result.trim().isEmpty()){
                                int index = result.indexOf(":");
                                String param = result.substring(0, index);
                                String path = result.substring(index+1);
                                if(param.equals("f")){
                                        request.getRequestDispatcher(path).forward(request, response);
                                }else if(param.equals("r")){//redirect重定向
                                        response.sendRedirect(path);
                                }
                        }
                } catch (Exception e) {
                        throw new RuntimeException("方法执行失败", e);
                }
        }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

极道漫漫 发表于 2018-2-22 18:05
官方封装::
public class BaseServlet extends HttpServlet {
       
        @Override
        public  void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              request.setCharacterEncoding("utf-8");               
                   //处理乱码
                  String methodName = request.getParameter("method");
                  if(methodName==null || methodName.trim().length()==0){
                          
                          methodName="index";
                  }  
              Class clazz = this.getClass();  //获得我们请求的Servlet的字节码(包裹)
                  try {
                         Method  method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);//获得
                     String Path = (String)method.invoke(this, request,response); //执行.path="/jsp/XXX.jsp"
                     if(Path!=null){
                         request.getRequestDispatcher(Path).forward(request, response);
                       }
                   } catch (Exception e) {
                            e.printStackTrace();
                            request.setAttribute("msg", "路径错误");
                            request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
                  }
        }
}
楼主那个也是很可以的
cdy1996 发表于 2018-2-26 12:22
赞,虽然现在都是用框架了,但是最本质的还是不能忘记
有你便是晴天 发表于 2018-3-25 21:47
我个人感觉这样在一步结合设计模式中的模板设计模式进一步封装较好。如:在调用方法之前的使用先做什么操作,后期可以对数据库的事务提交。在子类中做实现
有你便是晴天 发表于 2018-3-25 21:49
而且在调用方法时需要做一层判断,增加代码的严谨性
万物皆空 发表于 2018-3-27 14:53
看不懂,我是不是该加油了?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 14:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表