首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring MVC乱码页面输出

问Spring MVC乱码页面输出
EN

Stack Overflow用户
提问于 2016-08-03 22:05:03
回答 1查看 96关注 0票数 0

我正在迁移到Spring MVC 4.1/Tomcat 8,Java 8,并且只在一个特定的页面上得到了完全乱码的页面输出。这并没有发生,在迁移前,模板和控制器都没有作为迁移的一部分进行更改。这个问题既发生在开发环境中,也发生在测试服务器上。

控制器设置基本如下:

代码语言:javascript
复制
public abstract class AbstractContextSkillController extends BaseProfileController{

    public String skill(
            SearchProfileEntityVO vo,
            ModelMap model,
            NativeWebRequest request){

        [...]

        return "/profile/frm_skills";
    }

@Controller
@RequestMapping("/*/??_??/account/user/profile/edit/skill")
public class InContextSkillController extends AbstractContextSkillController {

    @RequestMapping(method = RequestMethod.GET)
    public String skill(
            ModelMap model,
            NativeWebRequest request){

        if(myCondition) //if false => normal page output, if true => garbled
            return "forward:" + URLUtils.getBasePath(request) + "/account/user/profile/edit/skill/med";

        SearchProfileEntityVO vo = new SearchProfileEntityVO();

        return super.skill(vo, model, request);

    }

@Controller
@RequestMapping(value={"/*/??_??/account/user/profile/edit/skill"})
public class CustomInContextSkillController extends AbstractContextSkillController {

    @RequestMapping(method = RequestMethod.GET, value="/med")
    public String skill(
            ModelMap model,
            NativeWebRequest request){

        SearchProfileEntityVO vo = new SearchProfileEntityVO();

        return super.skill(vo, model, request); // => garbled

    }

我修改了CustomInContextSkillController以返回与InContextSkillController完全相同的内容,但仍然得到乱码输出,唯一的区别似乎是不同的入口点,这让我感到惊讶。

所有的模板都是UTF-8格式。我删除了Sitemesh以返回纯页面输出并消除潜在差异。如果我保持Sitemesh处于活动状态,则只有表示此模板的页面部分才会产生乱码输出。如果我返回一个新的模板,只有HELLO WORLD,它也会作为乱码返回。

我尝试了各种方法,假设这与转发编码错误有关。因此,我首先尝试将字符编码过滤器添加到onStartup中,并尝试将其添加到

代码语言:javascript
复制
@Component
@Order(10)
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
protected void beforeSpringSecurityFilterChain(ServletContext servletContext){
    CharacterEncodingFilter characterEncoding = new CharacterEncodingFilter();

    FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter", characterEncoding);
    encodingFilter.setInitParameter("encoding", "UTF-8");
    encodingFilter.setInitParameter("forceEncoding", "true");
    encodingFilter.addMappingForUrlPatterns(null, false, "/*");
    encodingFilter.setAsyncSupported(isAsyncSecuritySupported());

    super.beforeSpringSecurityFilterChain(servletContext);


@Order(1)
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
public void onStartup(ServletContext servletContext) throws ServletException {

    CharacterEncodingFilter characterEncoding = new CharacterEncodingFilter();
    characterEncoding.setEncoding("UTF-8");
    characterEncoding.setForceEncoding(true);

    registerServletFilter(servletContext, characterEncoding);

    super.onStartup(servletContext);

我使用Freemarker作为模板语言。有什么建议吗?我用完了

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-09 03:46:25

在我的例子中,net.sf.ehcache.constructs.web.filter.GzipFilter才是罪魁祸首。改变了从web.xml到JavaConfig的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38745904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档