在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>技术论坛>JSP>F0062945 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入

论坛首页
|--web开发
   |--ASP
   |--JSP
   |--ASP.net
   |--DHTML
   |--RUBY
|--软件开发
   |--C++
      |--Code here
   |--JAVA
   |--VB
   |--Delphi
   |--XML
|--.net技术
   |--C#
   |--VB.net
|--Yup开发组
|--站务&投诉
   |--站长专区
|--硬件&网络
|--休息室
|--数据库技术
 进入精华区 我要发言



 能讲将中文的解决方法back to JSP forum  
作者:站门,7级分数:0
日期:2003/5/13 19:44:00类别:JSP, 技术问题
回复:16次浏览:2064次
状态:无分贴

1.我现在对中文插入数据库只用:
String getter = new String(request.getParameter("getter").getBytes("8859_1"));
这个转换是不是有缺点?您有没有更好的bean?

2.您有没有能把留言内容里含的html语言屏蔽的bean。还有没有能控制下太长的css,比如:写很长,强制它回车,就不会破坏表格。

3.我想对留言的回车和空格处理一下。下面的代码有没有错:
        String message = rs.getString(2);
  String strTemp = "";//存放临时字符串
  int nStart = message.indexOf(13);//13为回车符的ASCII值
  while(nStart >= 0)
  {
    strTemp = message.substring(0,nStart) + "<br>" + message.substring(nStart+1);
    nStart = strTemp.indexOf(13);
    message = strTemp;
  }
  nStart = message.indexOf(" ");//空格
  while(nStart >= 0)
  {
    strTemp = message.substring(0,nStart) + " " + message.substring(nStart+1);
    nStart = strTemp.indexOf(" ");
    message = strTemp;
  }
  out.println(message);

我加入这一段以后,不知道什么原因,页面像网速很慢一样,没有响应,进行不下去,所以也看不到错误提示了,为什么?

4.我对相对路径不清楚,都是用绝对路径。不知道该怎么改。
这句话是Test.count的servlet,错了:
    RequestDispatcher rd = getServletContext().getRequestDispatcher("http://localhost:8080/examples/jsp/count/result.jsp");
      rd.forward(request, response);
错误提示:java.lang.IllegalArgumentException: Path http://localhost:8080/examples/jsp/count/result.jsp does not start with a "/" character

我把result.jsp放在:D:\Tomcat\webapps\examples\jsp\count
我把servlet放到:
D:\Tomcat\webapps\examples\WEB-INF\classes

reply[F0062945]
 



 
 re [1] 能讲将中文的解决方法JSP forum  
- miles03-05-14 11:45  

1。
  public String toGbForQueryDB(String s)
  throws UnsupportedEncodingException {
    try {
      byte[] bts = s.getBytes("iso-8859-1");
      return new String(bts,"GB2312");
    } catch(UnsupportedEncodingException ex) {
      throw new UnsupportedEncodingException("com.yuanyuansoft.lib.util.StringKit.toGb(): " + ex.getMessage());
    }
  }

  public String toIsoForDisplay(String s)
  throws UnsupportedEncodingException {
    try {
      byte[] bts = s.getBytes("GB2312");
      return new String(bts,"iso-8859-1");
    } catch(UnsupportedEncodingException ex) {
      throw new UnsupportedEncodingException("com.yuanyuansoft.lib.util.StringKit.toGb(): " + ex.getMessage());
    }
  }

这是我写的两个函数,分别用来入库处理和显示处理,你看看。另外,在叶面上要加charset=gb2312的语句,别忘了。

2。
  public String HTMLEncode (String s) {
    s = sk.replace(s,"&","&amp;");
    s = sk.replace(s,"<","&lt;");
    s = sk.replace(s,">","&gt;");
    s = sk.replace(s,"\"","&quot;");
    s = sk.replace(s,"  "," &nbsp;");
    s = sk.replace(s,String.valueOf((char)9)," &nbsp;");
    s = sk.replace(s,"\n","<br>");
    return s;
  }

css?break-work吧。我忘了。你可以搜一下msdn看看。
这里的sk.replace是我的自定义函数,用来替换一个字符串中所有出现的子串。

3。
意思差不多,但是有点凌乱,应该再好好组织一下。你这里可能是死循环了。你可以用System.out.println检查一下变量值情况。

4。
改成
/examples/jsp/count/result.jsp
其实这叫应用程序绝对路径。因为从/开始的。

reply[F0063169]
 



 
 re [2] 能讲将中文的解决方法JSP forum  
- 站门03-05-14 21:14  

