对于jsp我是纯新手,没学过jsp的上一代,直接开始学的jsp。
所以教程有些高估我了,导致我使用 jsp:useBean的时候踩了超级多的坑。
首先是jsp:useBean的使用,最开始教程给的是:
<jsp:useBean> 的语法如下:
<jsp:useBean id = "name" class = "package.class" scope= "page | request | session | application" />
其中:
1)id
表示 Bean 实例化对象的变量名,可以在指定范围内使用该变量名。
2)class
表示需要实例化 Bean 的类路径,指定的类必须包含 public 且无参数的构造方法。
3)scope
指定 Bean 的作用域,取值为:
page:只能在当前页面使用该 Bean 对象;
request:只能在一次请求范围内使用该 Bean 对象;
session:只能在一次会话范围内使用该 Bean 对象;
application:可以在整个应用范围内使用该 Bean 对象。
他给的是package.class,我以为只是单纯的类的意思,后来看了别人说的才知道要的是.class后缀的文件,不是后缀为.java的文件(我是在这个地方踩坑的,不知道你们是不是)。
其次,我用的是Ecilpse编译器,所以我根本看不到.class文件,我只能看到.java文件(当然可能是我操作不对)。所以退而求其次的方式就是给你的.java文件加一个main方法(原因在于:对于有main方法的类,编译器是会进行编译的(即生成.class文件),我也是偶然试了一下,结果是成功的),到这里,文件类型的问题就解决了。
接下来解决文件放在哪里的问题:
第一步,创建一个包:
路径为工程下 src/main/java
第二步,创建一个类(带main方法):
第三步:在如下路径下创建 classes文件夹:
src/main/webspp/WEB-INF
第四步就是使用了:
<%@page language="java" import="com.google.gson.Gson"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp使用库</title>
</head>
<body>
<%= "weolcom <a href='http://localhost/welcom.jsp'>go</a>" %>
<br>
<jsp:useBean id="test" class="jspDemo1.Test"></jsp:useBean>
<%
out.print(test.concatStr());
%>
<jsp:useBean id="user" class="com.Test.User"></jsp:useBean>
<%
Gson gson = new Gson();
%>
<%="user 序列化:<br>"+gson.toJson(user) %>
</body>
</html>
这里也可以看到我的网站是直接使用ip+port访问的(内网穿透的时候,你的网站如果不能这样访问就会出错,即找不到网页),这里也简单提一下做法:
工具栏->Window->Show View->Servers
然后点击servers,选择你想修改的服务器设置
接下来就是库的导入了:上面我使用了 Gson库,按照正常java项目的导入过程,我们会进入build pth 里面添加,但是经过尝试后会报错,我们需要在 src/main/ webapp/WEB-INF/lib 下直接粘贴要导入的.jar文件
我们做完了上述工作,看似没有的了问题,但是还有一个问题就是:
如果我们对一个类进行了修改,继续使用jsp:useBean 产生的对象是现在的还是原来的。
答案就是,我们使用的还是原来的。
首先看结论:
这是修改后的 Test类
package jspDemo1;
public class Test {
public static void main(String[] args) {
}
public String concatStr() {
return "after change";
}
}
正常来说,我们再次进入index.jsp,结果应该跟上面不一样,但是结果是:
很显然,和上面一样。
解决的方法也很简单,只需要编译运行一下就好了,看到这里,我想大部分人已经明白了,Jsp:useBean 需要的.class文件,最开始的时候,如果没有找到.java对应的.class文件会报错,需要我们编译一次生成.class,而如果存在.class,它就会直接使用,即需要我们手动去更新.class。
编译后结果如下:
以上就是我对jsp:useBean如何使用的总结,仅供参考。