`

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+ACCESS网上拍卖平台系统(源代码+论文).rar

    资料包中的源代码部分可能包含了多个JSP页面、Servlet类、JavaBeans组件以及用于处理数据库交互的JDBC驱动代码。这些源码文件共同构成了一个动态网站,它能够响应用户的请求,执行相应的业务逻辑,并与后端的Access...

    北大青鸟ACCP 6.0 软件开发初级程序员:使用JSP.Servlet.Ajax技术开发新闻发布系统.pdf

    09年6月14日,IBM全球同步发布了一款具有划时代意义的数据库产品——DB2 9.5,而这款新品最大特点即是率先实现了可扩展标记语言(XML)和关系数据间的无缝交互,而无需考虑数据的格式、平台或位置。  ACCP6.0课程...

    基于Java+JDBC+Mysql实现的教务管理系统(完整源代码)

    功能 学生管理:包括学生的基本信息、课程成绩等信息的管理; 教师管理:包括教师的基本信息、授课信息...设计前端页面,使用Java Web技术(例如Servlet、JSP等)实现与后端的交互; 使用Tomcat或其他Web容器进行部署。

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    8.6.1 实现与ServletAPI的交互 86.2 域模型DomainModel 86.3 驱动模型ModelDriven 8.7 实战检验 8.7.1 Struts2处理表单数据 8.7.2 使用M印类型的request、session、application 8.8 疑难解惑 8.8.1 Struts Prepare ...

    GoodProject Maven Webapp.zip

    JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    它使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的...

    java 面试题 总结

    动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的...

    本科毕业设计开题报告(计算机协会信息管理系统的设计与实现V5)

    而对于信息管理系统来说,java能够实现前台和后台的信息交互,并能够对前台所提出的请求处理数据,因此在开发本系统时我把它作为本系统的开发语言。 2. 本系统开发工具的选择 本系统前台使用的开发工具是MyEclipse。...

    超级有影响力霸气的Java面试题大全文档

     动态INCLUDE用jsp:include动作实现 &lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件...

    数据库综合设计报告.doc

    详细设计 9 3.1 根据数据表设计javabean 9 3.2 JDBUtils连接数据库 10 3.3 与数据库进行交互的Dao层 11 3.4 与用户交互的Jsp页面 12 3.5 Servlet控制请求与响应 13 3.6 Junit单元测试 15 第四章 设计结果及分析 16 ...

    C--Teach-assistant:C语言辅助教学平台,含在线编译运行,编译结果和运行结果显示,支持交互,课程、题库、考试管理,记录保存,

    C--Teach-assistant ...2.后台:java EE(jsp+servlet)(Eclipse开发),请自行安装jdk和配置环境变量 3.服务器:Tomcat9.0,下载和配置环境变量 4.数据库:Mysql+数据库驱动程序,注意:数据库驱动程序要么放在Tomc

    ssh(structs,spring,hibernate)框架中的上传下载

    将FileActionForm直接作为业务层的接口入参,相当于将Web层传播到业务层中去,即将业务层绑定在特定的Web层实现技术中,按照分层模型学院派的观点,这是一种反模块化的设计,但在"一般"的业务系统并无需提供多种UI...

    Spring.3.x企业应用开发实战(完整版).part2

    16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要...

    Spring3.x企业应用开发实战(完整版) part1

    16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要...

    online-shop:2012 年开发的交互式 J2EE Web 技术(Java 7)

    使用我在 2012 年开发的各种技术的交互式网站 Java、JSP、JSTL MySQL、SQL、触发器、索引、审计、设计和开发的网站商店数据库架构、ER 图表、数据库安全(MD5 加密、SQL 注入) JavaScript、AJAX、 HTML、XML ...

    java开源包3

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包4

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    h_JAVA 2应用编程150例.rar

    实例60 使用单独JDBC连接驱动程序 184 实例61 数据库基本操作 185 实例62 使用游标 189 实例63 使用事务 191 实例64 实现SQL语句的检索功能 192 实例65 SQL嵌套检索 194 实例66 获取数据库基本信息 195 第6章 Java C...

    JAVA上百实例源码以及开源项目

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

Global site tag (gtag.js) - Google Analytics