在jsp和servlet中,参数的传递和解析往往占用了大多说的代码空间,以至于出现了像spring,struts这样优秀的参数包装模型,但是如果项目中没有使用框架,只是依靠自己来维护,那有没有什么好的解决办法呢?
在页面中,像下图这样的查询模型非常常见
如果没有一个好的维护策略,在后台servlet的解析中,对每一个输入框都要进行参数的接受,数据类型的转换,参数异常的捕捉,按照上图这样一个查询模型,代码量是非常巨大的,常常不利于维护,说说我的一些看法,不足之处还请朋友们补充。
1.把这些查询对象看成一个对象。
2.将参数的转换委托给一个servlet以外的工具类进行整合。
3.得到一个完整的VO对象,在servlet中只要判断是否为空即可。
1.对象模型:
public class ValueServiceVO { /** * 需求标志位 */ private int isrequireOfQuery = SystemConstant.INVALID_QUERY; /** * 公司名称 */ private String corporationOfQuery; /** * 服务投放港口名称 */ private String pharborOfQuery; /** * 服务投放港口编号 */ private int pharborid = SystemConstant.INVALID_QUERY; /** * 服务投放行业编号 */ private int industryOfQuery = SystemConstant.INVALID_QUERY; /** * 起始港名称 */ private String sharborOfQuery; /** * 起始港编号 */ private int sharborid = SystemConstant.INVALID_QUERY; /** * 服务类型 */ private int stidOfQuery = SystemConstant.INVALID_QUERY; /** * 承运公司 */ // private String scnameOfQuery; private int scidOfQuery = SystemConstant.INVALID_QUERY; /** * 航线编号 */ private int lineOfQuery = SystemConstant.INVALID_QUERY; /** * 目的港 */ private String eharborOfQuery; /** * 目的港编号 */ private int eharborid = SystemConstant.INVALID_QUERY; /** * 联系方式 */ private String phoneOfQuery; /** * 注册时间前后 */ private int cdatenote = SystemConstant.INVALID_QUERY; /** * 注册时间 */ private String cdateOfQuery; /** * 过期时间前后 */ private int edatenote = SystemConstant.INVALID_QUERY; /** * 过期时间 */ private String edateOfQuery; }
此处省略setters and getters。
2.工具类模型,其原理就是通过反射,将valueserviceVO当中的setter方法中set以后的字符串当做属性全部对应于jsp input标签中的name
例如:
对应于jsp中的input name
工具类代码如下:
public class FormBeanVO{ public static <T> T getFormBean(HttpServletRequest request, Class<T> k) { try { T o = k.newInstance(); for(Method m : k.getDeclaredMethods()) { String mName = m.getName(); String requestName = null; if(mName.startsWith("set")) { requestName = request.getParameter(setLower(mName.substring(3))); } if(requestName == null || "".equals(requestName)) continue; else { if (m.getParameterTypes()[0].equals(int.class) || m.getParameterTypes()[0].equals(Integer.class)) { m.invoke(o, Integer.valueOf(requestName)); } else if (m.getParameterTypes()[0].equals(boolean.class) || m.getParameterTypes()[0].equals(Boolean.class)) { m.invoke(o, Boolean.valueOf(requestName)); } else if (m.getParameterTypes()[0].equals(String.class)) { m.invoke(o, requestName); } else if (m.getParameterTypes()[0].equals(float.class) || m.getParameterTypes()[0].equals(Float.class)) { m.invoke(o, Float.valueOf(requestName)); } else if (m.getParameterTypes()[0].equals(long.class) || m.getParameterTypes()[0].equals(Long.class)) { m.invoke(o, Long.valueOf(requestName)); } else if (m.getParameterTypes()[0].equals(Timestamp.class)) { m.invoke(o, Timestamp.valueOf(requestName)); } else if (m.getParameterTypes()[0].equals(String[].class)){ String s[] = request.getParameterValues(setLower(mName.substring(3))); m.invoke(o, s); } } } return o; } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; } private static String setLower(String s) { StringBuilder builder = new StringBuilder(s); String first = s.substring(0, 1).toLowerCase(); builder.setCharAt(0, first.charAt(0)); return builder.toString(); } /* public static void main(String[] args) { FormBeanVO fb = new FormBeanVO(); System.out.println(int.class); // fb.getFormBean(Balance.class); // System.out.println(fb.setLower("SDAFASDF")); // System.out.println(String.class); } */ }
3.这样就为servlet减轻了负担,在servlet中的调用简单方便
private void findValueServiceList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 查询条件 ValueServiceVO vsVO = FormBeanVO.getFormBean(request, ValueServiceVO.class); //页码 String pageOfString = request.getParameter("page"); int page; if(pageOfString == null || "".equals(pageOfString)) { page = 1; } else { try { page = Integer.valueOf(pageOfString); } catch (NumberFormatException e) { request.setAttribute("message", "页码不符合规范"); MethodError(request, response); return; } } int maxResult = MAX_RESULT; PageView<ValueService> pageView = new PageView<ValueService>(maxResult, page); HttpSession session = request.getSession(); User u = (User) session.getAttribute("user"); StringBuilder whereSql = new StringBuilder("1=1"); List<Object> vslist = new ArrayList<Object>(); // 需求标志位 if(vsVO.getIsrequireOfQuery() != SystemConstant.INVALID_QUERY) { // ................ } }
没错,只需要这样一句话:
ValueServiceVO vsVO = FormBeanVO.getFormBean(request, ValueServiceVO.class);
搞定。
相关推荐
在项目的压缩包中,"两张表员工管理录入jspServlet"可能包含了两个数据库表的JSP页面和Servlet实现,一个用于员工信息,另一个可能是其他相关数据,比如部门信息。每个页面都可能有对应的添加、编辑、删除和查看操作...
在Java Web开发中,"jsp+servlet+javaBean实现MVC"是一种常见的设计模式,用于构建动态、数据驱动的Web应用程序。MVC(Model-View-Controller)模式旨在分离业务逻辑、用户界面和数据管理,使得代码更易于维护和扩展...
"用JSP+Servlet+JavaBean三层模型实现登录"是一个典型的Web开发示例,它利用了Java技术栈的核心组件来处理用户交互、业务逻辑以及数据存储。以下是对这个主题的详细解释: 首先,JSP(JavaServer Pages)是Java的一...
接着,在JSP文件中设置表单和表格,与Servlet交互,显示和接收数据。最后,通过MVC模式,确保各部分职责分明,降低耦合度。 总之,通过"crudDemo"项目,你可以深入理解如何在实际应用中运用JSP、Servlet、MVC模式、...
首先,JSP(JavaServer Pages)是Java平台上的动态网页技术,用于创建交互式的、数据驱动的Web应用程序。在本项目中,JSP主要负责展示用户界面,通过内置的动作指令和表达式语言与后端JavaBean和Servlet进行数据交互...
JSP的核心优势在于它能方便地将表现层逻辑与业务逻辑分离,使代码更易于维护和扩展。 Servlet是Java Web开发中的一个关键组件,它是一个Java类,用于扩展服务器的功能。Servlet主要负责接收和响应来自客户端的HTTP...
【标题】"JSP+servlet实现后台超市管理系统"是一个典型的Web应用开发项目,它结合了Java服务器页面(JSP)和Servlet技术,用于构建一个基于Java的后台管理系统。在这个系统中,开发人员使用了JDK 1.7作为Java开发...
在Web开发领域,Java技术栈中的JSP(JavaServer Pages)、Servlet和Javabean是构建动态网站的常用工具,尤其适合创建数据驱动的博客系统。这个“jsp+servlet+Javabean实现的博客网”项目,是通过这三者结合来实现一...
这是一个典型的三层架构模型,常用于构建动态、数据驱动的Web应用程序。 **JSP(JavaServer Pages)** 是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码,以实现服务器端的逻辑处理。在本项目中,JSP用于...
该在线服装商城源码是基于Java Web技术栈开发的,主要使用了JSP(JavaServer Pages)、Servlet和MySQL数据库。这个项目提供了一个完整的电子商务平台,用户可以浏览、搜索、购买服装,并进行相应的订单管理。接下来...
【标题】"jsp+servlet实现的最简单的个人主页"揭示了这个项目是通过Java服务器页面(JSP)和Servlet技术来构建一个基础的个人主页。JSP和Servlet是Java Web开发中的关键组件,用于创建动态网页和处理客户端请求。 ...
**MVC模式详解** MVC(Model-View-Controller)是一种经典的软件设计模式,广泛应用于Web应用程序开发,尤其是在Java ...在Java Web环境中,通过JSP、Servlet和MySQL的集成,我们可以构建出强大的数据驱动的应用程序。
在IT领域,尤其是在Web开发中,`JDBC`(Java Database Connectivity)、`JSP`(JavaServer Pages)和`Servlet`是三个非常重要的组件,它们共同构建了与数据库交互的基础框架。本文将深入探讨如何利用这三个技术实现...
在这个系统中,用户可以通过JSP页面进行新闻的创建、查看、更新和删除操作,这些功能的实现依赖于Servlet接收和处理用户请求,以及DAO层对数据库的操作。 具体实现过程中,Servlet作为控制器负责接收HTTP请求,解析...
本项目利用Java的JSP(JavaServer Pages)和Servlet技术,结合SQL Server数据库,实现了一个基础的用户管理功能。以下是该项目涉及的主要知识点: 1. **JSP**: - JSP是Java Web开发中的视图层技术,用于动态生成...
通过`<jsp:include>`、`<jsp:useBean>`、`<jsp:setProperty>`等动作元素,JSP能够与Servlet进行交互,处理请求和响应。 **2. Servlet** Servlet是Java编写的服务器端程序,用于扩展服务器的功能。在这个新闻发布...
在JSP+Servlet+MySQL的架构中,Servlet充当控制器角色,JSP作为视图,而数据访问对象(DAO)和实体类(Employee类)则构成了模型层。 总的来说,"jsp+servlet+mysql员工管理系统"是一个基于Java Web技术的实用项目...
【标题】:JSpservlet实现的留言板小程序 【描述】:这个项目是一个...总的来说,这个"jspservlet实现的留言板小程序"是一个学习和理解Servlet、JSP以及数据库交互的绝佳实践项目,涵盖了Web开发的基本流程和技术。