matches
пытается сопоставить выражение со всей строкой и неявно добавить ^
в начале и $
в конце вашего шаблона, то есть не будет искать подстроку. Следовательно, выход этого кода:
public static void main(String[] args) throws ParseException {
Pattern p = Pattern.compile("\\d\\d\\d");
Matcher m = p.matcher("a123b");
System.out.println(m.find());
System.out.println(m.matches());
p = Pattern.compile("^\\d\\d\\d$");
m = p.matcher("123");
System.out.println(m.find());
System.out.println(m.matches());
}
/* output:
true
false
true
true
*/
123
является подстрокой a123b
, поэтому метод find()
выводит true. matches()
только «видит» a123b
, который не совпадает с 123
и, следовательно, выводит false.
Основная мотивация была, как Mark Brackett говорит, пределы на размер полезной нагрузки, наложенный при помощи перенаправлений, и ДОБРАТЬСЯ. Некоторые реализации достаточно умны, чтобы только использовать POST, когда сообщение пробегается через определенный размер, поскольку существуют, конечно, недостатки к методу POST. (Руководитель среди них являющийся тем, что Ваша Кнопка "Назад" не работает.) Другие реализации, как пример кода, который Вы процитировали, идут для простоты и непротиворечивости и не учитывают то условное выражение.
Я могу думать о нескольких причинах:
Я не знаю, что любой из них является причиной гарантированного успеха выбрать POST - если отправляемый объем данных не превышает querystring длину для некоторого главного браузера.
Тот же подход используется для веб-браузера SAML профиль SSO. Основные мотивации использования перенаправления Сообщения HTML:
Фактически неограниченная длина полезной нагрузки: в SAML полезная нагрузка является XML-документом, подписанным с XMLDSig и закодированным base64. Это больше, чем обычные 1 024 ограничения символов URL (лучшая практика для поддержки не только любых браузеров, но и посреднических сетевых устройств как Брандмауэр, Обратный Прокси, Подсистема балансировки нагрузки также).
W3C в стандарте HTTP говорится это, ДОБИРАЕТСЯ, идемпотент (тот же URL выполняется, многократно должен всегда приводить к тому же ответу), и следовательно может кэшироваться по пути, в то время как POST не и должен достигнуть цели URL. Ответ HTML-ФОРМЫ OpenID POST или HTML-ФОРМА SAML POST не должен кэшироваться. Это должно достигнуть цели для инициирования аутентифицируемой сессии.
Вы могли утверждать, что использование HTTP ДОБИРАЕТСЯ, перенаправление работало бы также начиная с запроса URL всегда изменяются, и Вы были бы правы, практика. Однако это было бы обходным решением стандарта W3C, и поэтому, не должно быть стандартом, но альтернативной реализацией каждый раз, когда оба конца соглашаются с ним.