В предыдущем разделе мы завершили базовую работу корзины для покупок, но есть проблема: когда пользователь нажимает, чтобы урегулировать, мы должны вынести решение для входа, чтобы определить, входит ли пользователь. Если он не вошел в систему, он должен сначала позволить пользователю входить. Фильтр специально перехватывает запросы страницы. Это похоже на принцип перехватчика. Перехватчик специально перехватывает запросы действий, поэтому каждый имеет свое собственное использование. Если это прыжок страницы напрямую, не проходя через действие, нам просто нужно написать перехватчик. Если нам нужно перейти к действию для обработки, то мы должны написать перехватчик.
1. Принцип входа в систему Jump <Br /> Позвольте мне сначала поговорить о принципе реализации: напишите фильтр и настройте URL -адрес, который необходимо перехватить в web.xml. Таким образом, когда URL -адрес запроса пользователя соответствует конфигурации, будет выполнен фильтр, который мы написали. В фильтре мы сначала проверяем, есть ли пользователь, зарегистрированный в сеансе. Если нет никаких признаков того, что нет входа в систему, то получите URL-адрес страницы и параметры, к которым пользователь хочет получить доступ, переоценить его в URL и поместить его в сеанс, а затем перенаправить на страницу входа в систему, войти в систему и перейти к обработке действий и после обработки, перейти на URL, сохраненный в сеансе, который является, куда пользователь изначально хотел идти. Это завершает прыжок в логине.
2. Реализация входа в прыжок
Когда используется настоящая страница корзины для покупок, мы нажимаем на оформление заказа, и она автоматически перейдет на страницу подтверждения заказа, следующим образом:
Однако, если пользователь не вошел в систему в настоящее время, мы определенно не перейдем на страницу подтверждения заказа напрямую, поэтому мы должны использовать фильтр, чтобы заблокировать его и вынести суждение. Давайте напишем фильтр ниже:
2.1 Реализация фильтров
Реализация фильтра должна реализовать интерфейс фильтра и перезаписать три метода. На самом деле, нам в основном нужно перезаписать один из них. следующее:
public class UserFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; Httpservletresponse res = (httpservletresponse) ответ; // Определите, имеет ли текущий сеанс информация о пользователе if (req.getSession (). GetAttribute ("user") == null) {// Сохранить адрес URL -адреса, который текущий клиент хочет перейти к string gourl = req.getservletpath (); // Получить адрес, который пользователь хочет перейти к string param = req.getQueryString (); // Получить параметры, переносимые в адресе, если (param! = Null) {gourl = gourl + "?" + param; // Повторно снижать адрес запроса + параметры} // Сохранить адрес, который текущий клиент хочет получить в сеансе req.getSession (). Setattribute ("gourl", gourl); // незаконное запрос, перейти на страницу входа в систему req.getSession (). Setattribute («ошибка», «Незаконное запрос, пожалуйста, войдите в систему!»); res.sendredirect (req.getContextPath () + "/ulogin.jsp"); } else {// Если есть следующий фильтр, прыгнуть, иначе перейдите непосредственно к цепочке целевой страницы.dofilter (запрос, ответ); }} @Override public void init (config filterConfig) Throws ServletException {// TODO Auto Generated Method Stub}} Судя по Кодексу реализации, метод Dofilter - это в основном диарея. В методе сначала определите, есть ли пользовательская информация в текущем сеансе. Если нет, это означает, что нет входа в систему. Затем вы должны сначала сохранить адрес URL -адреса и параметры в адресе, к которому пользователь хочет перейти, внести его в новый URL -адрес и сохранить его в сеансе, а затем перенаправить его на страницу входа в систему, чтобы позволить пользователю входить в систему. Если в сеансе есть информация пользователя, это означает, что вы вошли в систему и непосредственно выпустить его на страницу, к которой пользователь хочет пойти.
После написания фильтра, не забудьте настроить URL для фильтрации в web.xml, следующим образом:
Таким образом, вышеуказанный $ {shop}/user/confirm.jsp будет отфильтрован. Далее, давайте посмотрим на страницу входа в систему. На самом деле у него есть два ящика, имя пользователя и пароль, которые в основном зависят от того, к какому действию он прыгает:
Мы видим, что он прыгает в метод входа в пользователь, чтобы выполнить логику. Здесь мы реализуем пользователь:
2.2 Реализация действия
В UserAction мы сначала выпускаем решение для входа в систему, то есть ищем пользователей с именем пользователя и паролем в базе данных. Если это успешно, сохраните пользователя в сеансе, а затем верните результат и передайте его на struts2 для обработки. Код заключается в следующем:
@Controller ("userAction") @Scope ("Prototype") открытый класс userAction Extens BaseAction <user> {public String login () {// Суждение в login model = userservice.login (model); if (model == null) {session.put ("error", "login не удастся"); вернуть "вход"; } else {// Вход успешно, сначала сохраните пользователя в сеансе Session.put ("user", model); // защищать прыжок страницы в зависимости от того, имеет ли Gourl в сеансе значение if (session.get ("gourl") == null) {return "index"; // пропустить домашнюю страницу} else {return "gourl"; }}}}Давайте посмотрим на конфигурацию на struts.xml:
Поскольку у нас есть Gourl в сессии, но в struts.xml мы не можем получить сеанс, а затем параметры в коде Java, но мы можем взять его из стека значений. Выше приведено метод получения данных из стека значений.
2.3 Войдите в решение уровня обслуживания
Сервисный уровень - это в основном метод входа, используемый в приведенном выше действии, и реализация относительно проста, следующим образом:
// пользовательский интерфейс интерфейс public interface userservice extends baseService <user> {// Пользователь входит в систему и возвращает общедоступный пользовательский вход (пользователь пользователя); } // userserviceImpl реализации @service ("userservice") открытый класс userserviceimpl расширяет baseServiceImpl <uster> реализует userservice {@Override public user min (пользователь пользователя) {string hql = "От пользователя u, где u.login =: ogin and u.pass =: pass"; return (user) getsession (). createQuery (hql) // .setString ("login", user.getLogin ()) // .setString ("pass", user.getpass ()) //. uniqueresult (); }}Итак, мы используем фильтры, чтобы реализовать суждение и прыжок пользователя. После входа в систему мы можем перейти на страницу подтверждения заказа. Эффект заключается в следующем:
Весь тест процесса был завершен, и функция нормальная. На самом деле, мы можем улучшить его немного больше. На самом деле мы должны принять решение о входе в систему, прежде чем добавить его в корзину. То есть страница корзины покупок уже находится в состоянии входа, и вот страница подтверждения заказа, чтобы определить вход. Однако, если мы вынесем суждения перед страницей корзины покупок, нам будет трудно использовать фильтр. Мы должны использовать перехватчик, потому что запрос на действие не является обычной страницей при прыжке на страницу корзины покупок. При запросе действий мы должны использовать перехватчик, чтобы перехватить его. Давайте улучшим это позже. Теперь мы будем в основном реализовать функции здесь. Хорошо, вход в систему и прыжок сделаны.
Оригинальный адрес: http://blog.csdn.net/eson_15/article/details/51425010
Вышеуказанное - все содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.