深圳龙岗网络推广公司,淘宝标题优化网站,关于实施公司网站建设的请示,wordpress进入控制台目录
Request#xff08;获取请求信息#xff09;
1.获取请求行内容
2.解决乱码问题 3.获取请求头部分
4.获取请求体 5.其他功能 Request#xff08;获取请求信息#xff09;
工作流程#xff1a; 1.通过请求的url的资源路径#xff0c;tomcat会生成相应的Servlet实…
目录
Request获取请求信息
1.获取请求行内容
2.解决乱码问题 3.获取请求头部分
4.获取请求体 5.其他功能 Request获取请求信息
工作流程 1.通过请求的url的资源路径tomcat会生成相应的Servlet实现对象。 2.tomcat服务器会创建request对象和response对象request对象接收请求消息数据。 3.tomcat将request和response方法传递给service方法并且调用service方法 4.程序员可以通过request对象获取请求的消息数据并且设置response的响应数据 5.服务器在给浏览器响应之前获取response 1.获取请求行内容
请求行部分获取请求行内容的方法示例代码返回值请求方法MethodgetMethod()String method request.getMethod();GET重点请求 URIURLgetRequestURI()String uri request.getRequestURI();/index.html协议版本ProtocolgetProtocol()String protocol request.getProtocol();HTTP/1.1查询字符串Query StringgetQueryString()String queryString request.getQueryString();null 如果没有查询字符串重点上下文路径Context PathgetContextPath()String contextPath request.getContextPath(); 如果没有上下文路径则为空字符串 案例代码
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/requestHang)
public class RequestHang extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取方法String method req.getMethod();System.out.println(使用的方法是method);
// * 获取上下文路径String contextPath req.getContextPath();System.out.println(请求的上下文路径是contextPath);
// * 获取URIString Uri req.getRequestURI();System.out.println(请求的URI是Uri);
// 获取协议版本String version req.getProtocol();System.out.println(请求的协议版本是version);
// 获取查询字符串String string req.getQueryString();System.out.println(请求附带的查询字符串是string);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取方法String method req.getMethod();System.out.println(使用的方法是method);
// * 获取上下文路径String contextPath req.getContextPath();System.out.println(请求的上下文路径是contextPath);
// * 获取URIString Uri req.getRequestURI();System.out.println(请求的URI是Uri);
// 获取协议版本String version req.getProtocol();System.out.println(请求的协议版本是version);
// 获取参数String username req.getParameter(username);System.out.println(Username is username);}
}index.jsp代码
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlheadtitle测试发送消息/title/headbodyform action/com_alphamilk_war_exploded/requestHang methodgetinput nameusernameinput typesubmit value提交/form/body
/html通过url访问结果如下 可以看到请求出现了乱码下一步就是解决请求乱码问题. 2.解决乱码问题
1.控制台输出乱码
如果tomcat的版本是在10以下的用中文可能会出现乱码问题这里用的是9版本解决方法
打开tomcat文件夹找到conf配置文件
配置文件在conf下面将配置中的字符集改成GBK修改后的配置如下图 修改后重新启动结果如下 2.post请求方式中参数中文乱码
通过将表单提交方式改为post再在内容输入中文通过request方法的getParameter获取参数username 可以看到输出的结果是一串乱码。所以需要进行修补 解决方法设置流的编码即可
// 设置流的编码req.setCharacterEncoding(utf-8); 重启服务器并再次运行 3.获取请求头部分
示例请求头Request HeaderAccept-Language: en-US,en;q0.9
请求头名称获取请求头值的方法示例代码返回值Accept-LanguagegetHeader(Accept-Language)String acceptLanguage request.getHeader(Accept-Language);en-US,en;q0.9所有请求头名称getHeaderNames()EnumerationString headerNames request.getHeaderNames();包含所有请求头名称的枚举
案例代码获取所有请求头信息与对应的值
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;WebServlet(/rsHead)
public class RequestHead extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 通过迭代器Enumration遍历请求头EnumerationString enumeration req.getHeaderNames();
// 开始遍历while (enumeration.hasMoreElements()){String name enumeration.nextElement();
// 找到获取头名称的值String value req.getHeader(name);System.out.println(name value);}}
}案例代码2设置外部跳转无法访问只能通过项目内的页面访问资源
通过请求头referer获取访问到当前页面的来源如果是直接输入地址则referer为空
首先桌面随便创建一个html文件然后通过文件的超链接实行跳转到刚才页面
!DOCTYPE html
htmlheadmeta charsetutf-8title冒牌登陆系统/title/headbodya hrefhttp://localhost:9998/com_alphamilk_war_exploded/rsHead访问尝试/a/body
/html 既然能获取到外部访问源地址那么现在通过限制请求头的访问外部地址的访问就会输出非法访问。
服务器Servlet类代码
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/refererTest)
public class rsRefer extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置RefererString referer req.getHeader(referer);
// 防盗链机制if (referer ! null){if (referer.contains(/com_alphamilk_war_exploded)){System.out.println(正常访问);}else {System.out.println(非法访问,请从官网处进行访问);}}}
}重启服务器后此时再通过随便创建的html文件修改路径后访问得到 4.获取请求体
只有post请求方式才有请求体 步骤 1.获取流对象 BufferReader 2.从流对象中获取值 nextline(); 常用方法
方法名作用getReader()获取请求的输入流并返回一个BufferedReader对象用于读取来自客户端的请求数据。getInputStream()获取请求的输入流并返回一个ServletInputStream对象用于直接从客户端请求中读取字节数据。
案例代码
html代码
htmlheadtitle测试发送消息/title/headbodyform actionhttp://localhost:9998/com_alphamilk_war_exploded/body methodpostinput typetext nameusername placeholder用户名brinput typetext namepassword placeholder密码brinput typesubmit/form/body
/html
Servlet类代码
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;WebServlet(/body)
public class RequestBody extends HttpServlet{Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {BufferedReader reader req.getReader();String line;while (reader.readLine()!null){line reader.readLine();System.out.println(line);}}
}通过输入用户名与密码再提交表单 5.其他功能
1.获取参数通用方式不管post请求还是get请求都可以用、重点
方法名作用getParameter(String name)获取指定名称的请求参数的值。如果有多个同名参数只返回第一个参数的值。getParameterValues(String name)获取指定名称的请求参数的所有值。如果参数存在多个值返回一个包含所有值的字符串数组。EnumerationString getParameterNames()返回一个枚举对象包含所有请求参数的名称。可以使用该枚举对象遍历所有请求参数的名称。getParameterMap()返回一个Map对象其中包含所有的请求参数和它们的值。键是参数名称值是参数的值以字符串数组形式。
案例代码 服务器代码
package com.company;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;WebServlet(/Demo3)
public class ReqOther extends HttpServlet{HttpServletRequest req;HttpServletResponse resp;Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {EnumerationString enumeration req.getParameterNames();String names;
// 通过迭代器遍历输出所有的参数名与对应的值while (enumeration.hasMoreElements()){names enumeration.nextElement();System.out.println(names:req.getParameter(names));}}
// 由于是通用方法所以如果有post请求则更改为Get请求流程Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 注意post方法会出现中文乱码问题需要转为utf-8格式编码req.setCharacterEncoding(utf-8);this.req req;this.resp resp;this.doGet(req, resp);}
}web代码更改路径地址后输入并提交 当一个表单中出现多个相同的名字时候就需要用getParameterValues或者getParameterMap存放。
2.请求转发服务器内部资源的跳转方式
方法名作用getRequestDispatcher(String path)获取与给定相对路径path相关联的 RequestDispatcher 对象用于在同一个 Web 应用程序内部的不同资源之间进行请求转发。forward(ServletRequest request, ServletResponse response)将请求和响应对象转发给另一个资源如 Servlet、JSP 页面停止当前资源的执行并将控制权交给目标资源由目标资源负责生成响应。
案例代码
创建一个资源类一个访问类通过访问类访问资源类
访问类
package com.company;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.TimeUnit;//资源跳转
WebServlet(/Demo4)
public class rsPatcher extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {System.out.println(3s后进行跳转);
// 3秒后进行跳转TimeUnit.SECONDS.sleep(3);}catch (Exception e){e.printStackTrace();}// 定义要跳转的资源类路径RequestDispatcher requestDispatcher req.getRequestDispatcher(/Demo5);
// 进行跳转requestDispatcher.forward(req,resp);}
}资源类
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/Demo5)
public class pro extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(我是资源类我被访问了);}
}输出 注意跳转只能跳转到当前项目中的资源如果把资源改为外部路径比如www.baidu.com这样就无法进行跳转。并且转发知识一次的请求 3.共享数据
由于一个类中的数据往往只能该类使用但是有些资源需要进行多个对象能共享使用所以引入了共享数据
方法名作用setAttribute(String name, Object value)将一个数据对象value与给定的名称name关联起来将其存储在 ServletContext、HttpSession 或 HttpServletRequest 中以便多个对象之间共享使用。getAttribute(String name)根据给定的名称name从 ServletContext、HttpSession 或 HttpServletRequest 中获取与之关联的数据对象。removeAttribute(String name)根据给定的名称name从 ServletContext、HttpSession 或 HttpServletRequest 中删除关联的数据对象。
案例代码
设置一个运输物资类一个资源类
运输物资类
package com.company;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/Demo6)
public class Demo6 extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置共享资源,格式为 键值-对象req.setAttribute(msg,物资);System.out.println(当前为跳转类进行运输req.getAttribute(msg));RequestDispatcher requestDispatcher req.getRequestDispatcher(/Demo7);
// 进行跳转requestDispatcher.forward(req,resp);}
}资源类
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;WebServlet(/Demo7)
public class Demo7 extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(资源类获取到req.getAttribute(msg));}
}下一篇JavaWeb-Servlet服务连接器三_Alphamilk的博客-CSDN博客