web java工程的创建_简单JavaWeb工程创建
項(xiàng)目目錄簡介
創(chuàng)建數(shù)據(jù)庫連接工具
db.properties
將數(shù)據(jù)庫連接配置寫在本文件中,當(dāng)配置發(fā)生變化時(shí),僅需修改本文件內(nèi)容即可
ConnectionUtil
這個類中總共寫了三個方法
靜態(tài)方法 讀取properties文件中的配置,此處僅是讀取,并不創(chuàng)建數(shù)據(jù)庫連接
static {
//類加載器讀取文件
try {
InputStream in = ConnectionUtil.class.getClassLoader().getResourceAsStream("db.properties");
props.load(in);
driver = props.getProperty("jdbc.driver");
url = props.getProperty("jdbc.url");
username = props.getProperty("jdbc.username");
password = props.getProperty("jdbc.password");
Class.forName(driver);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
靜態(tài)方法 返回?cái)?shù)據(jù)庫連接 外部方法可以調(diào)用這個方法獲取數(shù)據(jù)庫連接
/**
* 獲取連接的方法
*/
public static Connection getConn() throws Exception{
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
靜態(tài)方法 關(guān)閉數(shù)據(jù)庫連接
/**
* 關(guān)閉連接的方法
*/
public static void closeConn(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
實(shí)體類的創(chuàng)建
實(shí)體是與數(shù)據(jù)庫對應(yīng)的實(shí)體,變量命名與數(shù)據(jù)類型與數(shù)據(jù)庫盡量保持一致
package com.sx.beans;
public class User {
private String loginName;
private String password;
private String sex;
private String address;
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public User() {
}
public User(String loginName, String password, String sex, String address) {
this.loginName = loginName;
this.password = password;
this.sex = sex;
this.address = address;
}
@Override
public String toString() {
return "User [loginName=" + loginName + ", password=" + password + ", sex=" + sex + ", address=" + address
+ "]";
}
}
eclipse和idea中都由對實(shí)體類創(chuàng)建的快捷方式
在User.java中單擊右鍵 找到Source ,單擊這兩處可以快速生成get set方法和構(gòu)造方法
Dao創(chuàng)建
Dao層又為Data access object,將與數(shù)據(jù)庫的交互分別寫在對應(yīng)的接口與實(shí)現(xiàn)類中
User與數(shù)據(jù)庫的交互操作 本文僅以checkPassword :檢驗(yàn)用戶登錄密碼是否正確為例。
userDao接口
在這個接口中定義與數(shù)據(jù)庫交互完成的功能,這里檢查用戶登錄,傳入?yún)?shù)密碼和賬號,通過數(shù)據(jù)庫查詢返回User。這里采用先創(chuàng)建接口再創(chuàng)建實(shí)現(xiàn)類的方式,為什么要多此一舉呢?這種設(shè)計(jì)模式滿足低耦合,高內(nèi)聚的設(shè)計(jì)理念,功能之間互不干擾,而且在團(tuán)隊(duì)開發(fā)中,一個人完成了某個功能的開發(fā),其他人只需要關(guān)心功能的實(shí)現(xiàn)即可,直接傳參調(diào)用,而不需要關(guān)心內(nèi)部的實(shí)現(xiàn)。
package com.sx.dao;
import java.util.List;
import com.sx.beans.User;
public interface UserDao {
public User checkPassword(String username,String password);
public List findAll();
public int modUser(User user);
public int addUser(User user);
}
userDaoImpl
實(shí)現(xiàn)checkPassword方法,獲取數(shù)據(jù)庫鏈接,通過sql語句查詢結(jié)果,將查到的信息賦值給創(chuàng)建的User對象,User對象初始為空,如果查詢到結(jié)果,則User就不為空,我們可以通過判斷User 是否為null判斷賬號和密碼是否正確。
@Override
public User checkPassword(String username, String password) {
User u = null;
Connection conn = null;
try {
conn = ConnectionUtil.getConn();
String sql = "select loginname,sex,address from t_staff t " + "where t.loginname = ? and password = ?";
PreparedStatement pre = conn.prepareStatement(sql);
pre.setString(1, username);
pre.setString(2, password);
ResultSet res = pre.executeQuery();
if (res.next()) {
u = new User();
u.setLoginName(res.getString("loginName"));
u.setAddress(res.getString("address"));
}
return u;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ConnectionUtil.closeConn(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
Service
為controller提供服務(wù) 也是采用寫接口,在寫實(shí)現(xiàn)類的方式
Service 接口
public interface UserService {
User loginCheck(String username,String password);
}
ServiceImpl 實(shí)現(xiàn)類
在service層調(diào)用dao,以完成對應(yīng)的功能
注意這里書寫的方式,UserDao userDao = new UserDaoImpl();
new 后后面跟的是實(shí)現(xiàn)類類名,必須通過實(shí)現(xiàn)類才能調(diào)用對應(yīng)的方法,變量名一般命名為xxxDao,而實(shí)際上它是一個實(shí)現(xiàn)類,這種命名方式可讀性非常好,單從字面就能知道功能與對應(yīng)所屬的層。
@Override
public User loginCheck(String username, String password) {
UserDao userDao = new UserDaoImpl();
User user = userDao.checkPassword(username, password);
return user;
}
servlet
servlet 控制著前段訪問的路徑 前段的請求會轉(zhuǎn)發(fā)到這里,servlet根據(jù)前端不同的請求,調(diào)用不同的service 返回 數(shù)據(jù)給前端
每一個servlet對應(yīng)一個action,這個配置在web.xml中完成,后續(xù)會說到。
servlet 創(chuàng)建
創(chuàng)建出servlet的時(shí)候,會默認(rèn)為我們創(chuàng)建doget與dopost方法,這兩種方法對應(yīng)著前端不同的請求方式。以登錄為例,前端如果采用get方法,在登錄時(shí)輸入了密碼,get方法會在地址欄中顯示出所傳的參數(shù)。post方法則只顯示請求資源路徑,具有較高的安全性,所以采用了doPost方法處理請求。
首先是獲取前端所傳過來的參數(shù),然后創(chuàng)建service,調(diào)用service獲取user對象,通過判斷對象是否為空來判斷用戶名賬號和密碼是否正確。如果賬號存在且密碼正確,跳轉(zhuǎn)到listuser界面,如果錯誤則跳轉(zhuǎn)到error界面
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
UserService service = new UserServiceImpl();
User user = service.loginCheck(username, password);
response.setContentType("text/html;charset=utf-8");
if(user != null) {
List users = service.findAll();
HttpSession session = request.getSession();
session.setAttribute("users", users);
response.sendRedirect("listuser.jsp");
}else {
response.sendRedirect("error.jsp");
}
}
web.xml 配置
Exercise
login.jsp
Login
com.sx.controller.LoginCheck
Login
/login
對于創(chuàng)建的servlet,我們要配置servlet與servlet-mapping。
servlet節(jié)點(diǎn)中,有servlet名字與對應(yīng)的class,可以理解為:為servlet起個名字。servlet-class注意路徑書寫是否正確,可以通過 按住Ctrl鍵同時(shí)鼠標(biāo)左鍵放到路徑上,單擊可以訪問到你的LoginCheck類,說明配置成功。
servlet-mapping:配置前端請求路徑與servlet匹配,注意要加/
Login
com.sx.controller.LoginCheck
Login
/login
以上我們已經(jīng)實(shí)現(xiàn)了后端的全部功能。
jsp簡單說明
用戶名:
密碼:
form method中指定請求方式為post 對應(yīng)servlet中使用dopost方法響應(yīng)請求
input name屬性 username 與password 對應(yīng)servlet獲取參數(shù)時(shí)的變量名字
String username = request.getParameter("username");
String password = request.getParameter("password");
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的web java工程的创建_简单JavaWeb工程创建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI 战火越烧越旺:谷歌母公司 Alph
- 下一篇: ap协议java_AP计算机科学A:Ja