servlet框架改进(基础)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet框架改进(基础)相关的知识,希望对你有一定的参考价值。
想了想 还是先把这个写了 方便理解和自己记忆
首先是
1.servlet格式Login登录页面(正常是jsp来的)我的代码中是One 注意下就没什么
2.LoginC(验证用户)
3.Wel(欢迎界面)LoginC成功就到这
四.UserBeanHandle.java也是业务逻辑层 需要添加xml清单文件
5.UserBean.java 表示user表
6.ConnneDB.java 与数据库的连接
其实功能都一样 用官方的说法就是用面向对象的思想 将代码分离 老师说企业都是怎么做的 的确也是
Login 就不写了
5.UserBean
几个成员变量
private int userId;
private Stirng username;
private String password;
再get和set就完成
6.ConDB
private Connection connection=null;
public Connection getCon() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection=DriverManager.getConnection( "jdbc:mysql://localhost:3306/bookstore", "root", "");
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
2.LoginC
前面有写细节介绍
我就直接往下写
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("gbk");
PrintWriter pw = response.getWriter();
try{
//代码写在try中方便找错误
String name=request.getParameter("username");
String pwd=request.getParameter("password");
// 数据库操作 調用UserBeanHandle
UserBeanHandle handle=new UserBeanHandle();
if(handle.checkUser(name, pwd)){
//用户名密码正确将信息存入
HttpSession hSession=request.getSession(true);
hSession.setMaxInactiveInterval(30);
hSession.setAttribute("pass", "你的用户名:"+name);
response.sendRedirect("Wel?uname="+ java.net.URLEncoder.encode(name, "gbk"));
}//这样就看起来简单舒服了 微笑脸
else{
response.sendRedirect("One");
}
3.Wel
response.setContentType("text/html;charset=utf-8");
HttpSession hs = request.getSession(true);
String val=(String)hs.getAttribute("pass");
if(val==null)
response.sendRedirect("One");//去到登录页面拿用户等
String name=new String((request.getParameter("uname")).getBytes("ISO8859_1"),"GBK");
PrintWriter pw = response.getWriter();
int pageSize=3;
int pageNow=2;
try{
// 动态接受pageNow的值
String page = request.getParameter("pageSelected");
if (page != null) {
pageNow = Integer.parseInt(page);
}
//这里的集合就是业务逻辑层中的 放信息 集合的作用很大的哦
UserBeanHandle userBeanHandle=new UserBeanHandle();
ArrayList arrayList=userBeanHandle.getResultByPage(pageNow, pageSize);
pw.println("<html><body>");
pw.println("<table width=50% border=1>");
pw.println("<tr><th>用户ID</th><th>用户名</th><th>密码</th></tr>");
//稍微注意for 就没什么问题了
for (int i=0;i<arrayList.size();i++) {
//这个很重要
UserBean usBean=(UserBean)arrayList.get(i);//拿到前面数据的消息
pw.println("<tr>");//getUserId等 是通过业务逻辑层去获取数据库中的信息
pw.println("<td>" +usBean.getUserId() + "</td>");
pw.println("<td>" + usBean.getUsername() + "</td>");
pw.println("<td>" + usBean.getPassword() + "</td>");
pw.println("</tr>");
}
pw.println("</table>");
//pageCount获取-->来自UuserBeanHandle
int pageCount=userBeanHandle.getPageCount();
for(int i=1;i<=pageCount;i++){
pw.println("<a href=Wel?uname="+name+"&pageSelected="+i+">"+i+"<a/>");
}
pw.println("</body></html>");
}catch(){e.pringStackTrace();}
四,UserBeanHandle 比较中的业务逻辑层了
// 调用数据库
private Connection connection = null;
private PreparedStatement psStatement = null;
private ResultSet rsResultSet = null;
private int pageCount = 0;
public int getPageCount() {
return pageCount;
}
//分页显示
public ArrayList getResultByPage(int pageNow, int pageSize){
// 数据将保存到集合arrayList中
ArrayList arrayList = new ArrayList<>();
try{
int zh = 0;
//调用了ConDB
ConDB conDB = new ConDB();
connection = conDB.getCon();
psStatement = connection
.prepareStatement("select count(*) from user");
rsResultSet = psStatement.executeQuery();
if (rsResultSet.next()) {
zh = rsResultSet.getInt(1);
}
// 计算pageCount
if (zh % pageSize == 0) {
pageCount = zh / pageSize;
} else {
pageCount = zh / pageSize + 1;
}
psStatement = connection.prepareStatement("select * from user limit " + pageSize
* (pageNow - 1) + "," + pageSize);
rsResultSet = psStatement.executeQuery();
while (rsResultSet.next()) {
UserBean uBean = new UserBean(); // 从UserBean拿来的 表的三列信息
uBean.setUserId(rsResultSet.getInt(1));
uBean.setUsername(rsResultSet.getString(2));
uBean.setPassword(rsResultSet.getString(3));
// 将用户信息放入AraayList
arrayList.add(uBean);
}
catch (Exception e) {
e.printStackTrace();
}
return arrayList;
}
//验证
public boolean checkUser(String username, String password) {
boolean exist = false;
try{
//调用ConDb
ConDB conDB=new ConDB();
connection=conDB.getCon();
psStatement = connection.prepareStatement("select password from user where username="+ "‘" + username + "‘");
rsResultSet = psStatement.executeQuery();
if (rsResultSet.next()) {
String dbPaString = rsResultSet.getString(1);
if (dbPaString.equals(password)) {
exist = true;
}
}
finally{
this.close(); //这个是关闭资源的方法
}
return exist;
}
public void close(){
try{
if (rsResultSet != null) {
rsResultSet.close();
rsResultSet = null;
}
if (psStatement != null) {
psStatement.close();
psStatement = null;
}
if (connection != null) {
connection.close();
connection = null;
}
}
catch (Exception e) {
e.printStackTrace();
}
}
这就完全分开了 按官方的说法 易维护 加功能等
后面的登录页面就是用js写了 还有要添加一些功能 就是查询图书啊 修改图书啊等等
以上是关于servlet框架改进(基础)的主要内容,如果未能解决你的问题,请参考以下文章
初学 Java Web 开发,请远离各种框架,从 Servlet 开发