java中Request和Response常用方法及举例

Request的常用方法:

    setAttribute()              在Request域中存储数据
    setCharacterEncoding()      设置请求参数的编码方式,只对post请求有效
    getAttribute()              获取域中存储的数据
    getAttributeNames()         获取域中所有数据,返回一个Enumeration枚举类
    getMethod()                 获取请求方法
    getParameter()              获取指定请求参数名称
    getParameterNames()         获取所有请求参数,返回一个Enumeration枚举类
    getServerName()             获取请求的服务器
    getServletPath()            Servlet路径
    getRequestURI()             URI路径
    getProtocol()               使用协议
    getContextPath()            返回上下文(项目)路径
    getQueryString()            查询字符串
    getRemoteAddr()             使用者主机IP
    getRemotePort()             使用者使用端口号.
    getCookies()                获取所有Cookie,返回一个Cookie数组
    getRequestDispatcher()      获取转发器,参数路径以/打头,代表WebRoot(当前WEB项目根目录)
    getSession()                获取Session对象

 举例:http://localhost:8080/test/request.do?name=john&age=20

  请求的服务器: localhost

  使用协议: HTTP1.1

  请求方法: GET

  请求的端口号: 8080

  Context路径: test

  Servlet路径: request.do

  URI路径: /test/request.do

  查询字符串: name=john&age=20

  使用者主机IP: 127.0.0.1

  使用者使用端口号: ****

Response的常用方法:

    setContentType()                告知浏览器数据类型
    setCharacterEncoding()          设置Response的编码方式
    setHeader()                     设置消息头
    setIntHeader()                  通知浏览器在给定的时间后刷新,时间以秒为单位
    setDateHeader()                 处理页面缓存,防止JSP或者Servlet中的输出被浏览器保存在缓冲区中。
                                    java中一般设置为response.setDateHeader("Expires", 0)
                                    与jsp中response.setDateHeader("Expires", -1)效果一致
    setStatus()                     设置相应状态码
    sendError()                     返回服务器的预设错误网页并显示错误信息。
                                    response.sendError(404)返回的Content-Type:text/html                     
    sendRedirect()                  重定向页面
    getOutputStream()               获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
    getWriter()                     获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)
    addCookie()                     添加Cookie

    encodeURL()                     对给定的url进行编码,以用于sendRedirect方法;
                                    如果不需要编码,则直接返回(未经修改的)url。
    encodeRedirectURL()             都对url附加上jsessionid参数进行了处理,如果需要,则在url的
                                    path后面附加上;jsessionid=xxx;如果不需要则直接返回传入的url。

HttpServletResponse的encodeRedirectURL()与encodeURL()的差别?

    共同点:
            都对url附加上jsessionid参数进行了处理,如果需要,则在url的path后面附加
        上;jsessionid=xxx;如果不需要则直接返回传入的url。
    不同点:
            encodeURL在附加jsessionid之前还对url做了判断处理:如果url为空字符串(长度为0的字符串),则将
        url转换为完整的URL(httphttps开头的);如果url是完整的URL,但不含任何路径(即只包含协议、主
        机名、端口,例如http://127.0.0.1),则在末尾加上根路径符号/。也就是encodeURL如果进行了编
        码,则返回的URL一定是完整URL而不是相对路径;而encodeRedirectURL则不对URL本身进行处理,只专
        注于添加jsessionid参数(如果需要)。
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拦截器和过滤器是Java Web应用程序常用的组件,它们可以在请求到达Web服务器之前或之后对请求进行处理。它们的主要区别在于它们的处理位置和处理方式。 拦截器是在Spring MVC框架使用的一种组件,它主要用于拦截并处理请求。它可以在请求到达Controller之前或之后执行一些操作,如用户认证、日志记录、性能监控等。拦截器是基于Java反射机制实现的,它可以获取请求的方法、参数、返回值等信息,并进行相应的处理。 下面是一个拦截器的示例代码: ```java public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 用户认证逻辑 if (!authenticated(request)) { response.sendRedirect("/login"); return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 日志记录逻辑 log(request, response); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 性能监控逻辑 monitor(request, response); } } ``` 上述代码,AuthInterceptor实现了HandlerInterceptor接口,并覆盖了其的preHandle、postHandle和afterCompletion方法。在preHandle方法,我们对请求进行了用户认证,如果未通过认证,则重定向到登录页面。在postHandle方法,我们记录了请求的日志。在afterCompletion方法,我们进行了性能监控。 过滤器是在Servlet规范定义的一种组件,它主要用于过滤请求。它可以在请求到达Servlet之前或之后执行一些操作,如字符集编码、安全检查、日志记录等。过滤器是基于Java回调机制实现的,它可以拦截请求和响应,并在它们到达目的地之前或之后执行一些操作。 下面是一个过滤器的示例代码: ```java public class EncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化逻辑 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 编码转换逻辑 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } @Override public void destroy() { // 销毁逻辑 } } ``` 上述代码,EncodingFilter实现了Filter接口,并覆盖了其的init、doFilter和destroy方法。在doFilter方法,我们进行了字符集编码的转换。在FilterChain的doFilter方法,请求和响应将被传递到下一个过滤器或Servlet。 因此,拦截器和过滤器的主要区别在于它们的处理位置和处理方式。拦截器更加灵活,可以对请求进行更加细粒度的控制和处理,而过滤器则更加通用,可以在整个Web应用程序共享。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值