Як отримати параметри з URL за допомогою JSP


193

Як в JSP отримати параметри з URL-адреси?

Наприклад, у мене є URL, для якого www.somesite.com/Transaction_List.jsp?accountID=5
я хочу отримати 5.

Чи є request.getAttribute ("accountID"), як там, для сеансів чи щось подібне?

Відповіді:


178

У GET-запиті параметри запиту беруться з рядка запиту (дані, що відповідають знаку питання в URL-адресі). Наприклад, URL-адреса http://hostname.com?p1=v1&p2=v2 містить два параметри запиту - - p1 та p2. У запиті POST параметри запиту беруться як з рядка запиту, так і з розміщених даних, кодованих в тілі запиту.

Цей приклад демонструє, як включити значення параметра запиту в генерований вихід:

Hello <b><%= request.getParameter("name") %></b>!

Якщо на сторінку звертався за допомогою URL-адреси:

http://hostname.com/mywebapp/mypage.jsp?name=John+Smith

отриманий результат буде:

Hello <b>John Smith</b>!

Якщо ім'я не вказано в рядку запиту, результатом буде:

Hello <b>null</b>!

У цьому прикладі використовується значення параметра запиту в сценарії:

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>

97
Сценарії вважаються поганою практикою.
BalusC

14
Не забувайте xmlEncode .. це наразі вразливе для відображення xss
Esailija

5
-1 для вразливості XSS. Було б також -1 для використання скрипта, коли завдання можна виконати за допомогою EL, якщо я міг би проголосувати двічі. Серйозно, НЕ робіть цього .
Жуль

Запропонувати використання сценаріїв, коли існує краще рішення, шкідливо для якості коду.
Suketu Bhuta

2
Щодо "Сценарії вважаються поганою практикою". Дивіться цю відповідь в іншому запитанні щодо альтернатив.
Піксельстікс

243

Про неявних об'єктах в єдиному мовою виразів , то Java EE 5 Tutorial пише:

Неявні об'єкти

Мова вираження JSP визначає набір неявних об'єктів:

  • pageContext: Контекст сторінки JSP. Забезпечує доступ до різних об'єктів, включаючи:
    • servletContext: Контекст сервлету сторінки JSP і будь-які веб-компоненти, що містяться в одній програмі. Див. Розділ Доступ до веб-контексту.
    • session: Об’єкт сеансу для клієнта. Див. Розділ Підтримка стану клієнта.
    • request: Запит, що викликає виконання сторінки JSP. Див. Розділ Отримання інформації із запитів .
    • response: Відповідь, повернута сторінкою JSP. Див. Розділ Конструювання відповідей.
  • Крім того, доступно кілька неявних об’єктів, які дозволяють легко отримувати доступ до таких об'єктів:
    • param: Зв’язує ім’я параметра запиту на одне значення
    • paramValues: Позначає ім’я параметра запиту на масив значень
    • header: Зв’язує ім'я заголовка запиту на одне значення
    • headerValues: Позначає ім'я заголовка запиту на масив значень
    • cookie: Зв’язує ім'я файлу cookie з одним файлом cookie
    • initParam: Зв’язує ім'я параметра параметра ініціалізації контексту на одне значення
  • Нарешті, є об'єкти, які дозволяють отримати доступ до різних масштабних змінних, описаних у розділі Використання об'єктів.
    • pageScope: Картографує назви змінних сторінок на їх значення
    • requestScope: Карти, нанесені на вимоги, назви змінних до їх значень
    • sessionScope: Картографські назви сеансів, які охоплюють їх сеанси, на значення
    • applicationScope: Карти додатків, які охоплюють додатки, до їх значень

Цікаві деталі жирним шрифтом :)

Отже, щоб відповісти на ваше запитання, ви повинні мати доступ до нього так (за допомогою EL):

${param.accountID}

Або, використовуючи сценарії JSP (не рекомендується):

<%
    String accountId = request.getParameter("accountID");
%>

Чи потрібно щось зробити, щоб активувати EL? Я використовую jboss6, і коли я використовую $ {param.accountID}, він розглядається як звичайний текст із браузера.
simgineer

@simgineer По-перше, файл ОБОВ'ЯЗКОВО повинен бути JSP, а не просто звичайний HTML. Прочитайте наступні теми: Мова виразів, не показуйте змінне значення , вирази EL не оцінюються в JBoss AS 4.2.2 , мова виразів у JSP не працює .
informatik01

81

Використовуйте EL (мова вираження JSP):

${param.accountID}


1
Чи обробляє це декодування URL-адреси?
vikingsteve

@vikingsteve так, це так
Ніл МакГуйган

2
Але він не обробляє перекодування як об'єкти HTML / XML, що необхідно для запобігання XSS. Для цього використовуйте JSTL <c:out value="${param.accountID}" />.
Жуль

21

Якщо я можу тут додати коментар ...

<c:out value="${param.accountID}"></c:out>

не працює для мене (він друкує 0).

Натомість це працює:

<c:out value="${param['accountID']}"></c:out>


Варто зауважити: парам включає більше значень, ніж просто аргументи запиту URL-адреси (наприклад, значення в моделі моделі). якщо вам потрібно спеціально перевірити, чи є значення в аргументах запиту URL-адреси (і, наприклад, буде подано у рамках подання форми), ви можете переглянути $ {pageContext.request.queryString} - але воно не розбивається на приємна карта, як парами є.
Пол



0

Наприклад, ви хотіли видалити предметну запис із її subject_id

@RequestMapping(value="subject_setup/delete/{subjectid}",method = RequestMethod.GET)
public ModelAndView delete(@PathVariable int subjectid) {
    subjectsDao.delete(subjectid);
    return new ModelAndView("redirect:/subject_setup");
}

і параметр буде використаний для введення запиту

public int delete(int subjectid) {
    String sql = "update tbl_subject set isdeleted= '1' where id = "+subjectid+"";
    return template.update(sql);
}

0

www.somesite.com/Transaction_List.jsp?accountID=5

Для цього URLіснує виклик методу request.getParameterв java, якщо ви хочете, щоб число тут було введено int, аналогічно для значення рядка, що передається в string. тому для вашої вимоги просто скопіюйте минуле під рядком на сторінці,

int  accountId =(int)request.getParameter("accountID");

тепер ви можете називати це значення, використовуючи accountIdцілу сторінку.

ось accountIdназва параметра, ви також можете отримати більше, ніж один параметр, використовуючи цей, але це не працює. Він буде працювати лише з GETметодом, якщо ви натиснете на POSTзапит, тоді їх буде помилка.

Сподіваюся, що це корисно.


0

сторінка 1: Сторінка деталей 2: <% String id = request.getParameter ("userid");%> // тепер ви можете використовувати id для запиту sql деталі hsql product

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.