1 做了网上书店的项目,碰到很多问题,在页面里注册信息的时候,输入中文名称的时候,提交注册,
数据库中显示注册的信息为问号,在页面显示信息为乱码。
在页面查询图书信息的时候也不能检索到数据库中的中文信息,英文的都ok
好像处理有两种办法,一种是用filter,不知道filter怎么用,从来没用过。。第二种是设置页面的编码
有两个对象都有这样的方法
  request.setCharacterEncoding("");
response.setCharacterEncoding("");
我不太清楚这两个对象的本质,就是我在页面该怎么设置呢?什么时候用request设置,什么时候用response设置
或者都用? 2 另外关于struts里的问题,
form里有三个属性 ,
private String way = null;
private String keyword = null;
private int page = null;
我在页面提交的时候只给page提交了信息,另外两个属性没有提交任何数据
在同一个session的页面中通过form来取得这三个参数的时候会是什么情况?好像前面的没提交信息的传递的是"null"这样一个字符串
这怎么解释呀,我不太明白

解决方案 »

  1.   

    1. 乱码的解决还是用filter比较好.
         你所提交的一些表单上的参数(比如2中的way,keyword,page)都会被放到request对象里面去.对这些对象的处理(比如说是保存)会在一个servlet(在struts中也许是一个action)中做处理,象save()这样的处理.那么在那些参数到达这个servlet或是action之前,你可以对参数进行编码的转化,转化成数据库能识别的编码,存到数据库中就不会乱码.
         你想给用户展示一些信息的时候,其实你是把这些信息放到response对象中去,其实这些对象是你的action的返回结果,但是这里返回的是数据库中信息的编码,在页面上的编码格式如果不一样,可能出现乱码,那么你还要转化编码,只是和上面的反一下,这样让这些汉字信息在页面上能正确显示.
         总之,request对于servlet来说是输入,response是输出.这方面可以多找些资料看看,光就这么一说也很难说的清楚.2. page都能取的到值,说明你的流程是对的了.那么比较一下way,keyword和它有什么不同就是了.比如说在action中page有setter/getter方法,而way,keyword的你忘记写了.或是页面是 text 的 name属性你没和action中的一致.
      

  2.   

    1。乱码当然用过滤器解决最好 
    package com.filter;import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;public class ChineseEncoding implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("GBK");
    response.setCharacterEncoding("GBK");
    chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException {
    // TODO 自动生成方法存根 }}
    web.xml 配置,加上下面代码<filter>
    <filter-name>encoding</filter-name>
    <filter-class>
    com.filter.ChineseEncoding
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    2。一个JavaBean(FormBean)对象,如果没有给他的属性赋值,取值当然就是空(null)了
      

  3.   


    不是空哦是“null” 是个字符串。
      

  4.   

    第一个问题可以在页面上设置
    <%@   page   contentType="text/html;charset=gbk"%><%
    request.setCharacterEncoding("gbk");
    %> 
    但是每个页面都要加,就比较麻烦,使用过滤器比较好,对所有的页面都过滤,一个请求会先走过滤器把乱码处理掉,然后再到BEAN 或者STRUTS的ACTION里。对于怎么加就不做说明了,上面的方法已经有了。
    另外提供一个比较简单的设置
     <filter>
           <filter-name>Set Character Encoding</filter-name>
           <filter-class>filters.SetCharacterEncoding_Filter</filter-class>
                 <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
                </init-param>
    </filter>