1.非常感谢。
2.能不能把sk.replace函数也能我看看。谢谢。
3.好的,我看看,有问题再说。
4.这个我想详细问一下:

我按照/examples/jsp/count/result.jsp 写,不过还有问题:
错误提示:
type Status report
message /examples/jsp/count/result.jsp
description The requested resource (/examples/jsp/count/result.jsp) is not available.
如果把它改为/jsp/count/result.jsp,编译没错误,但整个程序出错了。

主要内容是简单算术,index.jsp-->count.java-->result.jsp(中间用CountBean.java)
index.jsp和result.jsp放到:D:\Tomcat\webapps\examples\jsp\count
count.class和CountBean.class放到:D:\Tomcat\webapps\examples\WEB-INF\classes
没有错误提示,可能是逻辑错误,或者是我在servlet中写bean实例化有问题,或者重定向有问题。



reply[F0063360]
 



 
 re [3] 能讲将中文的解决方法JSP forum  
- 站门03-05-14 21:16  

servlet的代码:(count.java)
package Test;
import Test.CountBean;
import java.net.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class count extends HttpServlet{
  class Parameters{
    HttpServletRequest request;
    HttpServletResponse response;
  }
  public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    String nul1 = request.getParameter("num1");
    int rnum1 = Integer.parseInt(nul1.toString());
    String nul2 = request.getParameter("num2");
    int rnum2 = Integer.parseInt(nul2.toString());
    String radion = request.getParameter("radiobutton");
    doMethod(rnum1,rnum2,radion);
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/jsp/count/result.jsp");//******************
      rd.forward(request, response);

  }
  protected void doMethod(int num1,int num2,String radion)throws ServletException,IOException{
    CountBean countbean = new CountBean();//*********************
    int result;
    if(radion.equals("add")){
      result = num1 + num2;
      countbean.setResult(result);
    }else if(radion.equals("minus")){
      result = num1 - num2;
      countbean.setResult(result);
    }else if(radion.equals("multiply")){
      result = num1 * num2;
      countbean.setResult(result);
    }else if(radion.equals("divide")){
      result = num1 / num2;
      countbean.setResult(result);
    }
  }
}

reply[F0063362]
 



 
 re [4] 能讲将中文的解决方法JSP forum  
- 站门03-05-14 21:17  

CountBean.java代码:
package Test;
import java.io.*;
public class CountBean{
int Result;
public int getResult(){
return this.Result;
}
public void setResult(int value){
this.Result = value;
}
}


result.jsp代码:
<%@ page contentType = "text/html;charset=gb2312"%>
<jsp:useBean id="countdata" class="Test.CountBean" scope="request" />
<html>
<body>
<%= countdata.getResult()%>
</body>
</html>

从index提交后,到http://localhost:8080/examples/servlet/Test.count这一页,页面显示0,无论我输入多少都为0,而且没有重定向到http://localhost:8080/examples/jsp/count/result.jsp ,还是在http://localhost:8080/examples/servlet/Test.count这一页显示0。我打印了传过来的数据,能出来,应该没问题。




reply[F0063364]
 



 
 re [5] 能讲将中文的解决方法JSP forum  
- miles03-05-15 13:42  

你这里没有重定向,而是dispatch了。也就相当于servlet内部执行了jsp,所以地址栏不变的。这和asp里的server.transfer/server.execute一个道理。

你的CountBean范围是当前request,每次请求都是新的,所以数字不会变。如果要统计,可以弄成session的scope,在servlet里面也从session取用。

reply[F0063525]
 



 
 re [3] 能讲将中文的解决方法JSP forum  
- miles03-05-15 13:37  

  public String replace(String s, String find, String replacewith) {
    String[] chips = split(s , find);
    StringBuffer sreturn = new StringBuffer();
    int len = chips.length;
    if(len < 1)  return "";
    sreturn.append(chips[0]);
    for(int i=1;i<len;i++) {
      sreturn.append(replacewith);
      sreturn.append(chips[i]);
    }
    return sreturn.toString();
  }


这里应该还是路径什么的设置问题。在仔细看看,多试试。很难说是哪里问题。

reply[F0063522]
 



 
 re [4] 能讲将中文的解决方法JSP forum  
- 站门03-05-16 10:41  

谢谢,现在可以了,主要是没有在if里面都加request.setAttribute("countdata", countbean); 这句,所以只有选最后一个才能运行,现在我全都加上了,都可以了。太高兴了。
不过我还是不明白:为什么要加这句?有什么作用?因为result.jsp根本没有getAttribute啊
能讲讲scope中request和session的区别吗?我这里用request能行,用session好象不行。

reply[F0063716]
 



 
 re [5] 能讲将中文的解决方法JSP forum  
