JSP规范介绍
1、来自于JAVAEE规范中一种
2、JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入到响应体的开发流程
3、JSP规范制定了Http服务器应该如何调用管理JSP文件
响应对象存在的弊端
1、适合将数据量较少的处理结果写入到响应体
2、如果处理结果数量过多,使用响应对象增加开发难度
JSP文件的优势
1、JSP文件在互联网通信过程,是响应对象替代品.
2、降低将处理结果写入到响应体的开发工作量降低处理结果维护难度
3、在JSP文件开发时,可以直接将处理结果写入到JSP文件不需要手写out.print命令,在
4、Http服务器调用JSP文件时,根据JSP规范要求自动的将JSP文件书写的所有内容通过输出流写入到响应体
HTML文件和JSP文件的区别
1、作为资源文件类型不同
HTML文件属于静态资源文件,其相关命令需要在浏览器编译并执行的.
JSP文件属于动态资源文件,其相关命令需要在服务端编译并执行的
2、调用形式不同
如果浏览器访问HTML文件,此时Http服务器直接通过一个输出流
将HTML文件中所有的内容写入到响应体
如果浏览器访问JSP文件。此时Http服务器根据JSP规范来操作JSP文件编辑---->编译----->调用
JSP文件运行原理图
1、Tomcat根据JSP规范,将被访问的JSP文件[编辑]为一个java文件。这个Java文件是Servlet接口实现类
2、Tomcat根据JSP规范,调用JVM(javac one_jsp.java)将这个java文件[编译]为class类型
3、Tomcat根据JSP规范负责生成这个class文件的实例对象。这个实例对象是一个Servelt接口实例对象
4、Tomcat根据JSP规范通过实例对象调用class文件中_jspService方法,_jspService方法在运行时负责将JSP文件中书写内容写入到响应体中
Http服务器【编辑】与【编译】JSP文件位置:
标准答案:我在【work】下看到这个证据
C:\Users\[登录windows系统用户角色名]\.IntelliJIdea2018.3\system\tomcat\[网站工作空间]\work\Catalina\localhost\【网站名】\org\apache\jsp
执行标记
命令格式:
<% int a =10; %> 声明局部变量
<% boolean flag = 30 >= 40; %> Java中表达式(数学表达式,关系表达式,逻辑表达式)
<%
if(判断条件){
}else{
}
while(){
}
%> 书写控制语句
命令作用:通知Http服务器将JSP文件中Java命令与其他普通执行结果进行区分
输出标记
命令格式:
<%=java的变量名%>
<%=java的表达式%>
命令作用:通知Tomcat将输出标记中【变量的值】或则输出标记中【表达式运算结果】写入到响应体
JSP内置对象
JSP文件的内置对象:request
类型:HTTPServletRequest
作用:
在JSP文件运行时读取请求包中的相关信息
与Servlet在请求转发过程中实现数据共享
JSP文件内置对象:session
类型:HttpSession
作用:JSP文件在运行时,可以通过session指向当前用户的会话作用域对象,来添加共享数据,或者读取共享数据
ServletContext application 全局作用域对象
同一个网站中Servlet与JSP都可以通过当前网站的全局作用域对象来实现数据享
JSP文件中的内置对象:application
下面来举一个Servlet和JSP联合调用的案例
1、首先创建一个学生对象的实体类
public class Student {
private Integer sId;
private String sname;
public Student() {
}
public Student(Integer sId, String sname) {
this.sId = sId;
this.sname = sname;
}
public Integer getsId() {
return sId;
}
public void setsId(Integer sId) {
this.sId = sId;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
2、创建Servlet接口实现类,通过请求作用域对象共享数据到JSP问文件,并输出
public class OneServlet extends HttpServlet {
//业务处理,得到处理结果---查询学员信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Student s1=new Student(100,"zhangsan");
Student s2=new Student(100,"zhangsan");
Student s3=new Student(100,"zhangsan");
List<Student> studentList=new ArrayList();
studentList.add(s1);
studentList.add(s2);
studentList.add(s3);
//将共享数据添加到请求作用域对象中
request.setAttribute("key",studentList);
//通过请求转发的方式调用stu_show.jsp
//并将资源报告的请求对象和响应对象通过Tomcat交给stu_show.jsp使用
request.getRequestDispatcher("/stu_show.jsp").forward(request,response);
}
}
3、从请求作用对象中获取共享数据循环遍历
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//从请求作用域对象中获取共享数据
List<Student> studentList=(List)request.getAttribute("key");
//循环遍历
%>
<table border="2px" align="center">
<tr>
<td>学生编号</td>
<td>学生姓名</td>
</tr>
<%
for(Student student:studentList){
%>
<tr>
<td><%=student.getsId()%></td>
<td><%=student.getSname()%></td>
</tr>
<%
}
%>
</table>
执行结果