`

jsp,servlet交互驱动层实现

 
阅读更多

在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);

 

搞定。

 

 

 

  • 大小: 6.6 KB
  • 大小: 8.9 KB
  • 大小: 3.9 KB
1
2
分享到:
评论

相关推荐

    jsp+servlet+jdbc原生实现增删改查两张表

    在项目的压缩包中,"两张表员工管理录入jspServlet"可能包含了两个数据库表的JSP页面和Servlet实现,一个用于员工信息,另一个可能是其他相关数据,比如部门信息。每个页面都可能有对应的添加、编辑、删除和查看操作...

    jsp+servlet+javaBean实现MVC

    在Java Web开发中,"jsp+servlet+javaBean实现MVC"是一种常见的设计模式,用于构建动态、数据驱动的Web应用程序。MVC(Model-View-Controller)模式旨在分离业务逻辑、用户界面和数据管理,使得代码更易于维护和扩展...

    用JSP+Servlet+JavaBean三层模型实现登录

    "用JSP+Servlet+JavaBean三层模型实现登录"是一个典型的Web开发示例,它利用了Java技术栈的核心组件来处理用户交互、业务逻辑以及数据存储。以下是对这个主题的详细解释: 首先,JSP(JavaServer Pages)是Java的一...

    JSP+SERVLET实现简单的CRUD

    接着,在JSP文件中设置表单和表格,与Servlet交互,显示和接收数据。最后,通过MVC模式,确保各部分职责分明,降低耦合度。 总之,通过"crudDemo"项目,你可以深入理解如何在实际应用中运用JSP、Servlet、MVC模式、...

    jsp+servlet+javabean实现网上商城项目完整源码

    首先,JSP(JavaServer Pages)是Java平台上的动态网页技术,用于创建交互式的、数据驱动的Web应用程序。在本项目中,JSP主要负责展示用户界面,通过内置的动作指令和表达式语言与后端JavaBean和Servlet进行数据交互...

    jsp servlet jdbc 例

    JSP的核心优势在于它能方便地将表现层逻辑与业务逻辑分离,使代码更易于维护和扩展。 Servlet是Java Web开发中的一个关键组件,它是一个Java类,用于扩展服务器的功能。Servlet主要负责接收和响应来自客户端的HTTP...

    JSP+servlet实现后台超市管理系统

    【标题】"JSP+servlet实现后台超市管理系统"是一个典型的Web应用开发项目,它结合了Java服务器页面(JSP)和Servlet技术,用于构建一个基于Java的后台管理系统。在这个系统中,开发人员使用了JDK 1.7作为Java开发...

    jsp+servlet+Javabean实现得博客网

    在Web开发领域,Java技术栈中的JSP(JavaServer Pages)、Servlet和Javabean是构建动态网站的常用工具,尤其适合创建数据驱动的博客系统。这个“jsp+servlet+Javabean实现的博客网”项目,是通过这三者结合来实现一...

    jsp servlet javabean连接oracle系统

    这是一个典型的三层架构模型,常用于构建动态、数据驱动的Web应用程序。 **JSP(JavaServer Pages)** 是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码,以实现服务器端的逻辑处理。在本项目中,JSP用于...

    jsp+servlet+mysql实现的在线服装商城源码.zip

    该在线服装商城源码是基于Java Web技术栈开发的,主要使用了JSP(JavaServer Pages)、Servlet和MySQL数据库。这个项目提供了一个完整的电子商务平台,用户可以浏览、搜索、购买服装,并进行相应的订单管理。接下来...

    jsp+servlet实现的最简单的个人主页

    【标题】"jsp+servlet实现的最简单的个人主页"揭示了这个项目是通过Java服务器页面(JSP)和Servlet技术来构建一个基础的个人主页。JSP和Servlet是Java Web开发中的关键组件,用于创建动态网页和处理客户端请求。 ...

    MVC实现:JSP+Servlet+mysql

    **MVC模式详解** MVC(Model-View-Controller)是一种经典的软件设计模式,广泛应用于Web应用程序开发,尤其是在Java ...在Java Web环境中,通过JSP、Servlet和MySQL的集成,我们可以构建出强大的数据驱动的应用程序。

    jdbc+jsp+servlet实现对数据库的增删改查

    在IT领域,尤其是在Web开发中,`JDBC`(Java Database Connectivity)、`JSP`(JavaServer Pages)和`Servlet`是三个非常重要的组件,它们共同构建了与数据库交互的基础框架。本文将深入探讨如何利用这三个技术实现...

    jsp+dao+servlet实现新闻发布系统增删改

    在这个系统中,用户可以通过JSP页面进行新闻的创建、查看、更新和删除操作,这些功能的实现依赖于Servlet接收和处理用户请求,以及DAO层对数据库的操作。 具体实现过程中,Servlet作为控制器负责接收HTTP请求,解析...

    jsp servlet+sqlserver简单登录注册

    本项目利用Java的JSP(JavaServer Pages)和Servlet技术,结合SQL Server数据库,实现了一个基础的用户管理功能。以下是该项目涉及的主要知识点: 1. **JSP**: - JSP是Java Web开发中的视图层技术,用于动态生成...

    新闻发布系统(jsp+servlet)

    通过`&lt;jsp:include&gt;`、`&lt;jsp:useBean&gt;`、`&lt;jsp:setProperty&gt;`等动作元素,JSP能够与Servlet进行交互,处理请求和响应。 **2. Servlet** Servlet是Java编写的服务器端程序,用于扩展服务器的功能。在这个新闻发布...

    jsp+servlet+mysql员工管理系统

    在JSP+Servlet+MySQL的架构中,Servlet充当控制器角色,JSP作为视图,而数据访问对象(DAO)和实体类(Employee类)则构成了模型层。 总的来说,"jsp+servlet+mysql员工管理系统"是一个基于Java Web技术的实用项目...

    jspservlet实现的留言板小程序

    【标题】:JSpservlet实现的留言板小程序 【描述】:这个项目是一个...总的来说,这个"jspservlet实现的留言板小程序"是一个学习和理解Servlet、JSP以及数据库交互的绝佳实践项目,涵盖了Web开发的基本流程和技术。

Global site tag (gtag.js) - Google Analytics