美文网首页
Web学习笔记 - 第013天

Web学习笔记 - 第013天

作者: 迷茫o | 来源:发表于2017-02-21 19:28 被阅读0次

Servlet初始化属性

方法

注解

@WebServlet(urlPatterns="/hello", loadOnStartup=1,
        initParams={
                @WebInitParam(name="username", value="kygo"),
                @WebInitParam(name="age", value="20")
        })

web.xml配置

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.kygo.servlets.HelloServlet</servlet-class>
    <init-param>
      <param-name>username</param-name>
      <param-value>admin</param-value>
    </init-param>
    <init-param>
      <param-name>password</param-name>
      <param-value>123456</param-value>
    </init-param>
  </servlet>
拿到初始化的属性
    private ServletConfig config;

    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(config.getInitParameter("username"));
        System.out.println(config.getInitParameter("password"));
    }

过滤器

例子

例子1:编码

/**
 * 处理请求和响应编码的过滤器
 * @author kygo
 *
 */
/*@WebFilter(
    urlPatterns="/*",
    initParams={@WebInitParam(name="encoding", value="utf-8")}
)*/
public class CharacterEncodingFilter implements Filter {
    private String defaultEncoding = null;
    
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        if (defaultEncoding != null) {
            req.setCharacterEncoding(defaultEncoding);
            resp.setCharacterEncoding(defaultEncoding);
        }
        chain.doFilter(req, resp);
    }
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        defaultEncoding = filterConfig.getInitParameter("encoding");
    }

}

web.xml配置

 <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>com.kygo.filters.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
  </filter>
  
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

例子2:处理聊天的脏话

public class MalContentFilter implements Filter {

    private static class MalContentAutoHandler extends HttpServletRequestWrapper {
        private ServletRequest request;
        
        public MalContentAutoHandler(HttpServletRequest request) {
            super(request);
            this.request = request;
        }
        
        @Override
        public String getParameter(String name) {
            String originValue = request.getParameter(name);
            if (name.equals("message")) {
                return originValue.replaceAll("fuck|shit|[日操干]", "*");
            } else {
                return originValue;
            }
        }
        
    }
    
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        MalContentAutoHandler a = new MalContentAutoHandler((HttpServletRequest) req);
        chain.doFilter(a, resp);
    }

}

web.xml配置

 <filter>
    <filter-name>malContentFilter</filter-name>
    <filter-class>com.kygo.filters.MalContentFilter</filter-class>
  </filter>
  
  <filter-mapping>
    <filter-name>malContentFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>
字符串倒转
    public static String reverse(String str) {
/*      StringBuilder sb = new StringBuilder();
        for (int i = str.length() - 1; i >= 0; i--) {
            char ch = str.charAt(i);
            sb.append(ch);
        }
        return sb.toString(); */
/*      return new StringBuilder(str).reverse().toString(); */      
        
        assert str != null;
        if (str.length() > 1) {
            return reverse(str.substring(1)) + str.charAt(0);
        }
        return str;
    }

自定义jsp标签

例子:显示时间
定义一个显示时间的类

package com.kygo.tags;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class ShowTimeTag extends SimpleTagSupport {
    private String format;
    
    public void setFormat(String format) {
        this.format = format;
    }
    
    @Override
    public void doTag() throws JspException, IOException {
        JspWriter writer = getJspContext().getOut();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        writer.write(LocalDateTime.now().format(formatter));
    }
}

在WEB-INF目录下创建mytags.tld文件

<?xml version="1.0" encoding="utf-8"?>

<taglib>
    <tlib-version>0.1</tlib-version>
    <jsp-version>2.0</jsp-version>
    <uri>http://www.kygo.com/core</uri>
    
    <tag>
        <name>showTime</name>
        <tag-class>com.kygo.tags.ShowTimeTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>format</name>
            <required>true</required>
        </attribute>
    </tag>

</taglib>

jsp页面

<%@ page pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="k" uri="http://www.kygo.com/core" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <k:showTime format="yyyy-MM-dd hh:mm:ss"/>
    </body>
</html>

例子2:字符串倒转方法标签
myfunctions类

package com.kygo.functions;

public class MyFunctions {
    
    private MyFunctions() {
        throw new AssertionError();
    }
    
    public static String reverse(String str) {
/*      StringBuilder sb = new StringBuilder();
        for (int i = str.length() - 1; i >= 0; i--) {
            char ch = str.charAt(i);
            sb.append(ch);
        }
        return sb.toString(); */
/*      return new StringBuilder(str).reverse().toString(); */      
        
        assert str != null;
        if (str.length() > 1) {
            return reverse(str.substring(1)) + str.charAt(0);
        }
        return str;
    }
    
    public static void main(String[] args) {
        System.out.println(reverse("abcdefghigk"));
    }
}

mytags.tld

<?xml version="1.0" encoding="utf-8"?>

<taglib>
    
    <function>
        <name>reverse</name>
        <function-class>com.kygo.functions.MyFunctions</function-class>
        <function-signature>
            java.lang.Sting reverse(java.lang.String)
        </function-signature>
    </function>
    
</taglib>

相关文章

网友评论

      本文标题:Web学习笔记 - 第013天

      本文链接:https://www.haomeiwen.com/subject/saiuwttx.html