文章目录
1 JSP规范介绍
来自于JAVAEE规范中一种
JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入到响应体的开发流程
JSP规范制定了Http服务器应该如何调用管理JSP文件
2 JSP文件调用原理
Http服务器调用JSP文件步骤:
1.Http服务器将JSP文件内容【编辑】为一个Servlet接口实现类(.java)
2.Http服务器将Servlet接口实现类【编译】为class文件(.class)
3.Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象
4.Http服务器通过Servlet实例对象调用_jspService方法,将jsp文件内容写入到响应体
Http服务器【编辑】与【编译】JSP文件位置:
C:\Users[登录windows系统用户角色名].IntelliJIdea2018.3\system\tomcat[网站工作空间]\work\Catalina\localhost\【网站别名】\org\apache\jsp
【work】文件夹下

3 JSP文件Java命令书写规则
在JSP文件中直接书写Java命令,是不能被JSP文件识别,此时只会被当做字符串写入到响应体
执行标记:
<%
//在jsp文件中,只有书写在执行标记中内容才会被当做Java命令
//1.声明Java变量
int num1 = 100;
int num2 = 200;
//2.声明运行表达式:数学运算,关系运算,逻辑运算
int num3 = num1 + num2; //数学运算
int num4 = num2>=num1?num2:num1;//关系运算
boolean num5 = num2>=200 && num1>=100;//逻辑运算
//3.声明控制语句
if(num2>=num1){
}else{
}
for(int i=1;i<=10;i++){
}
%>
输出标记:
<!--在JSP文件,通过输出标记,通知JSP将Java变量的值写入到响应体-->
变量num1的值:<%=num1%><br/>
变量num2的值:<%=num2%><br/>
<!--执行标记还可以通知Jsp将运算结果写入到响应体-->
num1 + num2 = <%=num1+num2%>
<!--制造数据-->
<%
Student stu1 = new Student(10,"mike");
Student stu2 = new Student(20,"allen");
Student stu3 = new Student(30,"smith");
List<Student> list = new ArrayList();
list.add(stu1);
list.add(stu2);
list.add(stu3);
%>
<!--数据输出-->
<table border="2" align="center">
<tr>
<td>学员编号</td>
<td>学员姓名</td>
</tr>
<%
for(Student stu:list){
%>
<tr>
<td><%=stu.getSid()%></td>
<td><%=stu.getSname()%></td>
</tr>
<%
}
%>
</table>
4 JSP文件内置对象
4.1 session
类型:HttpSession
作用:JSP文件在运行时,可以session指向当前用户私人储物柜,添加共享数据,或则读取共享数据
session_1.jsp
<!--将共享数据添加到当前用户私人储物柜-->
<%
// HttpSession session = request.getSession();
session.setAttribute("key1", 200);
%>
session_1.jsp 与 session_2.jsp为同一个用户/浏览器提供服务。
因此可以使用当前用户在服务端的私人储物柜进行数据共享
session_2.jsp
<%
Integer value=(Integer) session.getAttribute("key1");
%>
session_2.jsp从当前用户session中读取数据:<%=value%>
4.2 request
类型:HttpServletRequest
作用: 在JSP文件运行时读取请求包信息与Servlet在请求转发过程中实现数据共享
浏览器: http://localhost:8080/myWeb/request.jsp?userName=allen&password=123
<%
//在JSP文件执行时,借助于内置request对象读取请求包参数信息
String userName = request.getParameter("userName");
String password =request.getParameter("password");
%>
来访用户姓名:<%=userName%><br/>
来访用户密码:<%=password%>
4.3 application
ServletContext application;全局作用域对象
同一个网站中Servlet与JSP,都可以通过当前网站的全局作用域对象实现数据共享
index.jsp
<%
application.setAttribute("key1", "hello world");
%>
oneServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext application = request.getServletContext();
String value = (String)application.getAttribute("key1");
System.out.println("value = "+value);
}
5 Servlet与JSP联合调用
5.1 Servlet 与 JSP 分工
Servlet: 负责处理业务并得到【处理结果】--------------------大厨
JSP: 不负责业务处理,主要任务将Servlet中【处理结果】写入到响应体----传菜员
5.2 Servlet 与 JSP 之间调用关系
Servlet工作完毕后,一般通过请求转发方式 向Tomcat申请调用JSP
5.3 Servlet 与 JSP 之间如何实现数据共享
Servlet将处理结果添加到【请求作用域对象】
JSP文件在运行时从【请求作用域对象】得到处理结果
OneServlet.java
public class OneServlet extends HttpServlet {
//处理业务,得到处理结果-----查询学员信息
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Student s1 = new Student(10,"mike");
Student s2 = new Student(20,"allen");
List stuList = new ArrayList();
stuList.add(s1);
stuList.add(s2);
//将处理结果添加到请求作用域对象
request.setAttribute("key", stuList);
//通过请求转发方案,向Tomcat申请调用user_show.jsp
//同时将request与response通过tomcat交给user_show.jsp使用
request.getRequestDispatcher("/user_show.jsp").forward(request, response);
}
}
user_show.jsp
<%
//从请求作用域对象得到OneServlet添加进去的集合
List<Student> stuList = (List)request.getAttribute("key");
%>
<!--将处理结果写入到响应体-->
<table border="2" align="center">
<tr>
<td>用户编号</td>
<td>用户姓名</td>
</tr>
<%
for(Student stu:stuList){
%>
<tr>
<td><%=stu.getSid()%></td>
<td><%=stu.getSname()%></td>
</tr>
<%
}
%>
</table>