我对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:
最近要处理类似的事情,特记录本篇内容,挺好的介绍,虽然版本比较旧,但估计可以参考一下



由于公司业务的需要,最近要在linux下的php支持java类,故把我的调试笔记贴出来,希望对大家有用。

系统环境:
Redhat 9.0
Apache-1.3.27
Mysql3.23-54a-11
Php-4.32
j2sdk1.4.1_03

安装配置:
1.mysql使用的是redhat9自带的rpm包,不介绍安装了,jdk的安装也很简单,我们把jdk安装到/usr/java/j2sdk1.4.1_03 并在/etc/profile设置jdk环境参数。

2.编译安装apache
tar zvxf apache_1.3.27.tar.gz
cd apache_1.3.27
./configure –prefix=/usr/local/apache –enable-module=so –enable-shared=max
make
make install

3.编译安装php
tar zvxf php-4.3.2.tar.gz
cd php-4.3.2
./configure –prefix=/usr/local/php –with-mysql \
--with-apxs=/usr/local/apache/bin/apxs \
--with-java=/usr/java/j2sdk1.4.1_03
make
make install

修改/usr/local/apache/conf/httpd.conf
查找<IfModule mod_mime.c>

在此范围添加

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

4.配置php.ini
cp php.ini.dist /usr/local/php/lib/php.ini

vim php.ini


修改如下内容:
[Java]
java.class.path = /usr/local/php/lib/php/php_java.jar
java.home = /usr/java/j2sdk1.4.1_03
java.library = /usr/java/j2sdk1.4.1_03/jre/lib/i386/libjava.so
java.library.path =/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
extension=java.so
保存退出。
cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429
ln –s java.so libphp_java.so 这一步很重要哦!

设置环境变量:
export LD_LIBRARY_PATH=/usr/java/j2sdk1.4.1_03/jre/lib/i386:/usr/java/j2sdk1.4.1_03/jre/lib/i386/server

ok!重启一下apache
/usr/local/apache/bin/apachectl start

测试一下,写个测试页test.php
<?
$system=new Java("java.lang.System");

//demonstrate property access
print 'Java version='.$system->getProperty('java.version').' <br>';
?>

正常的话页面应该能显示:Java version=1.4.1_03




作者:张微波

2003-07-05 于北京

出处:http://www.5ilinux.com/apache02.html
Tags: , ,
今天解决了一个问题让我觉得惊喜,虽然我对JSP还算陌生,可是正因为这样,工作时需要解决问题时,得到解决是让人兴奋的。

做的项目其实是互联星空的收费项目,其实是有样例给参考的,代码倒不是主要的问题,主要是处理一下特殊情况。发觉JAVA给项目合作是很合适的,class打包jar后,功能给出接口就行了,一个黑盒子,客户开发是在自己的控制之下的。

先说一下服务器配置,安装java环境和tomcat就不多说了,见《Linux下搭建JSP环境小记

看到比较跩的淘气猫的时候,jsp环境就已经搭建好了,开始配置应用环境。

set CLASSPATH=%CLASSPATH%;%TOMCAT_HOME%\lib\ispsoapservice.jar;....


以上设置是加上classpath参数,程序可以找到相应的jar文件,并需要把jar文件放到刚才定义的路径里面。
但我不相信每次使用jar文件都得修改系统配置,重启服务器,看了一下文章,可以这样处理:

在jsp应用程序下建立 WEB-INF/lib 文件夹,把相应的jar文件放置在该目录下,这样就不需要添加系统变量,但仅限于jsp文件不是到处存放的情况吧,否则就得到处复制了

set CATALINA_OPTS=%CATALINA_OPTS%
-Dcom.onewaveinc.webpro=D:\webpro2\webpro.xml


一直要解决的就是这个问题,xml文件在系统启动的时候指定了,我希望可以引用独立的xml文件。
自己不太懂,问一些有经验的人,该怎么做,好像这个是机密一样,总不肯透漏,或者就是不知道了。阿权比较倔强,希望自己解决掉。问多了也不给答案也没啥意思的。

于是重新安装过tomcat,一步一步配置,让它出错,尝试解决出错,前面的jar文件解决过了,剩下这个了。
首先得明白这个代码的作用,查了一下含义:

引用

Options的可选取项:

(1) -debug:以deug的模式运行interpreter,它允许也jdb(Java调试器)一起使用;

(2) -checksource:打开interpreter时会检查源文件即.java文件和.class文件的日期,如果.java比.class还要新,那么.class文件会被重新编译;

(3) -classpath:该参数覆盖环境变量CLASSPATH;

(4) -mx x:修改所分配内存的最大值,如-mx –10m;x>1000byte

(5) -ms x:修改初始化内存;x>1000byte

(6) -noasyncgc:关闭垃圾回收线程,即不自动回垃圾,这时可以使用System.gc这个方法来手动回收垃圾;

(7) -noverify:关闭代码的验证功能;

(8) -prof:打开报表功能,该功能对程序的执行进行跟踪,最终形成报表文件,记录所有方法的执行时间,有利于找出程序的瓶颈所在;

(9) -ss x:在java的运行环境中为每个线程配置两个别stack,一个用于Java代码,另一个用于c/c++代码,这里可以-ss用于改变用于c/c++代码的stack大小,如-ss 100k,最小值为1000bytes,默认值为128k;

(10) -oss x:用于修改java代码的stack,默认值为400k

(11) -t:显示程序执行过程

(12) -verbose:每次.class运行时显示相关信息;

(13) -verbosegc:每次垃圾回收时显示相关信息;

(14) -D:允许修改System的属性值


这个就好办了,也就是说赋予了System一个变量com.onewaveinc.webpro,指定其值是一个路径
那是否可以在程序开始的时候设定这个值呢,大振人心~~

找到设置系统变量的方法是:

System.setProperty("com.onewaveinc.webpro","D:\webpro2\webpro.xml");


测试成功~
那问题又来了,是否可以读取当前目录下的配置文件呢?
取得现在的系统路径就OK啦~

阿权实践过程就完成了,参考代码如下,加在文件开始处:

<%
String strAbsPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
System.setProperty("com.onewaveinc.webpro",strAbsPath+"/webpro.xml");
%>


解释一下:
request.getRequestURI() 取得现在请求的URI
application.getRealPath 把URI转换为物理路径
getParent()是取得上级路径,也就是现在目录啦!
Tags:
今天又忙了些简单的JSP,找一个MD5的加密都没找到,突然发现用的程序样例里面有例子,于是乎依葫芦画瓢,就做好了,可怜的家伙....

搜了一下jsp做跳转的方法:

引用
使用JSP大约有下列三种跳转方式:
1. response.sendRedirect();
2. response.setHeader("Location","");
3. <jsp:forward page="" />

语句前不允许有out.flush(),如果有,会有异常


赶紧搜一下资料补点血,发现有一个《jsp入门笔记》总结的不错,不知道出处:

一 jsp基本语法

1,<%! %> 声明全局变量
    <%    %> 一般java代码都在此标记中编写,里面声明的变量为局部变量
    <%=表达式%> 用于输出表达式的值 类似于out.println()的作用 但在开发中一般不宜用out.println()来输出
    在程序开发中html与java代码不宜联系太过紧密。
2.表单交互接收传值用 request.getParameter("参数名称") 返回的值为String类型,如果需要转为int类型可用 Integer.parseInt("饱含数字的String");
3.<form>中method的值由post和get两种
    post 传递的值不会显示
    get 传递的值会在地址栏中显示
4。网页中处理乱码
<%@ page contentType="text/html;charset=gb2312"%>
Tags:
分页: 2/3 第一页 上页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