Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】
- Java后端 學習路線 筆記匯總表【黑馬程序員】
目錄
03 請求轉發和request共享數據
Request_請求轉發
Request_共享數據(域對象)
04 Request_獲取ServletContext
Request_獲取ServletContext
05 request登錄案例
登錄案例_需求
登錄案例_分析
登錄案例_代碼實現1
開發步驟1:創建項目,導入html頁面,配置文件,jar包
開發步驟2:創建數據庫環境
開發步驟3:創建包cn.itcast.domain,創建類User
開發步驟4:創建包cn.itcast.util,編寫工具類JDBCUtils
開發步驟5:創建包cn.itcast.dao,創建類UserDao,提供login方法
測試login()方法
登錄案例_代碼實現2
?開發步驟6:?編寫cn.itcast.web.servlet.LoginServlet類
?開發步驟7:編寫FailServlet和SuccessServlet類
開發步驟8:login.html中form表單的action路徑的寫法
登錄案例_BeanUtils基本使用
開發步驟9:BeanUtils工具類,簡化數據封裝
登錄案例_BeanUtils介紹
03 請求轉發和request共享數據
Request_請求轉發
Request_其他功能:
?? ??? ?1. 獲取請求參數通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數。
?? ??? ?2. 請求轉發:一種在服務器內部的資源跳轉方式
?? ??? ??? ?1. 步驟:
?? ??? ??? ??? ?1. 通過request對象獲取請求轉發器對象:RequestDispatcher getRequestDispatcher(String path)
?? ??? ??? ??? ?2. 使用RequestDispatcher對象來進行轉發:forward(ServletRequest request, ServletResponse response)
?? ??? ??? ?2. 特點:
?? ??? ??? ??? ?1. 瀏覽器地址欄路徑不發生變化。
?? ??? ??? ??? ?2. 只能轉發到當前服務器內部資源中。
?? ??? ??? ??? ?3. 轉發是一次請求。
Request_共享數據(域對象)
Request_其他功能:
?? ??? ?1. 獲取請求參數通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數。
?? ??? ??? ?1. String getParameter(String name):根據參數名稱獲取參數值 username=zs&password=123
?? ??? ??? ?2. String[] getParameterValues(String name):根據參數名稱獲取參數值的數組 hobby=xx&hobby=game
?? ??? ??? ?3. Enumeration<String> getParameterNames():獲取所有請求的參數名稱
?? ??? ??? ?4. Map<String,String[]> getParameterMap():獲取所有參數的map集合
?? ??? ?2. 請求轉發:一種在服務器內部的資源跳轉方式
?? ??? ??? ?1. 步驟:
?? ??? ??? ??? ?1. 通過request對象獲取請求轉發器對象:RequestDispatcher getRequestDispatcher(String path)
?? ??? ??? ??? ?2. 使用RequestDispatcher對象來進行轉發:forward(ServletRequest request, ServletResponse response)
?? ??? ??? ?2. 特點:
?? ??? ??? ??? ?1. 瀏覽器地址欄路徑不發生變化
?? ??? ??? ??? ?2. 只能轉發到當前服務器內部資源中。
?? ??? ??? ??? ?3. 轉發是一次請求
?? ??? ?3. 共享數據:
?? ??? ??? ?* 域對象:一個有作用范圍的對象,可以在范圍內共享數據
?? ??? ??? ?* request域:代表一次請求的范圍,一般用于請求轉發的多個資源中共享數據
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?1. void setAttribute(String name,Object obj):存儲數據
?? ??? ??? ??? ?2. Object getAttitude(String name):通過鍵獲取值
?? ??? ??? ??? ?3. void removeAttribute(String name):通過鍵移除鍵值對
?? ??? ?4. 獲取ServletContext
04 Request_獲取ServletContext
Request_獲取ServletContext
Request_其他功能:
?? ??? ?1. 獲取請求參數通用方式
?? ??? ?2. 請求轉發
?? ??? ?3. 共享數據
?? ??? ?4. 獲取ServletContext:
?? ??? ??? ?* ServletContext getServletContext()
05 request登錄案例
登錄案例_需求
案例:用戶登錄
* 用戶登錄案例需求:
?? ?1.編寫login.html登錄頁面
?? ??? ?username & password 兩個輸入框
?? ?2.使用Druid數據庫連接池技術,操作mysql,day14數據庫中user表
?? ?3.使用JdbcTemplate技術封裝JDBC
?? ?4.登錄成功跳轉到SuccessServlet展示:登錄成功!用戶名,歡迎您
?? ?5.登錄失敗跳轉到FailServlet展示:登錄失敗,用戶名或密碼錯誤
?
登錄案例_分析
登錄案例分析登錄案例_代碼實現1
開發步驟1:創建項目,導入html頁面,配置文件,jar包
?
開發步驟2:創建數據庫環境
CREATE DATABASE day14;
USE day14;
CREATE TABLE USER(
?? ?id INT PRIMARY KEY AUTO_INCREMENT,
?? ?username VARCHAR(32) UNIQUE NOT NULL,
?? ?PASSWORD VARCHAR(32) NOT NULL
);
開發步驟3:創建包cn.itcast.domain,創建類User
開發步驟4:創建包cn.itcast.util,編寫工具類JDBCUtils
package cn.itcast.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import javax.xml.crypto.Data; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties;/*** JDBC工具類 使用Durid連接池*/ public class JDBCUtils {private static DataSource ds;static {try {//1.加載配置文件Properties pro = new Properties();//使用ClassLoader加載配置文件,獲取字節輸入流InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//2.初始化連接池對象ds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 獲取連接池對象*/public static DataSource getDataSource() {return ds;}/*** 獲取連接Connection對象*/public static Connection getConnection() throws SQLException {return ds.getConnection();} }開發步驟5:創建包cn.itcast.dao,創建類UserDao,提供login方法
// 調用query方法
User user = template.queryForObject(sql,?new BeanPropertyRowMapper<User>(User.class),?loginUser.getUsername(), loginUser.getPassword());
測試login()方法
登錄案例_代碼實現2
?開發步驟6:?編寫cn.itcast.web.servlet.LoginServlet類
LoginServlet.java:
package cn.itcast.web.servlet;import cn.itcast.dao.UserDao; import cn.itcast.domain.User; import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Map;@WebServlet("/loginServlet") public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.設置編碼req.setCharacterEncoding("utf-8");/* //2.獲取請求參數String username = req.getParameter("username");String password = req.getParameter("password");//3.封裝user對象User loginUser = new User();loginUser.setUsername(username);loginUser.setPassword(password);*///2.獲取所有請求參數Map<String, String[]> map = req.getParameterMap();//3.創建User對象User loginUser = new User();//3.2使用BeanUtils封裝try {BeanUtils.populate(loginUser, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//4.調用UserDao的login方法UserDao dao = new UserDao();User user = dao.login(loginUser);//5.判斷userif (user == null) {//登錄失敗req.getRequestDispatcher("/failServlet").forward(req, resp);} else {//登錄成功//存儲數據req.setAttribute("user", user);//轉發req.getRequestDispatcher("/successServlet").forward(req, resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);} }?開發步驟7:編寫FailServlet和SuccessServlet類
SuccessServlet.java:
package cn.itcast.web.servlet;import cn.itcast.domain.User;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/successServlet") public class SuccessServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取request域中共享的user對象User user = (User) request.getAttribute("user");if(user != null){//給頁面寫一句話//設置編碼response.setContentType("text/html;charset=utf-8");//輸出response.getWriter().write("登錄成功!"+user.getUsername()+",歡迎您!");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);} }FailServlet.java:
package cn.itcast.web.servlet;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/failServlet") public class FailServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//給頁面寫一句話//設置編碼response.setContentType("text/html;charset=utf-8");//輸出response.getWriter().write("登錄失敗,用戶名或密碼錯誤!");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);} }開發步驟8:login.html中form表單的action路徑的寫法
登錄案例_BeanUtils基本使用
開發步驟9:BeanUtils工具類,簡化數據封裝
登錄案例_BeanUtils介紹
BeanUtils工具類,簡化數據封裝
??? * 用于封裝JavaBean的
?? ??? ?1. JavaBean:標準的Java類
?? ??? ??? ?1. 要求:
?? ??? ??? ??? ?1. 類必須被public修飾
?? ??? ??? ??? ?2. 必須提供空參的構造器
?? ??? ??? ??? ?3. 成員變量必須使用private修飾
?? ??? ??? ??? ?4. 提供公共setter和getter方法
?? ??? ??? ?2. 功能:封裝數據
?? ??? ?2. 概念:
?? ??? ??? ?成員變量:
?? ??? ??? ?屬性:setter和getter方法截取后的產物
?? ??? ??? ??? ?例如:getUsername() --> Username--> username
?? ??? ?3. 方法:
?? ??? ??? ?1. setProperty()
?? ??? ??? ?2. getProperty()
?? ??? ??? ?3. populate(Object obj, Map map):將map集合的鍵值對信息,封裝到對應的JavaBean對象中
總結
以上是生活随笔為你收集整理的Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Request和Response-学习笔
- 下一篇: 美赛最新通知:论文接收状态已更新完毕!