keel_jdbc1.0 (jdk1.5+Extjs4.0) web项目_包含前后台源码
最近发布?[Extjs4.0] keel_jdbc2.0后台管理模块 (包含前后台源码)
地址如下:
?http://czpae86.iteye.com/blog/1058754
?
项目源码见附件!!?
?
安装方法:
1,导入jar包.用到的jar包如下,请自己在网上下载,都是比较常见的.
?
2,还原数据库(在附件"keel数据库备份.rar"上)数据库使用的是MS SERVER 2005,
如果更改数据库请添加相应的jar包,和修改db.properties文件.
?
3,部署到tomcat(本人使用的是tomcat5.0)
?
4,启动tomcat,浏览器输入,如http://localhost:8080/keel_jdbc1.0/??(端口自己按实际情况更改)
?
5,帐号,密码都为(admin)
?
?
?
版本 V1.0
1:前台界面暂时只有登录,后续版本会增加复杂的页面!(用Extjs已经3年)
2:后台主要如下
?
?
一,通过一个servlet作为前后台交互入口,代码如下:
?
?
package keel.util;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.util.Enumeration;import java.util.HashMap;import java.util.InvalidPropertiesFormatException;import java.util.Map;import java.util.Properties;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;/** * 前后台交互入口 * @author 蔡治平 * @since 2011-04-23 */public class KeelServlet extends HttpServlet {private Logger logger = Logger.getLogger(KeelServlet.class);private final String doGetMethod = "doGet";private final String doPostMethod = "doPost";private final String classConfigPath = "classConfig.xml";/** * 通过get方法提交将会调用该方法 */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");dataOut(request, response, doGetMethod);}/** * 通过post方法提交将会调用该方法 */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");dataOut(request, response, doPostMethod);}/** * 打包提交的参数 * @param request * @param method * @return Map */private Map<String,Object> dataInToMap(HttpServletRequest request,String method){Enumeration names = request.getParameterNames();Map<String,Object> map = new HashMap<String, Object>();while(names.hasMoreElements()){String name = names.nextElement().toString();String value = request.getParameter(name);if(method.equals(doGetMethod)){try {byte [] bytes = value.getBytes("ISO-8859-1");map.put(name, new String(bytes,"UTF-8"));} catch (UnsupportedEncodingException e) {logger.error("打包提交参数出现异常,原因:"+e);}}else{map.put(name, value);}}return map;}/** * 获得类名 * @param name * @return String */private String getClassName(String name){Properties prop = new Properties();String clsName = "";try {prop.loadFromXML(Thread.currentThread().getContextClassLoader().getResourceAsStream(classConfigPath));//this.getClass().getClassLoader().getResourceAsStream(classConfigPath)clsName = prop.getProperty(name);if(clsName==null){logger.error(classConfigPath+"配置中没有定义key="+name);}else if(clsName.trim().equals("")){logger.error(classConfigPath+"配置中key="+name+"的值为空");}else{logger.info("从"+classConfigPath+"中成功获取类配置key="+name+"-->"+clsName);}} catch (InvalidPropertiesFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return clsName;}/** * 该方法打包前台提交参数,通过映射调用方法,然后返回结果到前台 * @param request * @param response * @param method */@SuppressWarnings("unchecked")private void dataOut(HttpServletRequest request, HttpServletResponse response, String method){Map dataIn = this.dataInToMap(request,method);dataIn.put("session", request.getSession());String clsName = getClassName(request.getParameter("clsName"));String methodName = request.getParameter("methodName");Map dataOut = CallMethod.callMethod(clsName, methodName, dataIn);String k = (String) dataOut.get("dataOut");PrintWriter out;try {out = response.getWriter();out.print(k);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}}
?
?
二,前台传入类别名(classConfig.xml中配置),方法名,通过反射执行类方法
?
?
package keel.util;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Map;/** * 通过反射执行类方法 * @author 蔡治平 * @since 2011-04-23 */public class CallMethod {public static Map callMethod(String clsName,String method, Map<String,Object> dataIn) { Class cls = null; try { cls = Class.forName(clsName); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Class partypes[] = new Class[1]; partypes[0] = Map.class; Method meth = null; try { meth = cls.getMethod(method, partypes); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } Object returnValue = null; try { returnValue = meth.invoke(cls.newInstance(), dataIn); } catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } Map dataOut = (Map) returnValue; return dataOut; }}?
?
三,一个数据库连接池和一些数据库操作的封装,代码请看附件项目.
?
希望有你想要的东西! 请多给意见!
注意:该项目没有用到hibernate,spring,struts,dwr等框架!!
?
1 楼 dfbdfbdfb 2011-04-29 不好意思楼主,我没看出你的意图是什么这是小学毕业就应该会的东东。。夸张点了,我的意思是j2ee第一节课结束,就应该有的东西
你怎么还扯上那些框架?那是中学的,小学当然用不上了 2 楼 czpae86 2011-05-04 dfbdfbdfb 写道不好意思楼主,我没看出你的意图是什么
这是小学毕业就应该会的东东。。夸张点了,我的意思是j2ee第一节课结束,就应该有的东西
你怎么还扯上那些框架?那是中学的,小学当然用不上了
厉害
3 楼 busing 2011-05-05 前台传递xml数据,后台直接通过解析xml执行方法? 想法不错! 4 楼 czpae86 2011-05-06 busing 写道前台传递xml数据,后台直接通过解析xml执行方法? 想法不错!
前台传的是json数据 5 楼 xiaokang1582830 2011-05-14 不好意思楼主,我没看出你的意图是什么
这是小学毕业就应该会的东东。。夸张点了,我的意思是j2ee第一节课结束,就应该有的东西
你怎么还扯上那些框架?那是中学的,小学当然用不上了
个人觉得你应该去理解下框架的利弊和jdbc的好处,真正nb的人是懂得去优化jdbc的性能,纯粹的jdbc执行效率比框架高N倍,但是这对开发人员要求相当高.不要认为你会点框架就是强人,真正的高手是要有自己的思想而不是只会照搬别人的东西 6 楼 azheng270 2011-06-01 鼓励一下,楼主继续加油做好 7 楼 shouzhang1_2 2011-06-15 Auto-generated catch xiaokang1582830 写道不好意思楼主,我没看出你的意图是什么
这是小学毕业就应该会的东东。。夸张点了,我的意思是j2ee第一节课结束,就应该有的东西
你怎么还扯上那些框架?那是中学的,小学当然用不上了
个人觉得你应该去理解下框架的利弊和jdbc的好处,真正nb的人是懂得去优化jdbc的性能,纯粹的jdbc执行效率比框架高N倍,但是这对开发人员要求相当高.不要认为你会点框架就是强人,真正的高手是要有自己的思想而不是只会照搬别人的东西
同意!楼主的意思 起一个抛砖引玉的作用,给个思路,或简单的方法,而不是让你去用到项目里! 8 楼 chen4w 2012-02-04 楼主的开放,分享精神值得称道!
我在使用ext过程中遇到和你类似的问题,但是用jsonRPC可以完成本文类似的功能,
jsonRPC和楼主的思路差不多,后台也是通过反射机制动态调用相应方法。
但在参数传递方面更强。jsonRPC在前台处理了结构化的提交数据编码,在后台可以完整还原。较之本文的仅仅以map作为参数,更加强大。