JavaWeb 第四部分 JSP

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>

传送门

上一章:JavaWeb 第三部分 Servlet
下一章:JavaWeb 第五部分 EL表达式

猜你喜欢

转载自blog.csdn.net/RTyinying/article/details/110447476