之前写的三篇文章,自己看了感觉没有排版好,看着比较乱,不能提供 一个清晰的思路,以后注意。
上一篇我们学习了基于jsp+javabean开发的登录模块,现在总结一下开发中的问题及难点,还有这种开发模式的缺点。
一、开发中的问题及难点:
1、在Userdao.java类中,封装了一个查询的方法select(String sql),针对方法的 返回值不知道该使用什么类型,最后确定返回一个ResultSet,在logincheck.jsp中拿到返回结果,进行判断。
2、关于<jsp:usebean></jsp:usebean>的使用,只有当User.java中的属性名和页面传过来的参数名一样的时候,才可以 使用<jsp:setPropertity name="" property="*"/>自动赋值。
3、页面跳转的问题:几种页面跳转方式:RequestDispatcher.forward()、response.sendRedirect()客户端跳转,地址栏改变、<jsp:forward page="">服务器端跳转,地址栏不改变。
二、开发模式的缺点:jsp主要是进行页面显示,在jsp中放一些 java代码进行业务处理,不利于维护。
三、改进方法:把业务处理放到servlet,大量重复代码写在javabean中。
四、基于jsp+servlet+javabean开发的登录模块:
使用这种模式,就不需要建立logincheck.jsp文件了。WebRoot目录下只需要login.jsp、success.jsp、false.jsp。
src下目录结构:
User.java中代码:
package testservlet;
public class User {
private String name;
private String password;
public User(){}
public User(String name,String password){
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
ConUtil.java中的代码:
package util;
import java.sql.*;
public class ConUtil {
private String driver = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://127.0.0.1:3306/test";
private String dbuser = "root";
private String dbpass = "Admin123";
private Connection con = null;
public Connection getCon(){
try {
Class.forName(driver);
con = DriverManager.getConnection(url,dbuser,dbpass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public void closecon(){
if(con!=null)
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
UserDao.java中的代码:
package dao;
import testservlet.User;
import util.ConUtil;
import java.sql.*;
public class UserDao {
public User login(Connection con,User user){
User respuser = null;
String sql = "select * from t_user where mame=? and password=?";
try {
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setString(2,user.getPassword());
ResultSet rs = ps.executeQuery();
while(rs.next()){
respuser = new User();
respuser.setName(user.getName());
respuser.setPassword(user.getPassword());
}
} catch (SQLException e) {
e.printStackTrace();
}
return respuser;
}
}
ServletDao.java中的代码:
package service;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import dao.UserDao;
import testservlet.User;
import util.ConUtil;
public class ServletDao extends HttpServlet {
ConUtil con = new ConUtil();
UserDao ud = new UserDao();
public ServletDao() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = (String)request.getParameter("name");
String pass = (String)request.getParameter("password");
Connection conn = null;
conn = con.getCon();
User u = new User(name,pass);
User uu = ud.login(conn, u);
if(uu!=null){
HttpSession session = request.getSession();
session.setAttribute("name",name);
response.sendRedirect("success.jsp");
}else{
response.sendRedirect("false.jsp");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
public void init() throws ServletException {
}
}
运行结果:
OK!
本文总结了基于jsp、servlet和javabean开发登录模块时遇到的问题与难点,包括Userdao.java中查询方法的返回值处理、<jsp:usebean>标签的使用、页面跳转方式,以及此开发模式的缺点。提出了将业务处理移到servlet,重复代码处理放在javabean的改进方案。
812