- 站门03-05-18 09:31  

1.您的中文解决函数中的UnsupportedEncodingException需要导入那些类?
2.我把这两个函数放到bean,然后在jsp页面里用,但是出现乱码,我也在叶面上要加charset=gb2312的语句了,不知道哪里出错了。会不会是我直接查找中文“想”出现问题?
bean:
package Test;
import javax.servlet.*;
public class GbtoIso{
  public String toGbForQueryDB(String s)throws Exception {
    try {
      byte[] bts = s.getBytes("iso-8859-1");
      return new String(bts,"GB2312");
    } catch(Exception ex) {
      throw new Exception("com.yuanyuansoft.lib.util.StringKit.toGb(): " + ex.getMessage());
    }
    }

  public String toIsoForDisplay(String s)throws Exception {
    try {
      byte[] bts = s.getBytes("GB2312");
      return new String(bts,"iso-8859-1");
    } catch(Exception ex) {
    throw new Exception("com.yuanyuansoft.lib.util.StringKit.toGb(): " + ex.getMessage());
    }
}
}

11.jsp(插入)
<html>
<body>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page language="java" import="java.sql.*"%>
<%@ page import = "java.io.*"%>
<%@ page import = "java.util.*"%>
<%@ page import = "java.sql.*"%>
<%@ page import = "javax.servlet.*"%>
<%@ page import = "javax.servlet.http.*"%>
<jsp:useBean id="TestBean" scope="page" class="DataBase.MyDbBean"/>
<jsp:useBean id="GbtoIsoBean" scope="page" class="Test.GbtoIso"/>
<%
String name = GbtoIsoBean.toGbForQueryDB(request.getParameter("getter"));
String message = GbtoIsoBean.toGbForQueryDB(request.getParameter("message"));
//String name = new String(request.getParameter("getter").getBytes("8859_1"));
//String message = new String(request.getParameter("message").getBytes("8859_1"));
//插入数据库中
TestBean.OpenConn("work","sa","");
String sql="insert into test(name,message) values('"+name+"','"+message+"')";
TestBean.executeUpdate(sql);
TestBean.closeStmt();
TestBean.closeConn();
%>
<a href = "12.jsp">12.jsp</a>
<form action = "12.jsp" method="post">
<input type = "submit">
</form>
</body>
</html>

12.jsp(读取)
<%@ page contentType = "text/html;charset=gb2312"%>
<html>
<body>
<%@ page language="java" import="java.sql.*"%>
<jsp:useBean id = "TestBean" scope = "page" class = "DataBase.MyDbBean"/>
<jsp:useBean id="GbtoIsoBean" scope="page" class="Test.GbtoIso"/>
<%
try{
TestBean.OpenConn("work","sa","");
String sql = "select * from test where name = '想' ";//会不会是查找这个中文出了问题?
ResultSet rs = TestBean.executeQuery(sql);
while(rs.next())
{
  out.println(GbtoIsoBean.toIsoForDisplay(rs.getString(1)+"<br>"));
  out.println(GbtoIsoBean.toIsoForDisplay(rs.getString(2)));
}
}catch(Exception e)
{
  System.out.println(e.getMessage());
}
TestBean.closeStmt();
TestBean.closeConn();
%>
</body>
</html>

reply[F0064112]
 



 
 re [6] 能讲将中文的解决方法JSP forum  
- miles03-05-19 10:51  

1。好像是java.io里面的。

2。你可以多试试。反正就这两个步骤,组合也没几种。加不加的都试验一下,就清楚了。编码问题的确麻烦,需要经验积累。

reply[F0064317]
 



 
 re [5] 能讲将中文的解决方法JSP forum  
- miles03-05-19 10:49  

呵呵。。解决问题就是有成就感。

假如不加这个,dispatch过去以后,也面读不到request里面的值的。加他就是为了传值。

request scope的东西,只有在一个request内有效。也就是说,只有forward或者dispatch之后的叶面才可以得到他,redirect,或者点连接,都算是新request,也就没法得到了。

session使用上要稍微复杂一点,servlet里,用之前,应该先判断session里面存不存在这个对象,然后才可以读取;jsp则简单的多,只要声明scope就可以了。你可以看看这方面的书,都有详细讲解。

reply[F0064314]
 



 
 re [6] 能讲将中文的解决方法JSP forum  
- 站门03-05-19 10:57  

谢谢。
那String[] chips = split(s , find);
中的split是哪个类的方法?编译的时候在这里出错了。

reply[F0064325]
 



 
 re [7] 能讲将中文的解决方法JSP forum  
