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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】

發(fā)布時間:2024/9/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • Java后端 學(xué)習(xí)路線 筆記匯總表【黑馬程序員】
  • Request和Response-學(xué)習(xí)筆記01【Request_原理和繼承體系、Request_獲取請求數(shù)據(jù)】【day01】
  • Request和Response-學(xué)習(xí)筆記02【請求轉(zhuǎn)發(fā)和request共享數(shù)據(jù)、Request_獲取ServletContext、request登錄案例】[day01]
  • Request和Response-學(xué)習(xí)筆記03【HTTP響應(yīng)協(xié)議、response之重定向、response之相對路徑和絕對路徑】【day02】
  • Request和Response-學(xué)習(xí)筆記04【response之輸出數(shù)據(jù)、response之驗(yàn)證碼】【day02】
  • Request和Response-學(xué)習(xí)筆記05【ServletContext對象、文件下載】【day02】
  • 目錄

    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請求轉(zhuǎn)發(fā)&域?qū)ο?

    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

    Request請求轉(zhuǎn)發(fā)&域?qū)ο?

    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());

    package cn.itcast.dao;import cn.itcast.domain.User; import cn.itcast.util.JDBCUtils; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate;/*** 操作數(shù)據(jù)庫中User表的類——增刪改查方法全在此類中*/ public class UserDao {//聲明JDBCTemplate對象共用private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 登錄方法** @param loginUser 只有用戶名和密碼* @return user包含用戶全部數(shù)據(jù), 沒有查詢到,返回null*/public User login(User loginUser) {try {//1.編寫sqlString sql = "select * from user where username = ? and password = ?";//2.調(diào)用query方法User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),loginUser.getUsername(), loginUser.getPassword());return user;} catch (DataAccessException e) {e.printStackTrace(); // 記錄日志return null;}} }

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

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