1. Единый кодирование символов на всем сайте
Параметр конфигурации charset указывает, какое кодирование символов используется для решения китайской задачи параметров запроса формы HTML
Пакет me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; импорт javax.servlet.filterConfig; import javax.servlet.servletexception; импорт. javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletrequestwrapper; import javax.servlet.http.httpservlectrespons ParmateEncodingFilter реализует фильтр {Private FilterConfig FilterConfig = null; // Установить кодирование символов по умолчанию частной строки defaultCharset = "utf-8"; Public void DoFilter (ServletRequest REQ, ServletResponse Resp, FilterChain Chain) бросает ioException, servletexception {httpservletrequest request = (httpservletrequest) req; Httpservletresponse response = (httpservletresponse) resp; String charset = filterConfig.getInitParameter ("charset"); if (charset == null) {charset = defaultCharset; } request.setcharacterencoding (charset); response.setcharacterencoding (charset); response.setContentType ("text/html; charset ="+charset); MycharacterencodingRequest requestWrapper = new MyCharacterencoDingRequest (запрос); chain.dofilter (requestWrapper, ответ); } public void init (FilterConfig FilterConfig) Throws ServletException {// Получить информацию о конфигурации инициализации фильтра this.filterConfig = filterConfig; } public void destress () {}}/*1. Implement the same interface as the enhanced object 2. Define a variable Remember the enhanced object 3. Define a constructor to receive the enhanced object 4. Overwrite the methods that need to be enhanced 5. For methods that do not want to be enhanced, directly call the method of the enhanced object (target object) */ class MyCharacterEncodingRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; public mycharacterencodingrequest (httpservletrequest) {super (request); this.Request = запрос; } /* Переписать метод getParameter* @see javax.servlet.servletrequestwrapper#getParameter (java.lang.string)* /@override public String getParameter (string name) {try {// Получить строку значения параметра = this.request.getParameter (name); if (value == null) {return null; } // Если данные не представлены в get, непосредственно верните полученное значение if (! This.request.getMethod (). EqualsignoreCase ("get")) {return value; } else {// Если данные представлены в get, полученное значение-транскодировано значение = new String (value.getBytes ("iso8859-1"), this.request.getCaracterencoDing ()); возвращаемое значение; }} catch (Exception e) {бросить новое runtimeexception (e); }}} Конфигурация в файле web.xml заключается в следующем:
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>me.gacl.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name> harectencodingfilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2. Браузеру запрещено кэшировать все динамические страницы
Существует 3 поля заголовка отклика HTTP, которые могут запретить браузеру кэшировать текущую страницу. Пример кода в сервисе заключается в следующем:
Не все браузеры могут полностью поддерживать три вышеуказанные заголовки ответов, поэтому лучше всего использовать три вышеуказанные заголовки ответов одновременно.
Пакет me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; импорт javax.servlet.filterConfig; import javax.servlet.servletexception; импорт. javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse;/*** @classname: nocachefilter* @description: браузер запрещен от кэшированного All Dynamic Pages* @author: Lonely Canglang* @date: 2014-310 11:4 Открытый класс Nocachefilter реализует фильтр {public void dofilter (ServletRequest req, servletresponse resp, httpservlectrequest httpservlectrequest res res rebilter resr resp, httpservlectrequest httpservlectrequest {// httpserquest). // принуждение сервиса ответа на httpservletresponse httpservletresponse response = (httpservletresponse) sprop; // принуждение сервиса ответа на httpservletresponse response = (httpservletresponse) resp; // запрещать браузеры кэшировать все динамические страницы response.setDateHeader («истекает», -1); response.setheader («Контроль кэша», «без каша»); response.setheader ("pragma", "без Cache"); chain.dofilter (запрос, ответ); } public void init (FilterConfig FilterConfig) Throws ServletException {} public void destress () {}} Конфигурация в файле web.xml заключается в следующем:
<filter> <filter-name> nocachefilter </filter-name> <filter-class> me.gacl.web.filter.nocachefilter </filter-class> </filter> <filter-mapping> <filter-name> nocachefilter </filter-name> <!-только jsp-name-name>*. </filter-карты>
3. управление статическими ресурсами на страницах кэша браузеров
Некоторые динамические страницы относятся к некоторым изображениям или файлам CSS для изменения эффекта страницы. Эти изображения и файлы CSS часто остаются неизменными, поэтому, чтобы снять давление на сервер, вы можете использовать фильтр для управления браузером для кэширования этих файлов для повышения производительности сервера.
Пакет me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; импорт javax.servlet.filterConfig; import javax.servlet.servletexception; импорт. javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse;/ *** @classname: cachefilter*@description: filter*/ public Cachefilter реализует {private filterconfig filterConfig; Public void DoFilter (ServletRequest REQ, ServletResponse Resp, FilterChain Chain) бросает ioException, servletexception {httpservletrequest request = (httpservletrequest) req; Httpservletresponse response = (httpservletresponse) resp; // 1. Получите ресурс, к которому пользователь хочет получить доступ к string uri = request.getRequesturi (); // 2. Получить имя суффикса ресурса, к которому пользователь хочет получить доступ к string ext = uri.substring (uri.lastindexof (".")+1); // Получите время, когда ресурс должен быть кэшированным временем = filterConfig.getInitParameter (ext); if (time! = null) {long t = long.parselong (время)*3600*1000; // Установите реакцию кэша.setDateHeader («истекает», System.CurrentTimeMillis () + T); } chain.dofilter (запрос, ответ); } public void init (FilterConfig FilterConfig) Throws ServletException {this.filterConfig = filterConfig; } public void destry () {}} Конфигурация в файле web.xml заключается в следующем:
<!-Настроить кеш-фильтр-> <Filter> <Filter-name> CacheFilter </filter-name> <filter-class> me.gacl.web.filter.cachefilter </filter-class> <!-Настройте кэшируйте веб-ресурсы и кэш в часах-> <init-param> <param-dame> css </param-name> csss </param-name> csss </param-name> </param-name> </param-name> csss </param-name> <param-name> csss </param-name> <param-name>. <param-value>4</param-value> </init-param> <init-param> <param-name>jpg</param-name> <param-value>1</param-value> </init-param> <init-param> <param-name>js</param-name> <param-value>4</param-value> </init-param> <init-param> <param-name> png </param-name> <param-value> 4 </param-value> </init-param> </filter> <!-Настройка суффикса веб-ресурса, который будет кэшировать-> <url-mapping> <filter-name> cachefilter </filter-mame> <url-pattern>*. <Filter-name> cacheFilter </filter-name> <url-pattern>*. css </url-pattern> </filter-mapping> <filter-mapping> <filter-name> cachefilter </filter-name> <url-pattern>*. <filter-name> cachefilter </filter-name> <url-pattern>*. Png </url-pattern> </filter-картирование>
4. Реализуйте автоматический вход для пользователей
Идея заключается в следующем:
1. После успешного входа пользователя входит в систему, отправьте cookie с именем пользователя клиенту. Значение cookie - это имя пользователя и зашифрованный пароль MD5.
2. Напишите автологинфильтер. Этот фильтр проверяет, есть ли у пользователя cookie с именем пользователя. Если это так, позвоните DAO, чтобы проверить, соответствуют ли имя пользователя и пароль cookie с базой данных. Если совпадение выполнено, пользовательский объект (то есть отметка входа пользователя) хранится в сеансе для достижения автоматического входа в систему.
Основной код заключается в следующем:
Обработка контроллера.
пакет me.gacl.web.controller; import java.io.ioexception; import javax.servlet.servletexception; импорт javax.servlet.http.cookie; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservelcevlectrevlet; javax.servlet.http.httpservletresponse; import me.gacl.dao.userdao; импорт me.gacl.domain.user; импорт me.gacl.util.webutils; public class loginservlet httpservlet {public void doget (httpserveltrevlet refscevels) ServletException, ioException {String userName = request.getParameter ("username"); String password = request.getParameter ("пароль"); Userdao dao = new userdao (); Пользователь пользователь = dao.find (имя пользователя, пароль); if (user == null) {request.setattribute ("Сообщение", "Имя или пароль пользователя неверно !!"); request.getRequestDispatcher ("/message.jsp"). возвращаться; } request.getSession (). setattribute ("user", user); // Отправить автоматическое вход в систему cookie в браузер клиента для хранения SendAutologickookie (запрос, ответ, пользователь); request.getRequestDispatcher ("/index.jsp"). } / ** * @method: sendautologickookie * @description: Отправить автоматический вход в вход в клиентский браузер * @param запрос * @param response * @param пользователь * / private void sendautologickookie (httpserveltrequest, httpserveltresponse, user user user) {if (if QuestraLemater ("httpservletresponse, пользователь пользователь) {if (if Quester.gregateter (") logintime = integer.parseint (request.getParameter ("logintime")); // Создать cookie, имя cookie - это автологин, значение - имя пользователя и пароль для входа пользователя, и он используется между именем пользователя и паролем. Это разделено. Пароль зашифруется MD5. Cookie = new cookie ("Autologin", user.getusername () + "." + Webutils.md5 (user.getpassword ())); // Установить период достоверности cookie cookie.setmaxage (logintime); // Установить действительный путь cookie cookie.setPath (request.getContextPath ()); // Написать файл cookie в клиентский браузер response.addcookie (cookie); }} public void dopost (httpservletrequest -запрос, httpservletresponse response) throws servletexception, ioexception {Doget (запрос, ответ); }} Фильтры, которые обрабатывают автоматический логин пользователя: Autologinfilter
Пакет me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; импорт javax.servlet.filterConfig; import javax.servlet.servletexception; импорт. javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; импорт me.gacl.dao.userdao; импорт me.gacl.domain.User. AutologinFilter реализует фильтр {public void dofilter (ServletRequest req, servletresponse resp, filterchain chain), выбросы Ioexception, Servletexception {httpservletrequest request = (httpservletrequest) req; Httpservletresponse response = (httpservletresponse) resp; // Если вы вошли в систему, непосредственно chain.dofilter (запрос, ответ) выпуск if (request.getsession (). Getattribute ("user")! = Null) {chain.dofilter (request, response); возвращаться; } // 1. Получить cookie of Authlogin, принесенный пользовательской строкой value = null; Cookie cookie [] = request.getcookies (); for (int i = 0; cookie! = null && i <cookies.length; i ++) {if (cookie [i] .getName (). equals ("autologin")) {value = cookie [i] .getValue (); }} // 2. Получите имя пользователя и пароль в cookie if (value! = Null) {string username = value.split ("//") [0]; String password = value.split ("//.") [1]; // 3. Позвоните DAO, чтобы получить соответствующий пароль пользователя userdao dao = new userdao (); Пользователь пользователь = dao.find (имя пользователя); String dbpassword = user.getPassword (); // 4. Проверьте, соответствует ли пароль MD5, который пользователь соответствует паролю в базе данных. Если он соответствует, он автоматически войдет в систему if (password.equals (webutils.md5 (dbpassword))) {request.getsession (). Setattribute ("user", user); }} chain.dofilter (запрос, ответ); } public void destress () {} public void init (FilterConfig FilterConfig) Throws ServletException {}} Если вы хотите отменить автоматический вход, вы можете удалить автоматический вход в систему, когда пользователь выходит из системы. Основной код заключается в следующем:
пакет me.gacl.web.controller; import java.io.ioexception; import javax.servlet.servletexception; импорт javax.servlet.http.cookie; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservelcevlectrevlet; javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; открытый класс Cancelautologinservlet Extends httpservlet {public void Doget (httpservletrequest, httpservest response) request.getSession (). removeAttribute ("user"); // Удалить файл cookie, который автоматически входит в систему removeautologickookie (запрос, ответ); // удалить на страницу входа после входа в систему request.getRequestDispatcher ("/login.jsp"). } /** * @method: removeautologickookie * @description: удалить автоматическое печенье для входа в систему, * способ удаления печенья в Javaweb - создать новый печень Запрос * @param response */private void removeautologickookie (httpservletrequest, httpservletresponse response) {// Создать cookie с названием Autologin cookie cookie = new cookie («Autologin», «); // установить период долидности куки и командовать rowserte cookie cookie. cookie.setpath (requent.getContextPath ());Выше приведено несколько общих сценариев применения фильтров, и я надеюсь, что они будут полезны для каждого обучения.