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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

编程问答

WBE15_HttpServletRequest

發(fā)布時(shí)間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WBE15_HttpServletRequest 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.HttpServletRequest概述

我們?cè)趧?chuàng)建Servlet時(shí)會(huì)覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個(gè)參數(shù),一個(gè)為代表請(qǐng)求的request和代表響應(yīng)response。

service方法中的request的類(lèi)型是ServletRequest,而doGet/doPost方法的request的類(lèi)型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強(qiáng)大,今天我們學(xué)習(xí)HttpServletRequest。

2.request的運(yùn)行流程


3.通過(guò)抓包工具抓取Http請(qǐng)求


因?yàn)閞equest代表請(qǐng)求,所以我們可以通過(guò)該對(duì)象分別獲得Http請(qǐng)求的請(qǐng)求行,請(qǐng) 求頭和請(qǐng)求體

4.通過(guò)request獲得請(qǐng)求行

獲得客戶(hù)端的請(qǐng)求方式:String getMethod()

獲得請(qǐng)求的資源:

String getRequestURI() StringBuffer getRequestURL() String getContextPath() ---web應(yīng)用的名稱(chēng)String getQueryString() ---- get提交url地址后的參數(shù)字符串username=zhangsan&password=123

注意:

request獲得客戶(hù)機(jī)(客戶(hù)端)的一些信息

request.getRemoteAddr() --- 獲得訪(fǎng)問(wèn)的客戶(hù)端IP地址 //1、獲得請(qǐng)求方式String method = request.getMethod();System.out.println("method:" + method);//2.獲得請(qǐng)求的資源相關(guān)的內(nèi)容String requestURI = request.getRequestURI();System.out.println("uri:"+requestURI);StringBuffer requestURL = request.getRequestURL();System.out.println("url:"+requestURL);//獲得Web應(yīng)用的名稱(chēng)String contextPath = request.getContextPath();System.out.println("web應(yīng)用:" + contextPath);//地址后的參數(shù)字符串String queryString = request.getQueryString();System.out.println(queryString);//3.獲得客戶(hù)端的信息--獲得訪(fǎng)問(wèn)者的IP地址String remoteAddr = request.getRemoteAddr();System.out.println(remoteAddr);

method:post


5.通過(guò)request獲得請(qǐng)求頭

long getDateHeader(String name)String getHeader(String name)Enumeration getHeaderNames()Enumeration getHeaders(String name)int getIntHeader(String name) //1.獲得指定的頭String header = request.getHeader("User-Agent");System.out.println(header);//2.獲得所有頭的名稱(chēng)Enumeration<String> headerNames = request.getHeaderNames();while(headerNames.hasMoreElements()){String headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);System.out.println(headerName + ":" + headerValue);}

輸出:

Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0 host:localhost:8080 user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0 accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 accept-language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 accept-encoding:gzip, deflate connection:keep-alive upgrade-insecure-requests:1


referer頭的作用:執(zhí)行該此訪(fǎng)問(wèn)的的來(lái)源

做防盜鏈

//對(duì)新聞的來(lái)源進(jìn)行判斷String header = request.getHeader("referer");if(header != null && header.startsWith("http://localhost")){//從自己網(wǎng)站跳轉(zhuǎn)過(guò)來(lái),可以看新聞response.setContentType("text/html;charset=UTF-8");response.getWriter().write("獎(jiǎng)牌");}else{response.setContentType("text/html;charset=UTF-8");response.getWriter().write("盜鏈者,可恥");}


6.通過(guò)request獲得請(qǐng)求體

請(qǐng)求體中的內(nèi)容是通過(guò)post提交的請(qǐng)求參數(shù),格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username [zhangsan]
password [123]
hobby [football,basketball]

以上面參數(shù)為例,通過(guò)一下方法獲得請(qǐng)求參數(shù):
String getParameter(String name)
String[] getParameterValues(String name)
Enumeration getParameterNames()
Map<String,String[]> getParameterMap()

