我的目的是想把jsp页面共通的设置放在一个文件里,然后其它文件使用include指令和include标签包含它,这样修改比较方便。
但是关于字符集发现设置包含文件没有用,因为jsp翻译时不会理会被包含文件的contentType设置。
但是我实在不想再每个页面中都设置<%@page contentType="text/html; charset=gb2312" %>
注意:如果不使用国际化的方法(即所有中文输出采用属性文件key值对应的方法,没办法,目前为了快都把中文直接写在jsp里了。),有没有别的解决方案?
谢谢解答!
但是关于字符集发现设置包含文件没有用,因为jsp翻译时不会理会被包含文件的contentType设置。
但是我实在不想再每个页面中都设置<%@page contentType="text/html; charset=gb2312" %>
注意:如果不使用国际化的方法(即所有中文输出采用属性文件key值对应的方法,没办法,目前为了快都把中文直接写在jsp里了。),有没有别的解决方案?
谢谢解答!
如果有include 的多个页面要互相传值怎么办
这个不好
除非你的其他页面不需要传值
而且系统使用的是struts2框架,页面间的传值如果参数简单就放到配置文件中,复杂一般使用session。
系统是禁止jsp之间直接跳转的,所有页面的跳转一定要经过控制器,即使是简单的返回动作。顺便说一下,我参照网上所说的过滤器设置方法但不是不知道为什么不行。
大家帮我分析一下,谢谢!具体如下:web.xml中增加如下语句
<filter>
<filter-name>encoding</filter-name>
<filter-class>comtools.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>其中comtools.EncodingFilter的代码如下(相当于拦截器拦截所有命令将字符集设置为web文件配置的字符集)
package comtools;
import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class EncodingFilter implements Filter
{
private String targetEncoding = "gb2312";
protected FilterConfig filterConfig;
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
this.targetEncoding = config.getInitParameter("encoding");
}
public void doFilter(ServletRequest srequest, ServletResponse sresponse,FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)srequest;
request.setCharacterEncoding(targetEncoding);//把请求用指定的方式编码
// 把处理发送到下一个过滤器
chain.doFilter(srequest,sresponse);
}
public void destroy()
{
this.filterConfig=null;
}
public void setFilterConfig(final FilterConfig filterConfig)
{
this.filterConfig=filterConfig;
}
}
我感觉这样应该没有问题了,但页面依旧是乱码,只有设置了contentType才有效,有经验的帮有请帮忙分析一下,谢谢!
一个两个可以
100 几百呢??
include会造成页面速度变慢
试想:
读一个页面 快
or
读n个页面 快
如果页面多的话
问题1:
假使MVC采用struts2(1也行吧),页面之间传递参数您是使用什么方案解决的?
我的理解一般来说页面之间传递业务参数都是比较少的,一般都是传递一个或少许主键值,在下一个页面进行持久层访问后再把需要的数据取出。
struts1一般是放到actionform里,但我认为那样代码耦合较高,因此我一般是放在struts2的配置文件中传递参数(当然参数值是动态,只是参数个数是固定的)。对于有些业务页面,比如复杂查询,因为输入的查询条件很多,查询页面和结果页面是2个页面,当查询页面跳转结果页面时就会用到session来传递查询参数,但是您可能误会了,当系统离开结果页面时我们会把session中不再用的值清除。所以不存在你担心的什么100几百的问题。
如果您认为我的设计有问题,那么请问您的页面之间跳转时参数是如何传递的?请赐教。
另外小弟有些疑惑,难道session就不能用了吗?典型的网络购物车模式,这么多页面的数据需要保留,难道不用session?用户在多页面之间输入的数据如何保留?我以为,关键是要在适当的地方吧不需要的参数值及时从session里清除即可。如果您有更好的方案,不胜赐教。
问题2:
请问tiles框架是不是没有采用类似include的方法(我指的是后台代码),它是高度集成页面的一种前台显示框架方案。
如果您觉得包含页面不可取,那您是如何解决每个页面都需要相同页头、页脚代码重复书写问题的?(不会每个页面都写这些代码吧,呵呵)
请赐教,谢谢。
2 而且,在你的页面出现多个编码类型时,只是唯一的方法,比如大部分是gb2312,可有一部分是UTF-8至于filter等解决方法,看上去也不错,但我个人不推荐
我的顾虑不是每页加一行<%@page contentType="text/html; charset=gb2312" %> ,这个没有问题的,拷贝粘贴即可。
但是如果哪天系统想采用utf-8编码,那岂不是所有页面都要改一遍?可能你会说使用某个文件编辑工具统一改,可毕竟这不是标准的解决方案(不是继承关系,谁也不敢说都改的对),还是免不了要测试一遍。各位做过实际项目的朋友谈谈自己的解决方案?谢谢!