web-servlet-request

本文详细介绍了HTTP请求中的Request对象及其各种方法,包括获取客户机信息、请求头、请求参数等,同时还探讨了如何处理中文乱码问题,并对比了请求转发与重定向的区别。

request对象API(常用)

        1、获取客户机信息:
        
            getMethod();            --- 获取请求的方式
            
            getQueryString();       --- 获取请求路径后的提交参数的字符串
            
            getRequestURL();        --- 获取请求路径的url
            
            getRemoteAddr();        --- 获取客户机的ip地址
            
        2、获取请求头的方法:
        
            getHeader(String name);            --- 获得一个key对应一个value的请求头
            
            getHeaders(String name);           --- 获得一个key对应多个value的请求头
            
        3、获取请求参数的方法:
        
            getParameter(String name);          --- 获得提交的参数(一个name对应一个value)
            
            getParameterValues(String name);    --- 获得提交的参数(一个name对应多个value)
            
            getParameterMap();                  --- 获得提交的参数,将提交的参数的名称和对应的值存入到一个Map集合中
            
        4、request作为域对象存储数据的方法:
        
            setAttribute(Sring,object)     向request域对象中存入数据;

            getAttribute(String)         从request域对象中获取数据;

            removeAttrubute(String)      从request域对象中移除数据;

       5、Request对象接收表单请求参数的中文乱码处理

             1、POST方式接收中文

             

             

                  2、GET方式接收中文

                   

 

          6、Request作为域对象作用范围

Request对象其实就是从客户端浏览器向服务器发送的一次请求信息的封装。那么实质上向Request中所保存的数据有效期也是一次请求范围。

一次请求范围:从客户端浏览器向服务器发送一次请求,服务器针对这次请求对浏览器作出响应。当服务器作出响应之后,请求对象就销毁了,保存在其中的数据就无效了。

          7、请求转发的写法

通过ServletRequest对象获得RequestDispatcher对象。

RequestDispather dispather = request.getRequestDispather("/xxx/yyy.jsp");

再根据RequestDispatcher中的方法进行请求转发

dispather.forward(request,response);

即可实现请求转发。

        8、请求转发和重定向区别总结

             1、请求转发是一次请求一次响应,而重定向是两次请求两次响应。

             2、请求转发地址栏不会变化的,重定向地址栏发生变化。

             3、请求转发路径不带工程名,重定向需要带工程名路径。

             4、请求转发只能在本网站内部,重定向可以定向到任何网站。             

           注意:

如果需要使用request进行值传递,需要通过请求转发完成。如果页面需要跳转到其他网站上必须使用重定向。

 

### 原因分析 在 Sentinel 版本迭代过程中,有些常量或者方法可能被移除、重构或者替换,以优化代码结构、提高性能或者遵循新的设计理念。`CommonFilter.EXCLUDE_URLS_INIT_PARAM` 在 `sentinel-web-servlet 1.8.6` 版本中不存在,可能是因为该常量在这个版本被移除或者重命名。官方在更新版本时,可能认为该功能有更好的实现方式,或者该功能的使用场景较少,所以进行了调整。 ### 解决办法 #### 查看官方文档和更新日志 首先可以查看 Sentinel 的官方文档和 `1.8.6` 版本的更新日志,确认该常量是否被重命名或者有替代方案。官方文档通常会详细说明版本之间的变更内容。 #### 手动实现排除 URL 功能 如果没有找到替代常量,可以手动实现排除 URL 的逻辑。以下是一个示例代码,通过继承 `CommonFilter` 并在 `doFilter` 方法中添加排除逻辑: ```java import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Arrays; import java.util.List; public class CustomSentinelFilter extends CommonFilter { private static final List<String> EXCLUDE_URLS = Arrays.asList("/static/*", "/healthcheck"); @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String requestUrl = httpRequest.getRequestURI(); for (String excludeUrl : EXCLUDE_URLS) { if (isMatch(requestUrl, excludeUrl)) { chain.doFilter(request, response); return; } } super.doFilter(request, response, chain); } private boolean isMatch(String requestUrl, String excludeUrl) { // 简单的通配符匹配逻辑,可根据实际需求扩展 if (excludeUrl.endsWith("/*")) { return requestUrl.startsWith(excludeUrl.substring(0, excludeUrl.length() - 1)); } return requestUrl.equals(excludeUrl); } } ``` 然后在配置中使用自定义的过滤器: ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FilterContextConfig { @Bean public FilterRegistrationBean sentinelFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new CustomSentinelFilter()); registration.addUrlPatterns("/*"); registration.setName("sentinelFilter"); registration.setOrder(1); return registration; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值