利用注解来保存uri

一直对getRequestURI()与getRequestURL()理解不透彻,因此今天通过查找资料,现将些许收获分享一下:

[非原创]代码搬运工..(*^__^*)

1.request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"

  http://www.baidu.com:8080/web/index.html

2.request.getContextPath()  返回  "/web"

3.request.getRequestURI()    返回  /myContext/requestdemo.jsp,                返回的是String

4.request.getRequestURL()    返回  http://localhost:8080/myContext/requestdemo.jsp,    返回的StringBuffer

http://www.baidu.com:8080/web/index.html?username=abc&password=123

1.注册注解@MarkRequest:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface MarkRequest{
    String value() default "returnURI";
    String scope() default "session"
    String[] excludes() default {};
}

2.根据有无@MarkRequest注解来判断是否应当向request或session域中保存请求的uri:

//根据有无@MarkRequest注解来判断是否应当向request或session域中保存请求的uri
public void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView){
    if(handler instanceof HandlerMethod)}{

        HandlerMethod hm=(HandlerMethod)handler;

        MarkRequest markRequest=hm.getMethodAnnotation(MarkRequest.class);

        if(markRequest!=null){

            String name=markRequest.value();

            String scope=markRequest.scope();

            String[] excludes= markRequest.excludes();    //不需要保存的uri请求参数

            markRequestInfo(request,scope,name,excludes);
        }
    }
}
/**
*    向request域或session域中保存请求的uri
*/
public void markRequestInfo(HttpServletRequest request,String scope,String name,String[] excludes){

    List excludeParamList=Arrays.asList(excludes);

    String uri=getRequestInfo(request,false,excludeParamList);

    if("request".equals(scope)){

        request.setAttribute(name,uri);

    }else if("session".equals(scope)){

        request.getSession().setAttribute(name,uri);
    }
}
public String getRequestInfo(HttpServletRequest request,boolean trimContextPath,List excludeParamList){

    String uri=request.getRequestURI();

    //是否去掉应用名
    if(trimContextPath){

        String contextPath = request.getContextPath();

        if(uri.startsWith(contextPath)){

            uri = uri.substring(contextPath.length());
        }
    }

    //往uri中添加请求参数
    Map<String, String[]> paramMap=(Map<String, String[]) request.getParameterMap();

    uri = uri + "?";

    if(!paramMap.isEmpty()){

        for(Map.Entry<String,String[]> entry : paramMap.entrySet()){

            String key = entry.getKey();

            if(!excludeParamList.contains(key)){

                String[] values= entry.getValue();

                for(int i=0; i< values.length; i++){

                //url中的请求参数,应当使用URIEncoder把普通字符串转换成application/x-www-form-urlencoded字符串

                uri += (key + "=" + URIEncoder.encode(values[i],"utf-8") + "&");

                }
            }
        }
    }

    //去掉去掉uri中的最后一个‘&‘字符
    return uri.substring(0,uri.length()-1);
}
时间: 2024-10-20 01:47:04

利用注解来保存uri的相关文章

利用注解和反射将map转化成bean

一.java注解 java注解相关的类放在 java.lang.annotation 包下,其主要内容包含4个元注解和其中两个元注解的枚举类值,相对比较简单,从jdk问答即可了解 4个元注解: Documented:指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化.应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用.如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分. Inherited:指示注释类型被自动继

利用+=n连续保存或者输出n个数

for (int k = 0; k < list.size(); k += 2) { if (((k + 1) % 2) != 0) { m1 = (MealEntity) list.get(k); %> <tr> <td> <a href="MealServlet?type=findbyid&mid=<%=m1.getMealId()%>"><img src="mealImg/<%=m1.get

Spring框架中利用注解进行自动装配的环境配置步骤和常见问题

第1步:配置XML文件 ,如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.spring

spring利用注解来注册bean到容器

1.spring利用注解来定义bean,或者利用注解来注册装配bean.包括注册到ioc中,装配包括成员变量的自动注入. 1.spring会自动扫描所有类的注解,扫描这些注解后,spring会将这些bean注册到ioc容器中.省去了xml文件的书写bean方法. 2.spring会自动扫描这些注解,spring会自动扫描这些注解. 配置<context:component-sacn base-package="xxxx">后,spring就会自动扫描注解.扫描指定包下所有内

【Android数据库优化】利用注解实现SQLite通用框架抽取

在开发Android应用的过程中,少不了要用到SQLite数据库操作,各种增删查改...一般看来,对于不同的实体类的数据库操作,貌似我们只能使用不同的"增删查改"方法来实现,本次的想法就是,能不能抽取出一个通用的框架,使得对于不同的实体类的数据库操作,可以使用同一个接口的实现来做...废话少说,进入正题. 一.普通的数据库操作的实现 现在有一个Book的类,里面有三个成员变量,id,tittle和summary,其中id将会作为主键,且自增.Book代码如下: package com.

利用Python批量保存51CTO博客

一.背景 最近在整理博客,近在51CTO官网存在文章,想将之前写的全部保存到本地,发现用markdown写的可以导出,富文本的则不行,就想利用Python批量保存自己的博客到本地. 二.代码 git地址 #!/bin/env python # -*- coding:utf-8 -*- # _auth:kaliarch import requests import time from bs4 import BeautifulSoup from selenium import webdriver c

利用注解加拦截器实现struts2的权限设置

需求分析: 列出所有的权限,然后通过选择让每个部门拥有相关的权限,如果有该权限则可以进行操作,如果没有提示没有权限信息. 为了能够实现重用性,这里选择注解的形式 思路:既然利用struts2做,那么实现自定义拦截器就可以方便的实现对action中的方法的拦截与放行,首先建立权限表,把系统所有的功能全部列出来,如图1所示. 建立表存放系统所有的功能项sys_popedom,建立字段 popodomModule(模块的部门组),popedomPrivilege(模块的具体部门的具体功能),sort(

如何利用cookie来保存用户登录账号

众所周知,cookie在网页编写中不接或缺,今天就谈谈如何利用cookie技术来保存用户登录账号 1.首先是否保存用户登录账号当然是用户自行决定,所以我们需要在用户登录界面设置一个复选框,以此取得用户意愿信息,以便为下一步操作提供判断依据. require_once 'common.php'; 用户账号:</td><td><input type="text" name="id" value="<?php echo get

SpringMVC利用注解实现异常处理

在项目中如何处理出现的异常,以前通常的作法是继承Exception或实现Runnable接口来封装自定义异常,然后在项目代码中通过try...catch语句块来捕获到出现的异常,封装到我们自己定义的异常类中.如果项目中使用的SpringMVC框架的话,这里介绍另外一种也比较方便的异常处理方法,本人还是比较喜欢这种处理方式.这里用到的是ExceptionHandler这个注解. 1.首先新建一个名为BaseController的抽象类: public abstract class BaseCont