JAVAEE 第二课 ----- ch3 ----- JSP与JSP的内置对象(request)

  1. JSP:Java server page -- 服务端页面脚本 -- 即可操作DB
  2. 从创建JSP页面可知JSP页面包含了HTML页面的内容
  3. 该节内容重点掌握JSP的内置对象,JSP有9大内置对象,但是只有4个是常用的:
    request page context   page域 session    session域 application  context域

    9大内置对象:

resuest response session
out page context   用于存取其他隐含对象  如request response application 等 page
exception application  服务器启动时就创建了 直到服务器关闭 config  取的服务器所有配置信息

 内置对象就是在该页面可以直接对这些对象进行调用,而不需要先创建对应的实体类再来调用

 

part 1:JSP页面简介

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>





Insert title here



<%
	int a = 10;
	String name = "javaee";
	//System.out.print(name);	这样的输出只是输出到eclipse的控制台,而不是用户看到的前端页面
	out.print(name);

	//定义方法,报错
	/* public void test(){
		
	} */
%>


<%!
	int num = 100;
	/* public void test(){
		out.print(num);
		在该处做输出,报错,因为在该尖括号+%+!中只能进行申明操作
		} */
%>


<%=num%>

part 2:熟悉很早以前只用JSP页面来提供服务的体系

             在早些时候JSP页面要完成DB操作(增删改查)、业务逻辑(对用户输入做处理)、实体类(调用实体类来实例化用户对象,就是初始化用户数据等操作)、显示(即向用户显示业务逻辑操作的结果)

首先创建一个JavaBean,即实体类:

package com.entity;

public class Student {
	int id;
	String name;
	String gender;
	
	public Student() {
	}
	public Student(int id, String name, String gender) {
		super();
		this.id = id;
		this.name = name;
		this.gender = gender;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
}

其次创建showInfo.jsp来完成所有的功能:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="com.entity.Student" %>




Insert title here



	<%
		Student s1 = new Student(122,"JAVAEE","女");
		out.print("

个人信息

"); out.print("

"+s1.getId()+s1.getName()+s1.getGender()+"

"); %>

part3:加入servlet,分担JSP页面的负担,有效缓解JSP页面过大带来的严重后果

            servlet主要分担DB操作&实体类的调用

            JSP保留业务逻辑(该处业务逻辑主要指向servlet传数据&在servlet处理之后取有关数据,用以完成显示功能)&显示功能

创建一个首页(index.jsp)供用户访问(只暴露一个查询接口,用于连接后端做处理的servlet):

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>





Insert title here


查询

创建一个StudentServlet.java的servlet去完成对实体类的调用(即初始化用户信息,以及将其信息存入jsp一个常用的内置对象request中,供向用户显示页面获取数据进行显示)

package com.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.entity.Student;

@WebServlet("/search")//映射请求url为search的所有请求
//上述注解就代替了原来的web.xml文件对servlet与jsp映射的配置
public class StudentServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Student s1 = new Student(123,"JAVA","男");
//		PrintWriter out = response.getWriter();
//		out.print("

个人信息

"); // out.print("

"+s1.getId()+s1.getName()+s1.getGender()+"

"); // 用上述输出out对象即可对实体类的信息进行输出。但是这样输出很麻烦,需要写大量的out.print语句 //以下介绍另外一种较高效的做法 //使用jsp的内置对象“request”,即将实体对象存入request的作用域中 //作用域就是一个虚拟的空间,其中可以存放许多数据,实现这些数据在前端与后台之间来回的传输 request.setAttribute("stu", s1); //从servlet到页面的方式1,这种方式叫转发,是在服务器里面直接跳转至指定页面上,效率最高 request.getRequestDispatcher("showInfo.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }

创建一个显示页面(showInfo.jsp),用于向用户显示交互结果:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="com.entity.Student" %>




Insert title here



	<%
		Student s1 = new Student(122,"JAVAEE","女");
		out.print("

个人信息

"); out.print("

"+s1.getId()+s1.getName()+s1.getGender()+"

"); %>
<% //从作用域中取出名为stu的对象,返回的是一个object类型的对象 //request的setAttribute在存储对象类型的数据时,会自动将其强转为object类型的对象 //即忽略原类型,并将类型提升为object类型,即提升为基类 //因此在该处接收的时候不能通过Student类型的对象进行接收 //最好也不要做类型的强转 Student ss =(Student) request.getAttribute("stu"); //注意:该处的Student类型的实体类名不可与上面代码块中的实体名重复 //因为只要是在一个网页上的Java代码,不管有多少对尖括号+% //最终编译的时候都会被整合到一起,就所有代码组成一个Java文件 out.print("

个人信息

"); out.print("

"+ss.getId()+ss.getName()+ss.getGender()+"

"); %>

这一段代码是在index.jsp基础上修改的,所以会含有index.jsp页面的代码,但是这正好将两种向客户提供服务的方式做一个对比

 

小结:上述代码中,只涉及到了实体类的数据初始化,然后在JSP页面上进行显示,所以看起来加上servlet之后好像与原来纯JSP提供访问支持并没有什么区别,甚至更加繁琐了,但是上述例子中只是对一个用户的信息做了静态初始化(即在网页内部将用户信息写死了,各个用户点击查看的数据信息都是一样的,而不是根据各个用户的信息/要求 显示不同的数据信息),并没有连接数据库对用户数据进行增删改查,如果加上数据库这些操作之后,你就会发现有servlet支持的版本的JSP页面代码很少(只保留了业务逻辑【用于提交用户输入】与显示数据的代码),结构很清晰,其对应在服务器上占用的资源也就很少,服务器的并发性也就更好,相反没有servlet支持的版本的JSP页面将会有大量的、完成各个功能的代码混合,文件的结构混乱,后期不易维护,服务器的并发行也就大大降低。

你可能感兴趣的:(JAVAEE,JavaBean)