javaWeb_全站编码

目的 : 实现javaweb项目的全站编码问题

需要解决的问题 : 在何时进行编码问题的解决, 在何处进行编码问题的解决, 才用什么方法进行解决

设计思路 : 在Filter进行全站的编码转换, 对于GET请求 : 使用装饰者模式(是你有你一切拜托你), 修改Request.getParameter()方法, 在getparameter()方法进行编码的转换; 对于POST请求直接在FIilter进行过转换即可.

实际代码 :

  1. Filter文件

package com.theangryz.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        HttpServletRequest req = (HttpServletRequest) request;
        req.setCharacterEncoding("utf-8");
        EncodingRequest encodingRequest= new EncodingRequest(req);
        if (req.getMethod().equals("GET")){ //get请求
            chain.doFilter(encodingRequest, response);
        }else if (req.getMethod().equals("POST")){  //post请求
            chain.doFilter(req, response);
        }
    }

    @Override
    public void destroy() {

    }
}

  2. EncodingRequest文件(对于GET请求的处理)

package com.theangryz.filter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class EncodingRequest extends HttpServletRequestWrapper {    //采用装饰者模式
    private HttpServletRequest request;
    public EncodingRequest(HttpServletRequest httpServletRequest){
        super(httpServletRequest);
        this.request = httpServletRequest;
    }

    @Override
    public String getParameter(String name) {
        try {
            String str = new String(request.getParameter(name).getBytes("iso-8859-1"), "utf-8");
            return str;
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }
}

实际编写中遇到的问题 :

  1. 发现自己的GET请求已经通过UTF-8的方式进行编码了.

    解决 : Tomcat默认配置(配置文件 : /安装目录/conf/server.xml)使用ISO-8859-1进行编码, 自己不知道何时修改过配置文件修改成了UTF-8配置了. 所以没有转换的必要了.

  2. 重写getparameter()方法的时候, 参数理解错误了. getParameter(String name)入参name指的是请求中的参数名称, 需要使用 String str = request.getRequest(name);, 而不是直接name.getBytes("");

  解决 : String str = request.getParameter(name); return new String(str.getBytes("iso--8859-1"), "utf-8");

原文地址:https://www.cnblogs.com/gogotao/p/11965350.html

时间: 2024-08-03 20:54:01

javaWeb_全站编码的相关文章

javaweb的Filter过滤器设置全站编码

FIlter配置全站编码有一种方法是重写getParameter方法,也就是继承HttpServletRequestWrapper在重写getParameter方法,还有一种就是如下: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 将requese进行强转 HttpServletR

JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存

以前我们设置servlet的request和response的编码需要在每个servlet都设置,如果Servlet很多,显得很麻烦,现在我们可以用过滤器很简单的实现这个功能. 还有页面缓存,如果我们的网页是静态的,图片和内容基本上很少变化或者不变化的,我们就可以告诉客户端这个页面你缓存多久~以达到节省流量的目的. 设置全站编码: 先写好Filter:CharacterFilter.java: package cn.hncu.pubs; import java.io.IOException; i

springMVC+jpa配置之简单案例

搭建springMVC+jpa的亲身经历,看着网上的博客,自己摸索着搭建框架结果错误一大堆.现在把流程走一遍,以便以后方便查看. 其中我遇到这样的一个问题:直接启动tomcat运行保存实体能通过,但是通过单元测试就报一下错误: Caused by: javax.validation.ValidationException: Unable to instantiate Configuration. 解决方法: 在persistence.xml中添加这个<property name="java

JavaWeb之Filter快速入门(十七)

Filter 1. 过滤器简介 1. 过滤器是Java Web三大组件之一,它在很多方面都与Servlet相似 2. 过滤器可以理解成拦截器,其实过滤器的代码是环绕在被访问资源的前后,为被访问的资源提供增强的作用(比如过滤器就像楼层中保安,所有人员经过楼层必须经过保安) 3. 过滤器的应用场景: 1). 执行目标资源之前做预处理工作,例如设置编码,这种试通常都会放行,只是在目标资源执行之前做一些准备工作 2). 通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用 3)

JavaWeb之项目实战-网上书店(二十一)

简介 作为这篇博客花费了些许时间练习和整理,最终能掌握,也算上没有白白费时间花在这个项目上面.很庆幸自己坚持把这个项目搞定,虽然这个项目对于实际毫无意义,但对于学习阶段是算作对我的提升吧 关于发布博客我会写出项目历程,第二篇会提炼出重要的控制层部分.总体都是为了巩固和复习使用 还有最后马上要过年了,在此祝大家新年快乐 开发前奏 回顾 Dao设计模式:泛型反射 注解反射@[email protected] Servlet3.0新特性 注解支持/part文件上传/web片段/Cookie的httpO

值栈的学习

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="c" uri="http://java.sun.co

JavaWeb-网站在线用户信息、网站访问量以及管理踢出用户实例

转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 这个稍微比上个版本做得完善了一点,用了JavaBean来封装用户信息,添加了一个管理踢用户的功能. 上一个的用户访问量是通过监听request来统计的,在这个实例中,我们也可以通过过滤器来实现统计网站访问量. 直接看源码吧,感觉没多少要讲的,我习惯把解释写在代码中. 部分源码 index.jsp: <%@ page language="java" import=&

JavaWeb-19 (JDBC之过滤器Filter)

JavaWeb-19 JDBC之过滤器Filter 一.Filter过滤器概述 Filter(过滤器):Web三大组件之一,就是对目标资源进行请求前或请求后. Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 实际中:过滤器就相

【JavaMailWeb】用户注册通过邮箱激活案例

转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 前面刚刚学习了JavaMail技术,现在来应用到项目中试试~ 网站用户注册: 主要实现如下两个功能: 1.用户在网站上注册完成后给用户发一封邮件. 2.用户通过邮件激活后才可以登录. 思路: 首先需要一个思路: 用户在前台点击注册,向servlet提交请求,把用户提交过来的信息封装成一个JavaBean(需要的信息有name,pwd,email这3个是用户填写的,我们帮用户生成的