注意:get請(qǐng)求方式的請(qǐng)求參數(shù) 上述的方法一樣可以獲得

解決post提交方式的亂碼:request.setCharacterEncoding("UTF-8");解決get提交的方式的亂碼:parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

//1.獲得單個(gè)表單值String username = request.getParameter("username");System.out.println(username);//zhangsanString password = request.getParameter("password");System.out.println(password);//123//2.獲得多個(gè)表單的值String[] hobbys = request.getParameterValues("hobby");for(String hobby : hobbys){System.out.println(hobby);}//3.獲得所有請(qǐng)求參數(shù)的名稱(chēng)Enumeration<String> parameterNames = request.getParameterNames();while(parameterNames.hasMoreElements()){System.out.println(parameterNames.nextElement());}System.out.println("---------------------------");Map<String, String[]> parameterMap = request.getParameterMap();for(Map.Entry<String, String[]> entry : parameterMap.entrySet()){System.out.println(entry.getKey());for(String str : entry.getValue()){System.out.println(str);}System.out.println("---------------------------");}

7.request的其他功能

(1) request是一個(gè)域?qū)ο?/h3>

request對(duì)象也是一個(gè)存儲(chǔ)數(shù)據(jù)的區(qū)域?qū)ο?#xff0c;所以也具有如下方法:
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)

注意:request域的作用范圍:一次請(qǐng)求中(重定向就沒(méi)有數(shù)據(jù),原因還是出在只在一次請(qǐng)求中,而重定向是兩次請(qǐng)求)

(2) request完成請(qǐng)求轉(zhuǎn)發(fā)


獲得請(qǐng)求轉(zhuǎn)發(fā)器----path是轉(zhuǎn)發(fā)的地址

RequestDispatcher getRequestDispatcher(String path)

通過(guò)轉(zhuǎn)發(fā)器對(duì)象轉(zhuǎn)發(fā)

requestDispathcer.forward(ServletRequest request, ServletResponse response)

注意:ServletContext域與Request域的生命周期比較?

ServletContext:創(chuàng)建:服務(wù)器啟動(dòng)銷(xiāo)毀:服務(wù)器關(guān)閉域的作用范圍:整個(gè)web應(yīng)用request:創(chuàng)建:訪(fǎng)問(wèn)時(shí)創(chuàng)建request銷(xiāo)毀:響應(yīng)結(jié)束request銷(xiāo)毀域的作用范圍:一次請(qǐng)求中

注意:轉(zhuǎn)發(fā)與重定向的區(qū)別?

1)重定向兩次請(qǐng)求,轉(zhuǎn)發(fā)一次請(qǐng)求2)重定向地址欄的地址變化,轉(zhuǎn)發(fā)地址不變3)重新定向可以訪(fǎng)問(wèn)外部網(wǎng)站 轉(zhuǎn)發(fā)只能訪(fǎng)問(wèn)內(nèi)部資源4)轉(zhuǎn)發(fā)的性能要優(yōu)于重定向




Servlet1

//想request域中存儲(chǔ)數(shù)據(jù)request.setAttribute("name", "tom");//將servlet1請(qǐng)求轉(zhuǎn)發(fā)給servlet2RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");//執(zhí)行轉(zhuǎn)發(fā)的方法requestDispatcher.forward(request, response);

Servlet2

//從request域中取出數(shù)據(jù)Object attribute = request.getAttribute("name");response.getWriter().write("hello haohao..." + attribute);

注意:客戶(hù)端地址與服務(wù)器端地址的寫(xiě)法?

客戶(hù)端地址:是客戶(hù)端去訪(fǎng)問(wèn)服務(wù)器的地址,服務(wù)器外部的地址,特點(diǎn):寫(xiě)上web應(yīng)用名稱(chēng) 直接輸入地址:重定向服務(wù)器端地址:服務(wù)器內(nèi)部資源的跳轉(zhuǎn)的地址,特點(diǎn):不需要寫(xiě)web應(yīng)用的名稱(chēng)轉(zhuǎn)發(fā)