- miles03-05-19 11:32  

哦。。。我自己的。内容:

public String[] split(String s, String token) {
  //StringTokenizer is not good enough to perform this operation.
  UniList chips  = new UniList();
  int len = token.length();
  int form = 0;
  int start;

  while(s.indexOf(token,form)>=form) {
    start = s.indexOf(token,form);
    if(start==form) {
      chips.add("");
    } else {
      chips.add(s.substring(form, start));
    }
    form  = start + len;
  }

  if(form<s.length()) {
    chips.add(s.substring(form));
  } else {
    chips.add("");
  }

  return chips.toSArray();
}

reply[F0064345]
 



 
 re [8] 能讲将中文的解决方法JSP forum  
- 站门03-05-19 18:33  

谢谢。可是UniList的代码该怎么写,我又不知道拉。

reply[F0064509]
 



 
 re [9] 能讲将中文的解决方法JSP forum  
- miles03-05-19 22:45  

唉。。这个例子举的真是失败。。

UniList是我的类,实现了List接口。你可以用ArrayList或Vector来代替。唯一不同,就是加入了一个toSArray方法,用来直接把它导成String[]。你可以做个循环,手动实现,也是一样。

reply[F0064550]
 



 
 re [10] 能讲将中文的解决方法JSP forum  
- 站门03-05-20 10:43  

哈哈,其实是我什么都不懂,麻烦您了。
我想这个UniList类代码我现在写不来,能不能再麻烦您直接给我看看,谢谢。

reply[F0064615]
 



 
 re [11] 能讲将中文的解决方法JSP forum  
- miles03-05-20 10:57  

import java.io.*;
import java.util.*;

public class UniList extends ArrayList{

//  private StringKit sk = StringKit.getInstance();
//  private NumberKit nk = NumberKit.getInstance();

  public UniList() {
    super();
  }

  public UniList(int initialCapacity) {
    super(initialCapacity);
  }

  public UniList(Collection c) {
    super(c);
  }

//  public UniMap getUniMap(int index) {
//    return (UniMap)get(index);
//  }
//
//  public String getString(int index) {
//    return sk.getString(get(index));
//  }
//
//  public String getIsoForDisplay(int index)
//  throws UnsupportedEncodingException {
//    return sk.toIsoForDisplay(getString(index));
//  }
//
//  public String getGbForInsertDB(int index)
//  throws UnsupportedEncodingException {
//    return sk.toGbForQueryDB(getString(index));
//  }
//
//  public double getDouble(int index) {
//    return nk.getDouble(get(index));
//  }
//
//  public int getInt(int index) {
//    return nk.getInt(get(index));
//  }
//
  public void add(int index,double element){
    add(index,new Double(element));
  }

  public void add(int index,int element){
    add(index,new Integer(element));
  }

  public void add(double element){
    add(new Double(element));
  }

  public void add(int element){
    add(new Integer(element));
  }

//  public double[] toDArray() {
//    Object[] a = toArray();
//    double[] array = new double[a.length];
//    for(int i=0;i<a.length;i++) {
//      array[i] = nk.getDouble(a[i]);
//    }
//    return array;
//  }

//  public int[] toIArray() {
//    Object[] a = toArray();
//    int[] array = new int[a.length];
//    for(int i=0;i<a.length;i++) {
//      array[i] = nk.getInt(a[i]);
//    }
//    return array;
//  }

  public String[] toSArray() {
    Object[] a = toArray();
    String[] array = new String[a.length];
    for(int i=0;i<a.length;i++) {
      array[i] = a[i].toString();
    }
    return array;
  }

//  public String[] toSArray() {
//    Object[] a = toArray();
//    String[] array = new String[a.length];
//    for(int i=0;i<a.length;i++) {
//      array[i] = sk.getString(a[i]);
//    }
//    return array;
//  }
//
//  public double maxVal(String key) {
//    double max = 0d;
//    for(int i=0;i<this.size();i++) {
//      max = max>this.getUniMap(i).getDouble(key)?max:this.getUniMap(i).getDouble(key);
//    }
//    return max;
//  }
//
//  public static void main(String[] args) {
//    int i = 50;
//    UniList ul = new UniList(6);
//    ul.add(10);
//    ul.add(0, i);
//    ul.add(5);
//
//    UniMap um = new UniMap();
//    um.put("name", "miles");
//    ul.add(2, um);
//
//    System.out.println(ul);
//  }
}


好难啊。。这里用到了很多其他自定义类的方法。我都注释了,应该能编过。

reply[F0064623]
 



您的位置
  (c)2000-2019 Yup Studio, all rights reserved.  
632.8125