java web 最小框架_JavaWeb小小开发框架(只有3个类)

本套代码实现功能如下:

1.请求路由功能

2.Bean注入

3.执行匿名及命名参数sql语句

整套工程代码:http://pan.baidu.com/s/1uDIOm

注:1.本代码为个人练习所用,逻辑不够严谨,切勿用在正式工程中。

2.鉴于下面的代码写的实在没什么水平,后来改造了一版做了个小例子。见:http://www.oschina.net/code/snippet_240329_46337

1.[文件] WebServlet.java ~ 4KB     下载(15)

package com.hongyuan.core;

import java.lang.reflect.Method;

import java.util.Enumeration;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")

public class WebServlet extends HttpServlet {

protected HttpServletRequest request;

protected HttpServletResponse response;

protected Map cfgParams=new HashMap();

protected Map dbSqls=new HashMap();

protected Map msgs=new HashMap();

public void init(){}

@Override

public final void init(ServletConfig config) throws ServletException {

@SuppressWarnings("unchecked")

Enumeration names = config.getInitParameterNames();

while(names.hasMoreElements()){

String name=names.nextElement();

if(name.startsWith("Bean_")){

//为servlet注入Bean对象

String beanName=name.substring("Bean_".length());

String beanClass=config.getInitParameter(name);

try {

Object bean = Class.forName(beanClass).newInstance();

bean.getClass().getMethod("setServlet",new Class[]{WebServlet.class}).invoke(bean,this);

this.getClass().getField(beanName).set(this,bean);

} catch (Exception e) {

e.printStackTrace();

}

}else if(name.startsWith("Sql_")){

String sqlName=name.substring("Sql_".length());

String sql=config.getInitParameter(name);

dbSqls.put(sqlName,sql);

}else if(name.startsWith("Message_")){

String msgName=name.substring("Message_".length());

String msg=config.getInitParameter(name);

msgs.put(msgName,msg);

}else if(name.startsWith("Param_")){

String paramName=name.substring("Param_".length());

String paramVal=config.getInitParameter(name);

cfgParams.put(paramName,paramVal);

}

}

}

@Override

public final void service(HttpServletRequest request, HttpServletResponse response){

this.request=request;

this.response=response;

try {

//根据路由参数将请求转交到指定方法执行

String routeParam=cfgParams.get("routeParam");

String action=this.get((routeParam==null||"".equals(routeParam))?"action":routeParam,"init");

Method method=this.getClass().getMethod(action);

method.invoke(this);

} catch (Exception e) {

this.init();

}

}

/**

* 展示指定页面

* @param page

*/

protected void show(String page){

try {

String pagePath=cfgParams.get("pagePath");

request.getRequestDispatcher(((pagePath==null||"".equals(pagePath))?"/WEB-INF/pages/":pagePath)+page).forward(request,response);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获取指定名称的请求参数

* @param name

* @param def

* @return

*/

protected String get(String name,String def){

String value=request.getParameter(name);

if(value!=null&&!"".equals(value.trim())){

return value;

}else{

return def;

}

}

/**

* 向页面输出指定参数

* @param name

* @param value

*/

protected void put(String name,Object value){

request.setAttribute(name,value);

}

/**

* 获取指定名称的消息内容(可设置默认值)

* @param name

* @param def

* @return

*/

protected String getMsg(String name,String def){

String msg=msgs.get(name);

if(msg!=null&&!"".equals(msg.trim())){

return msg;

}else{

return def;

}

}

/**

* 获取指定名称的消息内容

* @param name

* @param def

* @return

*/

protected String getMsg(String name){

return this.getMsg(name,"");

}

}

2.[文件] WebBean.java ~ 355B     下载(7)

package com.hongyuan.core;

public class WebBean {

protected DBUtil dbUtil=new DBUtil();

private WebServlet servlet;

public WebServlet getServlet() {

return servlet;

}

public void setServlet(WebServlet servlet) {

this.servlet = servlet;

}

public String getSql(String sqlName){

return servlet.dbSqls.get(sqlName);

}

}

3.[文件] DBUtil.java ~ 5KB     下载(5)

package com.hongyuan.core;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.sql.Types;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.sql.DataSource;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class DBUtil {

private static DataSource dataSource = null;

static{

/**

* 初始化数据源,不同的数据库获取数据源的方式不同,可参考相应数据库的说明文档。

*/

MysqlDataSource mds=new MysqlDataSource();

mds.setURL("jdbc:mysql://localhost:3306/test");

mds.setUser("root");

mds.setPassword("123456");

dataSource=mds;

}

/**

* 获取数据库连接

* @return

* @throws SQLException

*/

public static Connection getConnection() throws SQLException {

return dataSource.getConnection();

}

/**

* 关闭数据库连接资源

* @param conn

* @param s

* @param rs

* @throws SQLException

*/

public static void close(Connection conn, Statement s, ResultSet rs) throws SQLException {

if (rs != null) rs.close();

if (s != null) s.close();

if (conn != null) conn.close();

}

/**

* 执行数据库查询语句

* @param sql查询sql,匿名参数用?表示,命名参数使用“:参数名”表示

* @param params查询参数

* @return

* @throws SQLException

*/

@SuppressWarnings("unchecked")

public List> select(String sql,Object... params) throws SQLException{

return (List>)this.executeSql(sql,params);

}

/**

* 执行数据库记录变更语句(增,删,改)

* @param sql查询sql,匿名参数用?表示,命名参数使用“:参数名”表示

* @param params查询参数

* @return

* @throws SQLException

*/

public int update(String sql,Object... params) throws SQLException{

return (Integer)this.executeSql(sql,params);

}

/**

* 通用Sql执行方法

* @param sql查询sql,匿名参数用?表示,命名参数使用“:参数名”表示

* @param params命名参数

* @return

* @throws SQLException

*/

public Object executeSql(String sql, Object... params) throws SQLException {

//处理命名参数

if(params!=null&&params[0] instanceof Map){

List pList=new ArrayList();

Map pMap=(Map)params[0];

Matcher pMatcher = Pattern.compile(":(\\w+)").matcher(sql);

while(pMatcher.find()){

String pName=pMatcher.group(1);

pList.add(pMap.get(pName));

}

sql=pMatcher.replaceAll("?");

params=pList.toArray();

}

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try {

conn = DBUtil.getConnection();

ps = conn.prepareStatement(sql);

if (null != params) {

//初始化查询参数

for(int i=0;i

Object param = params[i];

if(param!=null){

ps.setObject(i+1,param);

}else{

ps.setNull(i+1,Types.NULL);

}

}

}

//处理结果集

boolean isResultSet = ps.execute();

List result = new ArrayList();

do {

if (isResultSet) {

List> tableData=new ArrayList>();

ResultSet resultSet=ps.getResultSet();

while(resultSet.next()){

Map rowData=new HashMap();

for(int i=1;i<=resultSet.getMetaData().getColumnCount();i++){

rowData.put(resultSet.getMetaData().getColumnName(i),resultSet.getObject(i));

}

tableData.add(rowData);

}

result.add(tableData);

} else {

result.add(new Integer(ps.getUpdateCount()));

}

} while ((isResultSet = ps.getMoreResults()) == true || ps.getUpdateCount() != -1);

//处理返回结果

if (result.size() == 0) {

return null;

} else if (result.size() == 1) {

return result.get(0);

} else {

return result;

}

} catch (SQLException e) {

throw new SQLException("无法执行的sql语句!");

} finally {

DBUtil.close(conn, ps, rs);

}

}

}

4.[文件] web.xml ~ 657B     下载(9)

]>

&webServlet;

&webServletMapping;

index.html

index.htm

index.jsp

5.[图片] web-servlets.part.png

05234402_pys6.png

6.[图片] web-servlet-mapping.part.png

05234402_ULhd.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值