想要從前端表單中接收一個作者,然後根據作者名字查詢該作者的全部作品。
------------<br/>
<form method="get" action="queryBooks">
作者:<input type="text" name="bookAuthor">
<input type="submit" value="查詢">
</form>
一直查詢的結果都是空。可是調試發現controller已經接收到了數據。控制檯打印接收到的作者名字,輸出的是??????。
是編碼問題。可以通過添加一個編碼過濾器來解決。
這裏我採用的是配置類的形式。
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 添加UTF-8過濾器
* @param servletContext
* @param filter
* @return
*/
@Override
protected FilterRegistration.Dynamic registerServletFilter(ServletContext servletContext, Filter filter) {
FilterRegistration.Dynamic filterRegistration = servletContext.addFilter("encodingFilter",
new CharacterEncodingFilter());
filterRegistration.setInitParameter("encoding", "UTF-8");
filterRegistration.setInitParameter("forceRequestEncoding", "true");
filterRegistration.setInitParameter("forceResponseEncoding", "true");
filterRegistration.addMappingForUrlPatterns(null, true, "/*");
return super.registerServletFilter(servletContext, filter);
}
}
xml形式
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>