# servlet_web **Repository Path**: GENDALI/servlet_web ## Basic Information - **Project Name**: servlet_web - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-07-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Servlet练习 ### 注解Servlet ````java //扫描servlet @ServletComponentScan public class SevletWebApplication {} //继承HttpServlet并添加Servlet注解 @WebServlet(urlPatterns = "/login") public class LoginAction extends HttpServlet{} ```` ### Filter 使用 ````java @WebFilter(urlPatterns = "/*") public class EncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init"); } @Override public void destroy() { System.out.println("destroy"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //设置request字符编码 request.setCharacterEncoding("utf-8"); //设置response字符编码 response.setContentType("text/html;charset=utf-8"); filterChain.doFilter(servletRequest,servletResponse); } } ```` ### Listener使用 #### 初始化datasource全局参数 servlet调用 ````java //定义listener ServletContext 这是值 初始化全局参数 @WebListener() public class DataListener implements ServletContextListener { private ServletContext context = null ; @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("init lisssssssssssssssssssssssssss"); context = sce.getServletContext(); context.setAttribute("dataSource","8869988"); } @Override public void contextDestroyed(ServletContextEvent sce) { context.removeAttribute("dataSource"); } } //servlet 调用 @WebServlet(urlPatterns = "/encoding") public class EncodingAction extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = getServletContext(); String dataSource = (String) servletContext.getAttribute("dataSource"); String data = "中国"; resp.getWriter().write(data+dataSource); } //获取 ServletContext @Override public ServletContext getServletContext() { return super.getServletContext(); } } ```` #### HttpSessionListener获取在线人数 ````java @WebListener public class SessionLisener implements HttpSessionListener { int i = 0; @Override public void sessionCreated(HttpSessionEvent se) { i++; se.getSession().getServletContext().setAttribute("count", i); } @Override public void sessionDestroyed(HttpSessionEvent se) { i--; se.getSession().getServletContext().setAttribute("count", i); } } //获取count @WebServlet(urlPatterns = "/session") public class SessionCountAction extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = super.getServletContext(); Object count = servletContext.getAttribute("count"); String s = String.valueOf(count); resp.getWriter().write("在线人数"+s); } } ```` ### Interceptor使用 #### 登录当前session 中放入角色 ````java @WebServlet(urlPatterns = "/login") public class LoginAction extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); HttpSession session = req.getSession(); System.out.println("==============" + session + "================"); if (!username.equals("") && !password.equals("")) { //登录用户名ww 获取角色 if (username.equals("ww")) { Set strings = new HashSet<>(Arrays.asList("admin", "emp")); session.setAttribute("roles", strings); } resp.sendRedirect("/views/main.html"); } else { resp.sendRedirect("/views/404.html"); } } } ```` #### 实现 HandlerInterceptor ````java public class AuthorityInterceptor implements HandlerInterceptor { /** *<在请求方法之前调用> * NO_INTERCEPTOR_PATH * *@param * *@return *@Author WANG.SONG. */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getServletPath(); ResourceHttpRequestHandler httpRequestHandler = (ResourceHttpRequestHandler)handler; if (path.matches(Const.NO_INTERCEPTOR_PATH)) { //不需要的拦截直接过 return true; } else { // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等 System.out.println("===================================="); Set roles = (Set) request.getSession().getAttribute("roles"); if (!CollectionUtils.isEmpty(roles) && roles.contains("admin")){ return true; } return false; } } /** *<请求处理之后调用> *@param * *@return *@Author WANG.SONG. */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** *<在整个请求结束之后调用> *@param * *@return *@Author WANG.SONG. */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } } public class Const { // 不验证URL anon:不验证/authc:受控制的 public static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)|(login)|(index)).*"; } ```` #### 注册 ````java //配置类 @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录 registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**"); } //自定义拦截器 @Bean public AuthorityInterceptor AuthorityInterceptor() { return new AuthorityInterceptor(); } } ````