确保接收和输出的数据不出现乱码。需要对request和response进行转码
request.setCharacterEncoding(charset); response.setCharacterEncoding(charset); response.setContentType("text/html;charset=" + charset);
但这样编写容易出现书写错误,而且当需要改变编码时,需要逐个替换。为保证编码书写的一致性和后期的可维护性,可以把编码定义在web.xml文件中
配置Servlet初始化参数
在web.xml文件中对应Servlet节点中定义init-param子节点,其中param-name为参数的名称,param-value为参数的值。一个Servlet可以配置多个初始化参数
<servlet> <servlet-name>first</servlet-name> <servlet-class>com.cashop.servlet.FirstServlet</servlet-class> <init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param> </servlet>
Servlet中获取初始化参数
在Servlet中声明一个私有变量用于接收初始化参数
Private String charset;//用于接收初始化参数的变量
重写Servlet的无参init方法,在方法中通过ServletConfig对象的getInitParameter方法获取初始化参数,方法的参数为web.xml文件中init-param中param-name子节点的值
@Override public void init() throws ServletException { // 调用父类方法在前 super.init(); }
如果要使所有的Servlet的字符编码一致,可以在web.xml中定义全局的初始化参数来实现
配置全局初始化参数
Context-param节点用于配置全局初始化参数,param-name为参数名,param-value为参数值,一个项目可以配置多个初始化参数。
<context-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </context-param>
Serlvet中获取全局初始化参数
使用全局对象的getInitParameter方法可以获取全局的初始化参数,在Servlet中可以通过getSerlvetContext()方法获取全局对象