jsp初学,但需要用,偶尔查查
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]
折腾了几天,也算完成这点事情了,不容易啊。。

今天还碰到了类型转换的问题,发生错误了想着问问人,问星哥是否有小范同学的QQ,星哥说:“这些问题还要问,上网查一下就行了,jsp,int之类的” 忽然发现,星哥跟我一样,都有点倔强,小伙C++搞的也还不够火热,可也倔强的很多问题都要弄个清楚,我也折腾的有脾气了,倔强,非得解决了不可,有时候还不给自己问人,非得把它折腾出来不可,这坏脾气。。。

以初学者的身份小结一下:

1 jar文件优先级和class文件位置(未解决)

jar放置位置有好几个地方,有空一定得弄明白,目前对优先级还不太明确,小范同学做过jsp,好像也没留意此问题。
但是有一点要注意,这个包引用的其它jar文件要放一个目录下,否则在别的地方找不来,java的机制蛮复杂。
class文件放在 WEB-INF/classes/下,有一个问题还不太明白,是自身目录下的WEB-INF还是网站根目录的?
似乎我的本地环境需要放置在网站根目录,服务器环境放在自身目录的?
至少,发现找不到类定义时,可以从以上问题开始解决,也算是得益。

2 设置jbuilder环境

打开一个jpx项目文件,发现一堆的错误提示,怎么办?
设置一下就好:

点击在新窗口中浏览此图片

设置library

点击在新窗口中浏览此图片

添加你的所有相关的jar文件即可

jbuilder似乎对UTF8文件不太支持,中文是乱码。另外,对于字符定位也很差劲,跟我的盗版有关?
我只有在editplus里面编辑,切换过来会自动更新了,这点很聪明,然后可以编译成class,更新到服务器上即可。

3 类型转换

做PHP和js都不会有严格的类型定义,这里可不一样了,一点类型的问题都会导致错误。

如何将字串 String 转换成整数 int?

引用
1). int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);

2). int i = Integer.valueOf(my_str).intValue();

注: 字串转成 Double, Float, Long 的方法大同小异


对于这个理解要注意,比如long类型是 Long.parseLong("23231")
如果很长的数字用Integer.parseInt转换就会出错的,看不出问题,我也迷惑了,得小范同学提示以long解决

如何将整数 int 转换成字串 String ?

引用
1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i);

3.) String s = "" + i;

注: Double, Float, Long 转成字串的方法大同小异
Tags:
学会看出错信息很重要,这个能知道错在哪里很重要。

一般会有两种出错的情况:

1 语法错误

首先不能有语法错误,否则会先报错的,即便缺失类定义,也先提示这个错误,比如:

<%
b = "";
String a = "";


错误信息:
引用
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 3 in the jsp file: /beijing/import.jsp

Generated servlet error:
    [javac] Compiling 1 source file

/Data/apps/tomcat/work/Standalone/localhost/_/beijing/import_jsp.java:46: cannot resolve symbol
symbol  : variable b
location: class org.apache.jsp.import_jsp
b = "";
^
1 error


2 缺失类定义

比如这样的代码:
首先,Microsoft.DVAP.PSO.PSOInterfaceWraper是正常的,但还有相关的类可能需要也会导致出错的。
Tags: , ,
JSP一直用的不多,但最近还是有擦边了,记录一下艰难的使用mysql的过程。

要使用Mysql那肯定用到相应的mysql的jar包了,只是我比较笨,不太懂从哪里获得什么样的jar文件才能使用,所以只能靠点网上的经验了:

JSP连接mysql数据库攻略

05年的文章了,看来四年前的知识我现在都赶不上,可以跟着操作一下。

安装Mysql就不用说了,跟使用没有关系,先下载Mysql的jar文件:

JDBC驱动 mysql-connector-java-3.1.14.tar.gz
http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-3.1.14.tar.gz/from/pick

文件下载后,解压后有一个 mysql-connector-java-3.1.14-bin.jar 文件,这个就是我们需要的啦。

1 jar文件放在哪里?

这个对于不熟悉jsp的人而言,有点茫然,jsp怎么找jar文件的,查找顺序是怎么样的?等我知道具体细节再做笔记。今天只是小尝试了一下:

WEB-INF/lib/
Tomcat_dir/common/lib/
Tomcat_dir/shared/lib/
Java_dir/j2sdk1.4.2_15/lib/


我在这几个目录依次都放置了,可还提示无法找到相应的类,可怜了,重启tomcat后就可以了。
不服气,然后就倒着依次删掉,依次重启tomcat,尝试出还是放 common/lib/ 下稳妥,但居然放在 WEB-INF/lib/ 下无用,java真复杂,可惜没有时间细研究这个问题了。

