目录
实验要求
1、 创建学生成绩的表单页面,并创建对应的JavaBean,在JSP页面中使用标签来设置和读取属性
2、 在多个页面间测试JavaBean的作用范围,通过实验对scope为page,request,session,application加强理解
实验过程
项目结构

标签设置和读取JavaBean属性
代码编写
编写JavaBean
package beans;
public class Student {
private String stuno;
private String stuname;
private float javaweb;
private float JavawebExperiment;
public String getStuno(){
return stuno;
}
public void setStuno(String stuno) {
this.stuno = stuno;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public float getJavaweb() {
return javaweb;
}
public void setJavaweb(float javaweb) {
this.javaweb = javaweb;
}
public float getJavawebExperiment() {
return JavawebExperiment;
}
public void setJavawebExperiment(float javawebExperiment) {
JavawebExperiment = javawebExperiment;
}
}
输入成绩页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>输入成绩</title>
</head>
<body>
<form action="setuseBean.jsp">
姓名:<input type="text" name="stuname"><br>
学号:<input type="text" name="stuno"><br>
输入成绩:<br>
JavaWeb: <input type="text" name="javaweb"><br>
JavaWeb实验:<input type="text" name="javawebExperiment"><br>
<input type="submit" value="提交"><br>
</form>
</body></html>
展示成绩页面(使用标签来设置和读取JavaBean属性页面)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>展示成绩</title>
</head>
<body>
<jsp:useBean id="student" class="beans.Student"></jsp:useBean>
<%-- <jsp:setProperty name="student" property="stuname" param="stuname"/>--%>
<%-- <jsp:setProperty name="student" property="stuno" param="stuno"/>--%>
<%-- <jsp:setProperty name="student" property="javaweb" param="javaweb"/>--%>
<%-- <jsp:setProperty name="student" property="javawebExperiment" param="javawebExperiment"/>--%>
<jsp:setProperty name="student" property="*"/>
姓名:<jsp:getProperty name="student" property="stuname"/><br>
学号:<jsp:getProperty name="student" property="stuno"/><br>
成绩:<br>
JavaWeb:<jsp:getProperty name="student" property="javaweb"/><br>
JavaWeb实验:<jsp:getProperty name="student" property="javawebExperiment"/><br>
</body>
</html>
网页效果展示
输入成绩页面

点击提交,跳转展示成绩页面(使用标签来设置和读取JavaBean属性页面)

测试JavaBean的作用范围
代码编写
page1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>page1</title>
</head>
<body>
<jsp:useBean id="student" class="beans.Student" scope="application"/>
<jsp:setProperty name="student" property="stuname" value="huazi"/>
第一个页面<br>
学生姓名:<jsp:getProperty name="student" property="stuname"/><br>
<%-- <jsp:forward page="page2.jsp"></jsp:forward>--%>
<a href="page2.jsp">page2</a>
</body>
</html>
page2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>page2</title>
</head>
<body>
<jsp:useBean id="student" class="beans.Student" scope="application"/>
第二个页面<br>
学生姓名:<jsp:getProperty name="student" property="stuname"/>
</body>
</html>
网页效果展示
第一个页面

当scope=“page” 时
第二个页面:由于student对象只能在page1中存活,所以page2中学生姓名为null

当scope=“request” 时
如果不通过forward方法跳转,选择使用<a>标签,或者直接在浏览器输入网址进入page2,page2中学生姓名仍为null
使用forward方法跳转到page2

当scope=“session” 时
如果不先打开page1页面,直接打开page2,page2中学生姓名仍为null,因为此时student对象还没有被存入session中。
先打开page1页面,而后使用<a>标签,或者直接在浏览器输入网址进入page2

当scope=" application" 时
先打开page1页面,再使用update classes and resources更新java,jsp和静态资源,此时操作并没有关闭服务器,但是session被清空。

直接在浏览器输入网址进入page2,依然可以访问到student对象,因为此时student对象存在application中,直到服务器关闭才会被移除

实验总结
1、IDEA中Update resources和Update classes and resources、Redeploy、Restart server的区别
- update resources:更新静态的资源,比如html,js,css等
- update classes and resources:更新java,jsp和静态资源( . java修改后,会被编译成.class,然后覆盖到target/kao文件夹下,IDEA调试模式的情况下,立即生效。IDEA运行模式下,不立即生效,需要redeployed才可生效。jsp修改后,再次被访问的时候,会自动更新,重新编译成java.class保存在tomcat的work目录下。由于是访问时才检测是否修改,是否需要重新编译,所以 IDEA 运行模式 和IDEA调试模式下,都是立即生效。刷新下页面就可)
- redeployed:重新部署,发布到tomcat里,不重启tomcat,而是把原来的删掉,然后重新发布;
- restart server:重启tomcat。
2、JavaBean的范围
- page:表示JavaBean对象的作用范围只是在实例化其的页面上,只在当前页面可用,在别的页面中不能认识
- request:表示JavaBean实例除了可以在当前页面上可用之外,还可以在通过forward方法跳转的目标页面中被认识到
- session:表示JavaBean 对象可以存在session中,该对象可以被同一个用户一次会话的所有页面认识到
- application:表示JavaBean对象可以存在application中,该对象可以被所有用户的所有页面认识到