連線資料庫登入 -詳細介紹基本的JSP結構- 不使用任何框架
阿新 • • 發佈:2019-01-03
JSP(java server page)
JSP=html+css+javascript+java
基本組成:
工程 裡面主要能用到的:
src資料夾,存放JAVA程式碼
web資料夾,存放網頁等
——————————————————————————————————————————
Java:
dao包: 介面以及介面的實現類 介面實現各種資料庫操作。
Domain包:存放各種針對物件(例如使用者,帖子)的實體類 或者 其他
Filter包:存放過濾器
Servlet包:伺服器端程式
SQL包:存放連線資料庫的Connect.java以及JdbcTemplate.java sql語句處理類
test包:存放測試類
——————————————————————————————————————————
HTML:
這個不用多說
————————————————————————————————————
流程:
1.連線資料庫。
SQL包 Connect.java
package SQL; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Connect { private static final String Driver="oracle.jdbc.driver.OracleDriver"; private static final String Url="jdbc:oracle:thin:@localhost:1521:KNOVE"; private static final String User="knove"; private static final String password="123456"; private static Connection conn=null; public static Connection getConnection(){ try { Class.forName(Driver).newInstance(); conn = DriverManager.getConnection(Url, User, password); } catch (Exception e) { System.out.println("連線失敗,錯誤資訊:" + e); } return conn; } public void close() { if(conn!=null){ try { conn.close(); } catch (Exception e) { System.out.println("關閉失敗,錯誤資訊:" + e); } } } }
存放連線Oracle資料庫(或其他資料庫)的資訊。以及getConnection()函式來獲取連線例項。
2 介面 UserDao 處理關於使用者的功能的介面
Dao包的UserDao.java
package dao; import Domain.UserInfo; import java.util.List; public interface UserDao { public boolean login(String userName,String password); public List<UserInfo> getAllUsers(); public boolean register(String userName,String password,String skill,String city,String email); }
這裡實現了三個,分別是登入 ,獲得全部的使用者 List<UserInfo> 以及一個註冊函式
3.實現UserDao介面的實現類:
Dao包的UserJdbcDaoImpl.java
public class UserJdbcDaoImpl implements UserDao {
@Override
public boolean login(String userName,String password){
boolean flag=false;
String sql="select count(*) from Users WHERE Username=? and password =?";
int rowNum=JdbcTemplate.queryForCount(sql, new Object[]{userName,password});
if(rowNum==1){
flag=true;
}
return flag;
}
@Override
public boolean register(String userName,String password,String skill,String city,String email){
String sql="insert into Users(Username,password,Skill,city,Email)values(?,?,?,?,?)";
boolean flag=JdbcTemplate.insertInto(sql, new Object[]{userName,password,skill,city,email});
return flag;
}
@Override
public List<UserInfo> getAllUsers() {
String sql="select * from users";
List<UserInfo> list=JdbcTemplate.query(sql,new ResultSetHandler<List<UserInfo>>(){
@Override
public List<UserInfo> handler(ResultSet rs) {
List<UserInfo> list0=new ArrayList<UserInfo>();
try {
while(rs.next()){
UserInfo user=new UserInfo(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5));
list0.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list0;
}
}, new Object[]{});
return list;
}
}
4.SQL包的JdbcTemplate.java 處理SQL語句並執行類
package SQL;
import java.sql.*;
public class JdbcTemplate {
public static int queryForCount(String sql,Object...param){
int count=0;
Connection connection = Connect.getConnection();
try {
PreparedStatement psmt=connection.prepareStatement(sql);
ParameterMetaData pmd=psmt.getParameterMetaData();
if(param.length!=0&&pmd.getParameterCount()!=0&¶m.length==pmd.getParameterCount()){
for(int i=0,len=param.length;i<len;i++){
psmt.setObject(i+1,param[i]);
}
}
ResultSet rs=psmt.executeQuery();
if(rs.next()){
count=rs.getInt(1);
}
connection.close();
} catch (SQLException e) {
System.out.println("查詢出錯---"+e.getMessage());
}
return count;
}
public static <T> T query(String sql,ResultSetHandler<T> rsh,Object...param){
T t=null;
Connection connection=Connect.getConnection();
try {
PreparedStatement psmt=connection.prepareStatement(sql);
ParameterMetaData pmd=psmt.getParameterMetaData();
if(param.length!=0&&pmd.getParameterCount()!=0&¶m.length==pmd.getParameterCount()){
for(int i=0,len=param.length;i<len;i++){
psmt.setObject(i+1, param[i]);
}
}
ResultSet rs=psmt.executeQuery();
t=rsh.handler(rs);
} catch (SQLException e) {
System.out.println("獲取失敗---"+e);
}
return t;
}
public static boolean insertInto(String sql,Object...param){
boolean flag=false;
Connection connection = Connect.getConnection();
try {
PreparedStatement psmt=connection.prepareStatement(sql);
ParameterMetaData pmd=psmt.getParameterMetaData();
if(param.length!=0&&pmd.getParameterCount()!=0&¶m.length==pmd.getParameterCount()){
for(int i=0,len=param.length;i<len;i++){
psmt.setObject(i+1,param[i]);
}
}
ResultSet rs=psmt.executeQuery();
flag=rs.next();
connection.close();
} catch (SQLException e) {
System.out.println("查詢出錯---"+e.getMessage());
}
return flag;
}
}
5.測試類:
來測試是否可以成功實現:
test包的test.java
UserDao userDao=new UserJdbcDaoImpl();
System.out.println(userDao.login("Knove","123456"));
使用者名稱和密碼隨意填等 ,看控制檯資訊。
JAVA已經實現後,現在就是要讓網頁,也就是jsp頁面來執行:
首先建立Servlet包,裡面存放User.java,用來處理jsp頁面的資訊:
@WebServlet("/Users")
public class User extends HttpServlet {
private UserDao userDao=new UserJdbcDaoImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String param=request.getParameter("param");
if("login".equals(param)){
String userName=request.getParameter("username");
String passWord=request.getParameter("password");
try{
if(userDao.login(userName,passWord)){
//成功登入
HttpSession httpSession=request.getSession();
httpSession.setAttribute("name",userName);
request.getRequestDispatcher("views/main.jsp").forward(request, response);//成功登入轉向
}
else{
//登入失敗!
}
}
catch (Exception e){
System.out.println("Faied"+e);
}
}
}
}
@WebServlet("/Users")
這行程式碼即讓頁面可以以/Users 的URL訪問
Login.jsp中的程式碼: 精簡到form
值得注意的就是action="Users?param=login"
<form method="post" action="Users?param=login">
<div class="center">
<input type="text" name="username" placeholder="輸入使用者名稱"class="text_kj">
</div>
<div class="center">
<input type="password" name="password" placeholder="輸入密碼 " class="text_kj">
</div>
<div class="right">
<a href="#">忘記密碼</a>
</div>
<div class="center">
<button type="submit" class="button_kj">登入</button>
</div>
<div class="center">
<button type="button" id="register" class="button_kj">註冊</button>
</div>
</form>
即可以實現 訪問Oracle資料庫登入