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框架改进(基础)的主要内容,如果未能解决你的问题,请参考以下文章

别急着学框架,Tomcat基础先看看

基础篇-三大框架之一(struts2框架的搭建)

et7.2框架的优缺点

初学 Java Web 开发,请远离各种框架,从 Servlet 开发

springmvc的DispatcherServlet在工作时是以单例模式工作的吗?

Servlet基础