2 代码怎么写?

参考上面的页面即可,这里也贴一下稍微整理过的代码:

<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>
<%

//Mysql
String driverName="com.mysql.jdbc.Driver";
String mysqlserver="www.aslibra.com";
String userName="aquan";
String userPasswd="aquan";
String dbName="aslibra";

Class.forName(driverName).newInstance();
String mysqlURL="jdbc:mysql://"+mysqlserver+"/"+dbName+"?user="+userName+"&password="+userPasswd;
Connection connection = DriverManager.getConnection(mysqlURL);
Statement statement = connection.createStatement();
String sql="SELECT * FROM usr";
ResultSet rs = statement.executeQuery(sql);
while(rs.next()) {
  out.print(rs.getString(1)+" ");
  out.print("|");
  out.print(rs.getString(2));
  out.print("<br>");
}
rs.close();
statement.close();
connection.close();

%>


真伤心,jsp里面使用这个还没有php里面使用方便,一直纳闷为什么insert会出错

sql="insert into usr set userID='1',nickName='aquan',website='http://www.aslibra.com/' ";
//out.print("<hr>"+sql);
statement.executeQuery(sql);


后来还是找到解法:

引用
The method executeQuery is designed for statements that
produce a single result set, such as SELECT statements.

The method executeUpdate is used to execute INSERT, UPDATE,
or DELETE statements and also SQL DDL (Data Definition Language)
statements like CREATE TABLE, DROP TABLE, and ALTER TABLE....


来自: http://www.javaworld.com.tw/jute/post/view?bid=6&id=60810&tpg=1&ppg=1&sty=1&age=0#60810
原出处: http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/statement.html#1003674

代码小修改即可:

sql="insert into usr set userID='1',nickName='aquan',website='http://www.aslibra.com/' ";
//out.print("<hr>"+sql);
statement.executeUpdate(sql);


真搞不懂,就这么一个语句在php里面就统一成 mysql_query 就成了,多方便啊~~
Tags: ,
这两天被jsp折磨了,今天要赶时间,更加着急。
做完了其实也没有多少东西,就是把时间耗在了跟别人调试上了,然后还有自己的查错。
做个小结吧:

1 class文件部署

要使用class文件,需要看看定义的package,按路径放好class文件
要放在根目录的WEB-INF/classes下
如果b.class定义的是 package a,那就是 WEB-INF/classes/a/b.class
在程序里面无须引入package,直接可以使用 a.b

2 jar文件部署

jar文件可以放置在 WEB-INF/lib下
上面说的class文件其实可以打包成jar文件
jar cvf myjar.jar a
(把a目录打包 类似目录: tar cvfz a.tar.gz a)

需要声明导入类,比如:
<%@ page import="Microsoft.DVAP.PSO.*" %>
<%@ page contentType="text/html; charset=gb2312" %>


3 比较需要注意类型

在php里面可以不分类型,所以很多想法到jsp里面总容易报错
String a = "test"; // php可以用单引号,这里不行,单引号估计是字符类型的吧,和c一样?
if(a.equals("0")){
//do sth
}
不能是 if(a == 0) ,但可以比较null,if(a != null)

4 cookie的使用

Cookie uCookie = new Cookie("domain","www.aslibra.com");
uCookie.setMaxAge(60*60*24); //设置过期时间
response.addCookie(uCookie);


cookie值应该是字符类型, new Cookie("domain",1); 这样会出错的

5 时间戳

<%@ page import="java.text.*"%>  
<%@ page import="java.util.*"%>
<%@ page contentType="text/html; charset=gb2312" %>
<%
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String TimeStamp = formatter.format(currentTime);


时间戳让我抓狂,jsp没有类似php的手册,让人烦

6 终止程序

if(true)return;
或者 out.close(); 不过我没试过呢

7 base64_decode

<%@ page import="sun.misc.BASE64Decoder"%>
<%
//......
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(filename);
filename = new String(b);
%>


8 其它

好像class文件的优先级要比jar的高,存在同意定义的方法,class的优先
如果更新class文件和jar文件,好像重启tomcat才立刻生效?不知道什么时候生效

小结完毕。。以上有几点是我解决的最费心的,看着痛心呀。。
Tags: ,
我对JSP一直有点惧怕,一来我没有时间慢慢琢磨它,所以也仅仅停留在表面的了解,程序小小的改改补补也还可以,二来就是偶尔来个任务是合作方要求用JSP的,又经常出问题,搞的头昏脑胀,摸不着头脑,烦人。

