Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】
- Java后端 學(xué)習(xí)路線 筆記匯總表【黑馬程序員】
目錄
03 請求轉(zhuǎn)發(fā)和request共享數(shù)據(jù)
Request_請求轉(zhuǎn)發(fā)
Request_共享數(shù)據(jù)(域?qū)ο?
04 Request_獲取ServletContext
Request_獲取ServletContext
05 request登錄案例
登錄案例_需求
登錄案例_分析
登錄案例_代碼實(shí)現(xiàn)1
開發(fā)步驟1:創(chuàng)建項(xiàng)目,導(dǎo)入html頁面,配置文件,jar包
開發(fā)步驟2:創(chuàng)建數(shù)據(jù)庫環(huán)境
開發(fā)步驟3:創(chuàng)建包c(diǎn)n.itcast.domain,創(chuàng)建類User
開發(fā)步驟4:創(chuàng)建包c(diǎn)n.itcast.util,編寫工具類JDBCUtils
開發(fā)步驟5:創(chuàng)建包c(diǎn)n.itcast.dao,創(chuàng)建類UserDao,提供login方法
測試login()方法
登錄案例_代碼實(shí)現(xiàn)2
?開發(fā)步驟6:?編寫cn.itcast.web.servlet.LoginServlet類
?開發(fā)步驟7:編寫FailServlet和SuccessServlet類
開發(fā)步驟8:login.html中form表單的action路徑的寫法
登錄案例_BeanUtils基本使用
開發(fā)步驟9:BeanUtils工具類,簡化數(shù)據(jù)封裝
登錄案例_BeanUtils介紹
03 請求轉(zhuǎn)發(fā)和request共享數(shù)據(jù)
Request_請求轉(zhuǎn)發(fā)
Request_其他功能:
?? ??? ?1. 獲取請求參數(shù)通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數(shù)。
?? ??? ?2. 請求轉(zhuǎn)發(fā):一種在服務(wù)器內(nèi)部的資源跳轉(zhuǎn)方式
?? ??? ??? ?1. 步驟:
?? ??? ??? ??? ?1. 通過request對象獲取請求轉(zhuǎn)發(fā)器對象:RequestDispatcher getRequestDispatcher(String path)
?? ??? ??? ??? ?2. 使用RequestDispatcher對象來進(jìn)行轉(zhuǎn)發(fā):forward(ServletRequest request, ServletResponse response)
?? ??? ??? ?2. 特點(diǎn):
?? ??? ??? ??? ?1. 瀏覽器地址欄路徑不發(fā)生變化。
?? ??? ??? ??? ?2. 只能轉(zhuǎn)發(fā)到當(dāng)前服務(wù)器內(nèi)部資源中。
?? ??? ??? ??? ?3. 轉(zhuǎn)發(fā)是一次請求。
Request_共享數(shù)據(jù)(域?qū)ο?
Request_其他功能:
?? ??? ?1. 獲取請求參數(shù)通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數(shù)。
?? ??? ??? ?1. String getParameter(String name):根據(jù)參數(shù)名稱獲取參數(shù)值 username=zs&password=123
?? ??? ??? ?2. String[] getParameterValues(String name):根據(jù)參數(shù)名稱獲取參數(shù)值的數(shù)組 hobby=xx&hobby=game
?? ??? ??? ?3. Enumeration<String> getParameterNames():獲取所有請求的參數(shù)名稱
?? ??? ??? ?4. Map<String,String[]> getParameterMap():獲取所有參數(shù)的map集合
?? ??? ?2. 請求轉(zhuǎn)發(fā):一種在服務(wù)器內(nèi)部的資源跳轉(zhuǎn)方式
?? ??? ??? ?1. 步驟:
?? ??? ??? ??? ?1. 通過request對象獲取請求轉(zhuǎn)發(fā)器對象:RequestDispatcher getRequestDispatcher(String path)
?? ??? ??? ??? ?2. 使用RequestDispatcher對象來進(jìn)行轉(zhuǎn)發(fā):forward(ServletRequest request, ServletResponse response)
?? ??? ??? ?2. 特點(diǎn):
?? ??? ??? ??? ?1. 瀏覽器地址欄路徑不發(fā)生變化
?? ??? ??? ??? ?2. 只能轉(zhuǎn)發(fā)到當(dāng)前服務(wù)器內(nèi)部資源中。
?? ??? ??? ??? ?3. 轉(zhuǎn)發(fā)是一次請求
?? ??? ?3. 共享數(shù)據(jù):
?? ??? ??? ?* 域?qū)ο?#xff1a;一個有作用范圍的對象,可以在范圍內(nèi)共享數(shù)據(jù)
?? ??? ??? ?* request域:代表一次請求的范圍,一般用于請求轉(zhuǎn)發(fā)的多個資源中共享數(shù)據(jù)
?? ??? ??? ?* 方法:
?? ??? ??? ??? ?1. void setAttribute(String name,Object obj):存儲數(shù)據(jù)
?? ??? ??? ??? ?2. Object getAttitude(String name):通過鍵獲取值
?? ??? ??? ??? ?3. void removeAttribute(String name):通過鍵移除鍵值對
?? ??? ?4. 獲取ServletContext
04 Request_獲取ServletContext
Request_獲取ServletContext
Request_其他功能:
?? ??? ?1. 獲取請求參數(shù)通用方式
?? ??? ?2. 請求轉(zhuǎn)發(fā)
?? ??? ?3. 共享數(shù)據(jù)
?? ??? ?4. 獲取ServletContext:
?? ??? ??? ?* ServletContext getServletContext()
05 request登錄案例
登錄案例_需求
案例:用戶登錄
* 用戶登錄案例需求:
?? ?1.編寫login.html登錄頁面
?? ??? ?username & password 兩個輸入框
?? ?2.使用Druid數(shù)據(jù)庫連接池技術(shù),操作mysql,day14數(shù)據(jù)庫中user表
?? ?3.使用JdbcTemplate技術(shù)封裝JDBC
?? ?4.登錄成功跳轉(zhuǎn)到SuccessServlet展示:登錄成功!用戶名,歡迎您
?? ?5.登錄失敗跳轉(zhuǎn)到FailServlet展示:登錄失敗,用戶名或密碼錯誤
?
登錄案例_分析
登錄案例分析登錄案例_代碼實(shí)現(xiàn)1
開發(fā)步驟1:創(chuàng)建項(xiàng)目,導(dǎo)入html頁面,配置文件,jar包
?
開發(fā)步驟2:創(chuàng)建數(shù)據(jù)庫環(huán)境
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
);
開發(fā)步驟3:創(chuàng)建包c(diǎn)n.itcast.domain,創(chuàng)建類User
開發(fā)步驟4:創(chuàng)建包c(diǎn)n.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加載配置文件,獲取字節(jié)輸入流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();} }開發(fā)步驟5:創(chuàng)建包c(diǎn)n.itcast.dao,創(chuàng)建類UserDao,提供login方法
// 調(diào)用query方法
User user = template.queryForObject(sql,?new BeanPropertyRowMapper<User>(User.class),?loginUser.getUsername(), loginUser.getPassword());
測試login()方法
登錄案例_代碼實(shí)現(xiàn)2
?開發(fā)步驟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.設(shè)置編碼req.setCharacterEncoding("utf-8");/* //2.獲取請求參數(shù)String username = req.getParameter("username");String password = req.getParameter("password");//3.封裝user對象User loginUser = new User();loginUser.setUsername(username);loginUser.setPassword(password);*///2.獲取所有請求參數(shù)Map<String, String[]> map = req.getParameterMap();//3.創(chuàng)建User對象User loginUser = new User();//3.2使用BeanUtils封裝try {BeanUtils.populate(loginUser, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//4.調(diào)用UserDao的login方法UserDao dao = new UserDao();User user = dao.login(loginUser);//5.判斷userif (user == null) {//登錄失敗req.getRequestDispatcher("/failServlet").forward(req, resp);} else {//登錄成功//存儲數(shù)據(jù)req.setAttribute("user", user);//轉(zhuǎn)發(fā)req.getRequestDispatcher("/successServlet").forward(req, resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);} }?開發(fā)步驟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){//給頁面寫一句話//設(shè)置編碼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 {//給頁面寫一句話//設(shè)置編碼response.setContentType("text/html;charset=utf-8");//輸出response.getWriter().write("登錄失敗,用戶名或密碼錯誤!");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);} }開發(fā)步驟8:login.html中form表單的action路徑的寫法
登錄案例_BeanUtils基本使用
開發(fā)步驟9:BeanUtils工具類,簡化數(shù)據(jù)封裝
登錄案例_BeanUtils介紹
BeanUtils工具類,簡化數(shù)據(jù)封裝
??? * 用于封裝JavaBean的
?? ??? ?1. JavaBean:標(biāo)準(zhǔn)的Java類
?? ??? ??? ?1. 要求:
?? ??? ??? ??? ?1. 類必須被public修飾
?? ??? ??? ??? ?2. 必須提供空參的構(gòu)造器
?? ??? ??? ??? ?3. 成員變量必須使用private修飾
?? ??? ??? ??? ?4. 提供公共setter和getter方法
?? ??? ??? ?2. 功能:封裝數(shù)據(jù)
?? ??? ?2. 概念:
?? ??? ??? ?成員變量:
?? ??? ??? ?屬性:setter和getter方法截取后的產(chǎn)物
?? ??? ??? ??? ?例如:getUsername() --> Username--> username
?? ??? ?3. 方法:
?? ??? ??? ?1. setProperty()
?? ??? ??? ?2. getProperty()
?? ??? ??? ?3. populate(Object obj, Map map):將map集合的鍵值對信息,封裝到對應(yīng)的JavaBean對象中
總結(jié)
以上是生活随笔為你收集整理的Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Request和Response-学习笔
- 下一篇: 美赛最新通知:论文接收状态已更新完毕!