Android之实现Servlet

被搞了四天心态,终于把Servlet成功实现了,主要是jdbc没连接成功,问题在于jdbc版本最好和MySQL版本一致,整体流程是先写一个properties,里面写入连接jdbc的参数,如driver,url,username,password,然后写一个BaseDao的类,获取连接资源

private static	String url=null;
 private static String user=null;
 private static String password =null;
 
// 获取连接资源
 static{
	 try {
		 ResourceBundle bundle = ResourceBundle.getBundle("config");
		 String driver= bundle.getString("driver");
		 url = bundle.getString("url");
		 user=bundle.getString("user");
		 password=bundle.getString("password");
		Class.forName(driver);
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
	 
 }

写一个内部类,实现连接和关闭流,两个方法可以单独写一套接口实现, 

public interface Dao {
//获取连接
	Connection getConn() throws Exception;
//关闭资源
	void close (ResultSet rs,Statement st,Connection con) throws Exception;
}

自身写两个方法,调用内部类写的连接和关闭流的方法。

// 获取连接和关闭连接的方法,用内部类写的
 public Connection getConn() throws Exception {
		return new Inner().getConn();
	}
 
 public void close(ResultSet rs, Statement st, Connection con) {
	   new Inner().close(rs, st, con);
 }
 
private class Inner implements Dao {

	public Connection getConn() throws Exception {
		return DriverManager.getConnection(url,user,password);
	}

	public void close(ResultSet rs, Statement st, Connection con)
			  {
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rs=null;
		}
		
		if (st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			st=null;
			
		}
		
		if (con!=null) {
			try {
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			con=null;
		
			
		}
		
	

	
}

 然后就获取数据库连接,获取数据,实现servlet转换成json串三步。

也是可以先写一套接口,然后实现方法体,开始写

public interface CityDao {
//	获取城市列表
public List<City> getCity();
}

先继承写的BaseDao,这是jdbc连接,可以直接调用连接方法,然后实现上面的获取列表城市的接口,返回的是一个城市的列表集合 ,数据库连接成功后执行查询语句,遍历获得的数据,new一个City对象,City对象是写好的,跟数据库数据字段一一对应,然后将获取的数据添加到城市集合里面,返回城市集合,最后关闭流。

public class cityDaoImpl extends BaseDao implements CityDao {

	
	public List<City> getCity() {
		Connection con=null;
		Statement st=null;
		ResultSet rs=null;
		List<City> cities=null;
		
		try {
			con=getConn();
			st=con.createStatement();
			
		rs=st.executeQuery("SELECT*FROM test.provincial ORDER BY test.provincial.sortkey");
//		获取服务器关联数据库数据的城市
			cities=new ArrayList<City>();
			while(rs.next()){
				City city=new City();
				city.setId(rs.getString("pid"));
				city.setName(rs.getString("Provincial"));
				city.setSortKey(rs.getString("sortKey"));
				cities.add(city);
			}
		
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			close(rs, st, con);
		}
		
		return cities;
	}
	

}

先设置要展示页面的头部类型,以及编码格式,然后new 接口,右边填的参数是cityDaoimpl,然后调用获取城市的集合,返回的是城市集合对象,然后new一个RespObject,有数据填1,同时把集合放进该对象的dates里,该字段是Object,可以放入集合的,最后利用谷歌带的Gson,转换成json串,去web.xml映射servlet 就成功就数据库数据变成json串渲染到网页上面了。

public class CityServlet extends HttpServlet {
 
	private static final long serialVersionUID=1L;

		@Override
		protected void doGet(HttpServletRequest req, HttpServletResponse resp)
				throws ServletException, IOException {
			resp.setContentType("text/html");
			resp.setCharacterEncoding("UTF-8");
			PrintWriter out= resp.getWriter();
			
			CityDao dao=new cityDaoImpl();
//			获取数据库带有数据的城市
			List<City> list=dao.getCity();
			RespObject result=null;
			if(list!=null&&list.size()>0){
//				正确返回并且带有数据
				result= new RespObject(1,list);
			}else{
				result= new RespObject(0,"没有数据");
			}
		
			out.println(new GsonBuilder().create().toJson(result));
			out.close();
			out.flush();
		}

		@Override
		protected void doPost(HttpServletRequest req, HttpServletResponse resp)
				throws ServletException, IOException {
			doGet(req, resp);
		}
		

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值