今天又是中国电信的东西,每家的电信似乎都有自己的一套程序,但不同的电信给人的帮助文档都不同,有的说的很详细,比如广东电信,从服务器环境到安装配置和测试,甚至到样例,都做的尽可能的简洁,按步骤做完就差不多了,不太懂jsp也就按样例改改就是了。

今天是北京电信的,放样例上去后,就报错了,当然,可能是我的技术问题,对方给予的合作也就一般,相信他们会觉得,样例给过去有运行不正常是正常的,因为比较是样例而已。碰到问题解决不了那只能是自己的本事问题了。

今天碰到的问题:

提示编译出错
String redirectURL = SampleSP.AuthValidation.Authoration(returnURL,ConfigFilePath);
SampleSP出错,但这个class文件都有,在WEB-INF\classes\SampleSP文件夹里面,按道理好像是对的

折磨了比较久,查资料说是:

引用
1.你必须在网站的根目录下建立WEB-INF文件夹,然后在里面建立2个文件夹叫class和lib,以及一个文件web.xml
.注意我的大小写.建立好后,开始放入class的文件.如果你的class已经封装成lib了,就直接放在lib文件夹下.如果是.class,就直接把WEB-INF\class作为包的根路径,把class放入class文件夹,比如我有个类 MyClass.class,是包MyPacket里面的,那么她应该放在WEB-INF\class\MyPacket\里面.

2.在JSP里面,首先在页首加载相关的包或者类.类似下面:
<%@ page import="MypPacket.MyClass,
MypPacket.MyClass2%>
或者
<%@ page import="MypPacket.*"%>
区别我就步用说了吧呵呵.
然后在代码内就很简单了,和java一样了.比如调用函数:
<%
MyClass mc = new MyClass();
mc.getMyParameter();
%>


于是乎发现我的文件的确没有在根目录,所以把相关的文件(lib和classes文件夹,上面好像说错了)都挪根目录的WEB-INF文件夹里面,发现windows的本地环境通过了,正常,却在服务器环境不行。

再折磨我就可以成为草根专家了,都是尝试出来的假专家。
检查程序,发现里面有引用别的包,在AuthValidation.class文件里面:

package SampleSP;

import Microsoft.DVAP.PSO.*;
import java.util.Vector;
import java.util.Random;

public class AuthValidation {
  public AuthValidation() {
  }


也就是说,其实引用了 Microsoft.DVAP.PSO.*,在jsp文件里面没有做引用,那就加上就是了:

<%@ page import="Microsoft.DVAP.PSO.*" %>


原先都尝试过 PSO.* ,SampleSP.* ,看来都是好奇怪的想法,应该先看看包对应的路径
PSO.jar里面的类都是定义在Microsoft.DVAP路径下,所以引用的时候要用 Microsoft.DVAP.PSO.*的方式
也曾经怀疑过是否tomcat的版本问题,是否java的版本问题,不懂java的人就是只能猜想了,慢慢猜,慢慢误,有一天会傻的。有时间再好好收拾它。。。。

good luck!!

引用资料出自:jsp怎么使用.class文件?tomcat
Tags: , ,

1.在Tomcat的公共设定中
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
........................
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
可以看出*.jsp文件都是请求org.apache.jasper.servlet.JspServlet得。

2.下面再看看org.apache.jasper.servlet.JspServlet中做什么。
从源代码中可以看出,这个类是继承HttpServlet类,并覆盖了主要方法
public void service (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
在这个方法中找到jsp文件的路径jspUri,并执行方法serviceJspFile
接着在方法serviceJspFile中我们看到它新创建了一个类JspServletWrapper的实例,并执行了这个类实例的service方法。

3.接下来,我们再看看这个类org.apache.jasper.servlet.JspServletWrapper
在这个类中
我们可以看到在初始化的时候,创建了一个新的对象
ctxt = new JspCompilationContext(jspUri, tagInfo, options,
servletContext, this, rctxt,
tagFileJarUrl);
找到方法
public void service(HttpServletRequest request,
HttpServletResponse response,
boolean precompile)
throws ServletException, IOException, FileNotFoundException
这里,使用了ctxt.compile(),对jsp文件进行了编译,
再调用方法getServlet();给Servlet类型对象theServlet赋值,
最后,调用theServlet的service方法。
由于从jsp转换来的java继承类HttpJspBase,我们可以从类HttpJspBase 中看到servcie方法又调用了_jspService方法,

这样最终调用了由jsp转换来的java中的_jspService方法

我们可以通过在%TOMCAT_HOME%\work\目录下找到从jsp转换来的java源文件,可以找到_jspService这个方法。

转自:http://weiqingfei.blog.com.cn/archives/2006/1372512.shtml

Tags:
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