案例一、完成用戶(hù)注冊(cè)


/WEB15A/WebContent/register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head></head> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>會(huì)員注冊(cè)</title> <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" /> <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> <script src="js/bootstrap.min.js" type="text/javascript"></script> <!-- 引入自定義css文件 style.css --> <link rel="stylesheet" href="css/style.css" type="text/css" /><style> body {margin-top: 20px;margin: 0 auto; }.carousel-inner .item img {width: 100%;height: 300px; }font {color: #3164af;font-size: 18px;font-weight: normal;padding: 0 10px; } </style> </head> <body><!-- 引入header.jsp --><jsp:include page="/header.jsp"></jsp:include><div class="container"style="width: 100%; background: url('image/regist_bg.jpg');"><div class="row"><div class="col-md-2"></div><div class="col-md-8"style="background: #fff; padding: 40px 80px; margin: 30px; border: 7px solid #ccc;"><font>會(huì)員注冊(cè)</font>USER REGISTER<!-- 當(dāng)你點(diǎn)擊button按鈕提交的時(shí)候,瀏覽器的地址為/WEB15/register,頁(yè)面會(huì)刷新但是地址不變 --><form class="form-horizontal" style="margin-top: 5px;" action="/WEB15A/register" method="post"><div class="form-group"><label for="username" class="col-sm-2 control-label">用戶(hù)名</label><div class="col-sm-6"><input type="text" class="form-control" id="username" name="username" placeholder="請(qǐng)輸入用戶(hù)名"></div></div><div class="form-group"><label for="inputPassword3" class="col-sm-2 control-label">密碼</label><div class="col-sm-6"><input type="password" class="form-control" id="inputPassword3" name="password"placeholder="請(qǐng)輸入密碼"></div></div><div class="form-group"><label for="confirmpwd" class="col-sm-2 control-label">確認(rèn)密碼</label><div class="col-sm-6"><input type="password" class="form-control" id="confirmpwd"placeholder="請(qǐng)輸入確認(rèn)密碼"></div></div><div class="form-group"><label for="inputEmail3" class="col-sm-2 control-label">Email</label><div class="col-sm-6"><input type="email" class="form-control" id="inputEmail3" name="email"placeholder="Email"></div></div><div class="form-group"><label for="usercaption" class="col-sm-2 control-label">姓名</label><div class="col-sm-6"><input type="text" class="form-control" id="usercaption" name="name"placeholder="請(qǐng)輸入姓名"></div></div><div class="form-group opt"><label for="inlineRadio1" class="col-sm-2 control-label">性別</label><div class="col-sm-6"><label class="radio-inline"> <input type="radio"name="sex" id="inlineRadio1" value="male">男</label> <label class="radio-inline"> <input type="radio"name="sex" id="inlineRadio2" value="female">女</label></div></div><div class="form-group"><label for="date" class="col-sm-2 control-label">出生日期</label><div class="col-sm-6"><input type="date" class="form-control" name="birthday"></div></div><div class="form-group"><label for="date" class="col-sm-2 control-label">驗(yàn)證碼</label><div class="col-sm-3"><input type="text" class="form-control"></div><div class="col-sm-2"><img src="./image/captcha.jhtml" /></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><input type="submit" width="100" value="注冊(cè)" name="submit"style="background: url('./images/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0); height: 35px; width: 100px; color: white;"></div></div></form></div><div class="col-md-2"></div></div></div><!-- 引入footer.jsp --><jsp:include page="/footer.jsp"></jsp:include></body> </html>

/WEB15A/src/cn/ithiema/register/RegisterServlet.java

