背景:
使用Servlet技术实现服务端,使用Android平台作为客户端,实现一个个人店铺,店铺商品不限。功能要求如下:
1. 提供登录、注册功能;(10分)
2. 首页面包括“商品列表”子页面、“订单”子页面和“我的”子页面;(20分)
3. 在商品列表页点击某个商品列表项可跳转到该商品的详情页面,在商品详情页面可以实现加入购物车和购买操作;商品数据来自于服务端;(20分)
4. 订单页显示个人的订单历史记录(每个订单显示订单日期、订单总价格),点击某个订单项,可跳转到订单详情页(显示订单中的商品列表,包括商品名称、单价、数量以及订单总价格);(20分)
4. 提供购物车页面,能够对购物车中的商品进行编辑:数量的增减、商品的删除、总价格的计算等;(10分)
5. 实现我的页面,能够维护个人信息;(10分)
6. 服务器端仅需提供接口,不需实现可视化的界面;(10分)
提交附件压缩包要求:
1. 包含Android端代码,以及服务端代码(工程clean后提交),mysql导出的.sql数据库脚本文件;
2. 包含实现功能简介及必要的重要运行截图文档,word格式(也可以是录制的运行视频);
安卓展示:
1-登录和注册【这里仅展示注册】
2-商品列表
3-商品详情
4-购物车
5-订单
接口介绍:
本项目部署在公网,安卓请求数据为数据库中数据,servlet后台也已经部署在公网
项目使用ecplise+servlet+apache+mysql进行开发
遇到的技术难点:
笔者表示这还是第一次用servlet成功写出一个前后端交互的项目,还是验证了java所学,比较兴奋。个人认为比较有挑战性的技术难点如下:
1-以json格式与前端交互,用到了JSONObject()。
2-公网部署servlet项目以及暴露图片地址给前端访问,原以为很难,实际很简单。
3-c3p0配置以及使用QueryRunner来执行sql。这一步笔者认为比较花时间。比如下面的new BeanListHandler<Cart>(Cart.class),如果使用不同BeanListHandler,都会返回不一样的值,这里debug看的很痛苦。
//显示购物车所有信息
public List<Cart> viewCart(int user_id) throws SQLException {
QueryRunner query = new QueryRunner(JDBCUtils.getDataSource());
//感觉连接建立成功了
String sql = "select * from cart where user_id = " + user_id + " and is_delete = 0 and status = 0";
// System.out.println(sql);
return query.query(sql, new BeanListHandler<Cart>(Cart.class));
}
4-因为要用到一些公共的包,所以笔者配置了很多jar包,jar包笔者一度也配置的很痛苦,终于知道为啥要用maven了!!!maven是在太方便了!!!!
servlet后台代码:
vx: zew1040994588
登录servlet
public class userLogin extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//0、解决返回中文乱码问题
resp.setCharacterEncoding("UTF-8");
JSONObject web_dict = JsonObjectWeb.getJsonInfoDict(req);
String username = web_dict.getString("username");
String password = web_dict.getString("password");
User user = new User();//创建user对象
user.setUsername(username);
user.setPassword(password);
vx: zew1040994588
注册servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决返回中文乱码问题
resp.setCharacterEncoding("UTF-8");
JSONObject web_dict = JsonObjectWeb.getJsonInfoDict(req);
String username = web_dict.getString("username");
String password = web_dict.getString("password");
User user = new User();//创建user对象
user.setUsername(username);
user.setPassword(password);
安卓代码:
vx :zew1040994588
regist.setOnClickListener(v -> {
Intent intent = new Intent(this, RegiestActivity.class);
startActivity(intent);
});
login.setOnClickListener(v -> {
if (user.getText().toString().isEmpty()){
Toast.makeText(this, "账号不可以为空!", Toast.LENGTH_SHORT).show();
}else if (pwd.getText().toString().isEmpty()){
Toast.makeText(this, "密码不可以为空!", Toast.LENGTH_SHORT).show();
}else {
JSONObject jsonObject=new JSONObject();
try {
jsonObject.put("username", user.getText().toString());
jsonObject.put("password", pwd.getText().toString());
} catch (JSONException e) {
e.printStackTrace();
}
mPresenter.startpostInfoJsonToken(Constant22.BASE_Login, LoginBean.class, jsonObject.toString(),"");
}
});