日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

web java工程的创建_简单JavaWeb工程创建

發(fā)布時(shí)間:2023/12/15 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web java工程的创建_简单JavaWeb工程创建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。