package cn.ithiema.register;import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.sql.SQLException; import java.util.Map; import java.util.UUID;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.dbutils.QueryRunner;import cn.ithiema.utils.DataSourceUtils;public class RegisterServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//設(shè)置request的編碼---只適合post方式request.setCharacterEncoding("UTF-8");//get方式亂碼解決//String username = request.getParameter("username");//亂碼//先用iso8859-1編碼 在使用utf-8解碼//username = new String(username.getBytes("iso8859-1"),"UTF-8");//1、獲取數(shù)據(jù)String username = request.getParameter("username");System.out.println(username);//String password = request.getParameter("password");//.....//2、將散裝的封裝到j(luò)avaBean//User user = new User();//user.setUsername(username);//user.setPassword(password);//使用BeanUtils進(jìn)行自動(dòng)映射封裝//BeanUtils工作原理:將map中的數(shù)據(jù) 根據(jù)key與實(shí)體的屬性的對(duì)應(yīng)關(guān)系封裝//只要key的名字與實(shí)體的屬性 的名字一樣 就自動(dòng)封裝到實(shí)體中Map<String, String[]> properties = request.getParameterMap();User user = new User();try {BeanUtils.populate(user, properties);} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}//現(xiàn)在這個(gè)位置 user對(duì)象已經(jīng)封裝好了//手動(dòng)封裝uid----uuid---隨機(jī)不重復(fù)的字符串32位--java代碼生成后是36位user.setUid(UUID.randomUUID().toString());//3、將參數(shù)傳遞給一個(gè)業(yè)務(wù)操作方法try {regist(user);} catch (SQLException e) {e.printStackTrace();}//4、認(rèn)為注冊(cè)成功跳轉(zhuǎn)到登錄頁(yè)面//response.sendRedirect(request.getContextPath()+"/login.jsp");}//注冊(cè)的方法public void regist(User user) throws SQLException{//操作數(shù)據(jù)庫(kù)QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());String sql = "insert into user values(?,?,?,?,?,?,?,?,?,?)";runner.update(sql,user.getUid(),user.getUsername(),user.getPassword(),user.getName(),user.getEmail(),null,user.getBirthday(),user.getSex(),null,null);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }

/WEB15A/src/cn/ithiema/register/User.java

package cn.ithiema.register;public class User {private String uid;private String username;private String password;private String name;private String email;private String sex;private String birthday;public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}@Overridepublic String toString() {return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", name=" + name + ", email="+ email + ", sex=" + sex + ", birthday=" + birthday + "]";}}




注冊(cè)亂碼的解決:

當(dāng)method=“post”,
//設(shè)置request的編碼—只適合post方式
//request.setCharacterEncoding(“UTF-8”);
亂碼的情況:


當(dāng)method=“get”,
//設(shè)置request的編碼—只適合post方式
//request.setCharacterEncoding(“UTF-8”);
亂碼的情況:


//get方式亂碼解決 String username = request.getParameter("username");//亂碼 //先用iso8859-1編碼 在使用utf-8解碼 username = new String(username.getBytes("iso8859-1"),"UTF-8"); System.out.println(username);



