j2ee基础知识点笔记(二) - 15841333625/Java GitHub Wiki

中文编码

GB2312 -> GBK -> GB-18030 中文编码,每个字符2字节
Unicode
UCS 每个字符4字节
UTF-8 英文1字节,法语等2字节,中文等3字节

Post 处理中文乱码

发送的编码为GBK时

request.setCharacterEncoding("GBK");

Get 处理中文乱码

发送时浏览器将中文字符转码,将GBK编码转为ascii码,服务器端则以utf-8转码,所以乱码

String queryString = request.getQueryString();
queryString = URLDecoder.decode(queryString, "UTF-8");
String username = request.getParameter("username");
username = new String(username.getBytes("GBK"), "UTF-8");

String s.getBytes("GBK");
// 字符串内存中默认编码为4字节Unicode编码,通过电脑中的Unicode到GBK的映射转换为GBK编码

Filter

public calss AuditFilter implements Filter {
  private FilterConfig config;
  public void destroy() {}
  public void init(FilterConfig config) throws ServletException {
    this.config = config;
  }
  public void doFilter(ServletRequest request, ServletResponse response, HttpServletFilterChain chain) throws ServletException, IOException {
    long start = System.currentTimeMillis();
    chain.doFilter(request, response);
    long end = System.currentTimeMillis();
    config.getServletContext().log();
  }
}

如果有多个过滤器都符合条件,执行顺序为filter-mapping的顺序

<web-app>
  <filter>
    <filter-name>f1</filter-name>
    <filter-class>MyFilter</filter-class>
    <init-param>
      <param-name>a</param-name>
      <param-value>8</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>f2</filter-name>
    <filter-class>MFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter>f1</filter>
    <servlet-name>s1</servlet-name>         ###只过滤s1组件
  </filter-mapping>
  <filter-mapping>
    <filter>f2</filter>
    <url-pattern>/</url-pattern>
    <dispatcher>REQUEST</dispatcher>        ###FORWARD, INCLUDE, ERROR 只对某一种请求起作用
  </filter-mapping>

  <listener>
    <listener-class>MyAppListener</listener-class>
  </listener>

  <servlet>
    <servlet-name>s1</servlet-name>
    <servlet-class>com.abc.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet>s1</servlet>
    <servlet-pattern>/a</servlet-pattern>
  </servlet-mapping>
</web-app>

Listener

Interface ServletContextListener  
default void 	contextDestroyed(ServletContextEvent sce)
default void 	contextInitialized(ServletContextEvent sce)  //应用执行的第一个函数
import javax.servlet.*

public class MyAppListener implements ServletContextListener {
  public void contextInitialized(ServletContextEvent sce) { // 应用程序初始化
    System.out.println("Hello world!");
  }
  puclic void contextDestroyed(ServletContextEvent sce) {
  }
}
⚠️ **GitHub.com Fallback** ⚠️