Servlet 操作的封装

    xiaoxiao2022-07-13  158

    package com.hq.servlet.core; import com.alibaba.fastjson.JSON; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; /** * @author zth * @Date 2019-04-21 19:37 */ public abstract class Action extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); req.setCharacterEncoding("utf-8"); // 防止浏览器缓存 resp.setHeader("Pragma", "No-cache"); resp.setHeader("Cache-Control", "no-cache"); resp.setDateHeader("Expires", 0); String method = null!= req.getParameter("action")?req.getParameter("action"):"index"; Class<? extends Action> clazz = this.getClass(); // 访问一个带 Mapping 参数的方法 try { Method meth = clazz.getDeclaredMethod(method,Mapping.class); if (null != meth){ meth.invoke(this,new Mapping(req,resp)); } } catch (Exception e) { e.printStackTrace(); System.out.println("ERROR_1000_找不到目标方法!" + e.getMessage()); req.getRequestDispatcher("error/error404.jsp").forward(req,resp); } } // 默认要实现的方法 public abstract void index(Mapping mapping) throws ServletException,IOException; /** * 封装内部类,因为成员内部类在多线程可能会出现问题 */ public class Mapping { private HttpServletRequest req; private HttpServletResponse resp; public Mapping(HttpServletRequest req, HttpServletResponse resp) { this.req = req; this.resp = resp; } protected SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 获取字符串 public String getString(String param){ return null!= req.getParameter(param)?req.getParameter(param):""; } // 获取字符数组 public String[] getStringArray(String param){ return req.getParameterValues(param); } // 获取数字 public int getInt(String param){ int re = 0; String str = this.getString(param); if (str.matches("\\d+")){ re = Integer.parseInt(str); } return re; } public int[] getIntArray(String param){ int[] re = null; String[] strs = this.getStringArray(param); if (null != strs && strs.length > 0){ re = new int[strs.length]; for (int i = 0; i < strs.length; i++) { if (null != strs[i] && strs[i].matches("\\d+")){ re[i] = Integer.parseInt(strs[i]); }else { re[i]= 0; } } } return re; } public Long getLong (String param){ long re = 0; String str = this.getString(param); if (str.matches("\\d+")){ re = Long.parseLong(str); } return re; } public BigDecimal getBigDecimal (String param){ BigDecimal re = null; String str = this.getString(param); re = new BigDecimal(str); return re; } // 填充请求参数到 Bean 对象 public void getBean(Object bean){ Class<? extends Object> clazz = bean.getClass(); Field[] fields = clazz.getDeclaredFields(); if (null!=fields && fields.length>0){ try { for (Field field:fields) { field.setAccessible(true); String fname = field.getName(); Class<?> type = field.getType(); String paramv = this.getString(fname); if (type == String.class){ field.set(bean,paramv); }else if (type == Integer.class || type == int.class || type == Integer.TYPE){ field.set(bean,this.getInt(fname)); }else if (type == Long.class || type == long.class || type == Long.TYPE){ field.set(bean,this.getInt(fname)); }else if (type == BigDecimal.class){ field.set(bean,this.getBigDecimal(fname)); }else if (type == Date.class){ if (paramv.matches("\\d{4}[-]\\d{2}[-]\\d{2}[ ]\\d{2}[:]\\d{2}[:]\\d{2}")){ field.set(bean,simpleDateFormat.parse(paramv)); } } } }catch (Exception e){ e.printStackTrace(); System.out.println("ERROR_002_填充对象值出错"); } } } // 对 request 的访问 public Object getAttr(String key){ return req.getAttribute(key); } public void setAttr(String key,Object value){ req.setAttribute(key,value); } public void forward(String path) throws ServletException, IOException { req.getRequestDispatcher("/WEB-INF/"+path).forward(req,resp); } public void redirect(String path) throws IOException { resp.sendRedirect(path); } // 直接输出值 public void randerText(String msg) throws IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.println(msg); out.close(); } // 输出 json public void randerJson(Object object) throws IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.println(JSON.toJSONString(object)); out.close(); } // 从 session 中获取值 public Object getSessionAttr(String param){ return req.getSession().getAttribute(param); } // 设置 session 值 public void setSessionAttr(String key,Object val){ req.getSession().setAttribute(key,val); } // 删除 session 中的值 public void removeSessionAttr(String key){ req.getSession().removeAttribute(key); } // 销毁 session public void invalidateSession(){ req.getSession().invalidate(); } public String basePath(){ return req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath()+"/"; } public HttpServletRequest getReq() { return req; } public void setReq(HttpServletRequest req) { this.req = req; } public HttpServletResponse getResp() { return resp; } public void setResp(HttpServletResponse resp) { this.resp = resp; } } }

     

    最新回复(0)