案例二、完成登錄錯(cuò)誤信息的回顯

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>會(huì)員登錄</title> <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" /> <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> <script src="js/bootstrap.min.js" type="text/javascript"></script> <!-- 引入自定義css文件 style.css --> <link rel="stylesheet" href="css/style.css" type="text/css" /><style> body {margin-top: 20px;margin: 0 auto; }.carousel-inner .item img {width: 100%;height: 300px; }.container .row div {/* position:relative;float:left; */}font {color: #666;font-size: 22px;font-weight: normal;padding-right: 17px; } </style> </head> <body><!-- 引入header.jsp --><jsp:include page="/header.jsp"></jsp:include><div class="container"style="width: 100%; height: 460px; background: #FF2C4C url('images/loginbg.jpg') no-repeat;"><div class="row"><div class="col-md-7"><!--<img src="./image/login.jpg" width="500" height="330" alt="會(huì)員登錄" title="會(huì)員登錄">--></div><div class="col-md-5"><divstyle="width: 440px; border: 1px solid #E7E7E7; padding: 20px 0 20px 30px; border-radius: 5px; margin-top: 60px; background: #fff;"><font>會(huì)員登錄</font>USER LOGIN<div><%=request.getAttribute("loginInfo")==null?"":request.getAttribute("loginInfo") %></div><form class="form-horizontal" action="/WEB15/login" method="post"><div class="form-group"><label for="username" class="col-sm-2 control-label">用戶(hù)名</label><div class="col-sm-6"><input type="text" class="form-control" id="username" name="username"placeholder="請(qǐng)輸入用戶(hù)名"></div></div><div class="form-group"><label for="inputPassword3" class="col-sm-2 control-label">密碼</label><div class="col-sm-6"><input type="password" class="form-control" id="inputPassword3" name="password"placeholder="請(qǐng)輸入密碼"></div></div><div class="form-group"><label for="inputPassword3" class="col-sm-2 control-label">驗(yàn)證碼</label><div class="col-sm-3"><input type="text" class="form-control" id="inputPassword3"placeholder="請(qǐng)輸入驗(yàn)證碼"></div><div class="col-sm-3"><img src="./image/captcha.jhtml" /></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label> <input type="checkbox"> 自動(dòng)登錄</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <label> <inputtype="checkbox"> 記住用戶(hù)名</label></div></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><input type="submit" width="100" value="登錄" name="submit"style="background: url('./images/login.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0); height: 35px; width: 100px; color: white;"></div></div></form></div></div></div></div><!-- 引入footer.jsp --><jsp:include page="/footer.jsp"></jsp:include></body> </html> package cn.ithiema.login;import java.io.IOException; import java.sql.SQLException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler;import cn.ithiema.register.User; import cn.ithiema.utils.DataSourceUtils;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//設(shè)置request的編碼---只適合post方式request.setCharacterEncoding("UTF-8");//1.獲得用戶(hù)名和密碼String username = request.getParameter("username");String password = request.getParameter("password");//2.調(diào)用一個(gè)業(yè)務(wù)方法進(jìn)行該用戶(hù)查詢(xún)User login = null;try {login = login(username, password);} catch (Exception e) {System.out.println(e);}//3.通過(guò)user是否為null,判斷用戶(hù)名和密碼是否正確if(login != null){//用戶(hù)名和密碼正確//登錄成功,跳轉(zhuǎn)到網(wǎng)站的首頁(yè)response.sendRedirect(request.getContextPath());}else{//用戶(hù)名或密碼錯(cuò)誤//跳回當(dāng)前l(fā)ogin.jsp//使用轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)到login.jsp 向request域中存儲(chǔ)錯(cuò)誤信息request.setAttribute("loginInfo", "用戶(hù)名或密碼錯(cuò)誤");request.getRequestDispatcher("/login.jsp").forward(request, response);}}public User login(String username,String password){User user = null;try {QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select * from user where username=? and password=?";user = runner.query(sql, new BeanHandler<User>(User.class),username,password);} catch (SQLException e) { e.printStackTrace();}return user;}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }

注冊(cè)界面


登錄成功


總結(jié):

request獲得行的內(nèi)容

request.getMethod() request.getRequestURI() request.getRequestURL() request.getContextPath() request.getRemoteAddr()

request獲得頭的內(nèi)容

request.getHeader(name)

request獲得體(請(qǐng)求參數(shù))

String request.getParameter(name) Map<String,String[]> request.getParameterMap(); String[] request.getParameterValues(name); 注意:客戶(hù)端發(fā)送的參數(shù) 到服務(wù)器端都是字符串

獲得中文亂碼的解決:

post:request.setCharacterEncoding(“UTF-8”); get: //get方式亂碼解決 String username = request.getParameter("username");//亂碼 //先用iso8859-1編碼 在使用utf-8解碼 username = new String(username.getBytes("iso8859-1"),"UTF-8");

request轉(zhuǎn)發(fā)和域

request.getRequestDispatcher(轉(zhuǎn)發(fā)的地址).forward(req,resp); request.setAttribute(name,value) request.getAttribute(name)

總結(jié)

以上是生活随笔為你收集整理的WBE15_HttpServletRequest的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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