完整Jsp&Servlet讲解

Jsp&Servlet

  • Jsp介绍
  • jsp基本使用
    • scriptlet
    • 注释
    • Page指令
    • jsp标签指令
    • 九个内置对象
      • request对象
      • response对象
      • Cookie认识?
      • session对象
      • application对象

持续更新中…


Jsp介绍

java web中。对于显示层而言,最为基本的就是jsp。那么什么是jsp?jsp是由sun公司开发出来的一套动态网页开发技术,其核心就是在html页面中插入Java代码,可以方便的和服务端进行交互。

jsp的运行依赖于web容器(tomcat),它不能像html代码那样直接由浏览器解析,其需要由web容器将 “*.jsp” 后缀的文件转换成*.java的文件。编译成.class文件之后才能运行。如下流程:
完整Jsp&Servlet讲解_第1张图片范例:编写jsp页面

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

<html>
<head>
	<title>jsp范例title>
head>
	<body>
		<h1>Hello Wordh1>
	body>
html>

完整Jsp&Servlet讲解_第2张图片

jsp基本使用

代码下载地址:

  • 链接:https://pan.baidu.com/s/1FfT0nlr-lsrtR4GALEUYtg
  • 提取码:tqqh

scriptlet

scriptlet是一段代码块,用来编写java代码,scriptlet有如下三种定义格式:
<%%>:定义局部变量
<%!%>:定义全局变量,全局常量、类、方法
<%=%>:输出值

范例:三种scriptlet演示
完整Jsp&Servlet讲解_第3张图片

注释

在jsp中,代码注释有两种:

1、显式注释:HTML代码注释
在这里插入图片描述

2、隐式注释

  • jsp提供注释:<%-- 此处为注释编写格式 --%>
  • java原生注释:java原生注释是编写在scriptlet代码块中的。
    • //
    • /* */

范例:观察注释
完整Jsp&Servlet讲解_第4张图片

Page指令

jsp的Page指令是用来定义页面的一些全局属性,可以用来设置页面编码、导包等操作。

范例:设置页面编码:<%@page pageEncoding=“UTF-8”%>

<%@ page pageEncoding="UTF-8"%>

范例:设置MIME类型:<%@page contentType=“text/html;charset=UTF-8”%>

当我们在浏览器中点击的是一个.exe的文件,那么浏览器会帮助我们自动下载,当我们访问一个*.html文件时,则是浏览器解析预览。这是因为在我们的web容器中,会根据我们设置的MIME类型来识别当前你访问的是什么。

<%@ page contentType="text/html; charset=UTF-8"%>

// 当然也可以将这两个写在一起,空格区分
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

范例:包导入:<%@page import =“java.util.Date”%>

// 导入具体的某个包
<%@page import ="java.util.Date"%>

// 动态导入某个包及子包下面所有的类
<%@page import ="java.util.*"%>

// 同时导入多个包,逗号隔开
<%@page import ="java.util.*,java.io.*,java.lang.reflect.*"%>

jsp标签指令

导入指令include,导入指令是将我们的多个页面合并成一个页面,如下图:页面导航栏为例
完整Jsp&Servlet讲解_第5张图片导入指令有静态导入和动态导入两种方式。

范例:静态导入:<%@include file=“文件地址”%>

但是静态导入有一个问题,如下情况,我们在导入的页面中定义相同的变量名称。这个时候就会发生错误。如下图:
完整Jsp&Servlet讲解_第6张图片我们知道,jsp是需要经过转换成*.java的文件,然后编译才可以执行。那么我们的静态导入是先将我们的页面合并在一起,再转换编译成*.class文件执行,由于我们页面上定义了两个相同的变量名,那么在转换时就会出现错误。通过动态导入即可解决此问题。

范例:动态导入-不传递参数

此时就解决了静态导入变量名称相同引发的错误问题,这是因为动态导入是在导入之前,将要导入的页面先进行转换编译后,在合并在一起。

范例:动态导入-传第参数




范例:跳转指令-不传递参数

范例:跳转指令-传第参数



九个内置对象

什么是内置对象?内置对象是由jsp已经给我们准备好可以直接使用的对象,可以方便我们请求的接收,响应,输出等。内置对象由web容器启动时为我们自动实例化好。jsp开发中,一共有9个内置对象可以供我们使用,其介绍如下表:

内置对象 类型 描述
pageContext javax.servlet.jsp.pageContext 描述当前页面上下文
request javax.servlet.http.HttpServletRequest 服务端接收客户端请求
response javax.servlet.http.HttpServletResponse 服务端回应客户端请求
session javax.servlet.http.HttpSession 描述单独的每一个用户
application javax.servlet.ServletContext 整个web容器上下文
config javax.servlet.servletConfig web配置
out javax.servlet.jsp.JspWriter 数据输出
page java.lang.Object 描述当前JSP页面
exception java.lang.Throwable 异常处理

request对象

该对象用于获取客户端的请求信息。客户端和服务端的交互中,都是请求-响应这样的交互模式,而这样的交互模式是基于http协议进行数据的传输。在客户端向服务端发送请求时,会携带http的请求头信息,也会传递一些参数数据给服务端。

该接口定义:public interface HttpServletRequest extends ServletRequest

常用方法:

方法名称 描述
String getContextPath() 获取请求上下文根目录,假如我们的项目访问地址为:http://www.project.com/jsp-object/index.jsp,那么该方法获取的根目录为 “ /jsp-object ” 就是我们的项目根目录。当然可以将我们的项目根目录设置为 “ / ”,http://www.project.com/index.jsp,如果设置为 / ,那么该方法返回的根目录为 “ / ”
String getRequestURI() 获取请求地址,比如:http://www.baidu.com这个网址就是一个请求地址。但是该方法返回的值是请求地址的一部分。如我们访问http://www.baidu.com/hello.jsp这个网址时,该方法返回的值是 “ /hello.jsp ”,所返回的值不包含请求协议,端口,域名等信息
String getRequestURL() 获取请求地址的完整路径,比如访问http://www.baidu.com/hello.jsp这个网址,则返回的值就为这个网址
String getParameter(String name) 根据参数名称获取值
Map getParameterMap() 获取请求参数,将参数转换成map集合的形式,其中参数的名称为key,参数值为value
Enumeration getParameterNames() 获取所有的参数名称
String getRealPath(String path) 获取项目所在本机上的真实路劲
String getRemoteAddr() 获取代理请求的主机IP地址
String getRemoteHost() 获取代理请求主机的完整名称
int getRemotePort() 获取代理请求主机的端口
String getScheme() 获取请求协议类型,如http
String getServerName() 获取请求发送的服务名称,http://localhost:8080/index.jsp,那么该返回的值为localhost
int getServerPort() 获取请求发送的服务端口:如http://localhost:8080/index.jsp,则获取的端口则为8080

范例:request常用方法演示

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<title>【request内置对象】</title>
	</head>
	<body>
		<p>获取上下文根目录:<%=request.getContextPath()%></p>
		<p>获取请求访问路径,不包含访问域名、端口:<%=request.getRequestURI()%></p>
		<p>获取请求得完整路径:<%=request.getRequestURL()%></p>
		<p>获取请求ip:<%=request.getRemoteAddr()%></p>
		<p>获取请求得主机信息:<%=request.getRemoteHost()%></p>
		<p>获取请求得主机端口:<%=request.getRemotePort()%></p>
		<p>获取请求协议:<%=request.getScheme()%></p>
		<p>获取请求的服务名称:<%=request.getServerName()%></p>
		<p>获取请求的端口:<%=request.getServerPort()%></p>
	</body>
</html>

<!-- 访问的地址为:http://localhost:8080/jsp-object/request-demo.jsp -->

<!-- 获取结果值 -->
获取上下文根目录:/jsp-object
获取请求访问路径,不包含访问域名、端口:/jsp-object/request-demo.jsp
获取请求得完整路径:http://localhost:8080/jsp-object/request-demo.jsp
获取请求ip:0:0:0:0:0:0:0:1
获取请求得主机信息:0:0:0:0:0:0:0:1
获取请求得主机端口:51540
获取请求协议:http
获取请求的服务名称:localhost
获取请求的端口:8080

response对象

response内置对象是客户端向服务端发送请求后,服务端用于回应客户端的请求操作。该对象可以获取回应的输出流、设置头信息、跳转等操作。

该接口定义:public interface HttpServletResponse extends ServletResponse

常用方法:

方法名称 描述
void addCookie(Cookie cookie) 增加cookie信息到浏览器
void sendRedirect(String location) 重定向url地址
void setHeader(String name, String value) 设置http请求头信息

范例:重定向url地址
完整Jsp&Servlet讲解_第7张图片

Cookie认识?

cookie是属于http协议范围,http的请求是单向请求,也就是说我们每一次发送的Http请求都是一个全新的,他不会记录当前这个用户的请求状态,如果我们要想提供一些个性化的服务,可以通过设置http请求头中的cookie携带数据,来记录用户信息。cookie的数据是存储在浏览器中的。

完整Jsp&Servlet讲解_第8张图片
范例:使用response对象返回cookie给客户端

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
	<body>
        <%
            Cookie cookie = new Cookie("cookiename", "cookievalue");
            response.addCookie(cookie);
        %>
	</body>
</html>

当我们访问这个页面时,就会创建一个cookie对象给客户端存储起来。
完整Jsp&Servlet讲解_第9张图片

session对象

session是存储在服务端中,用来描述每一个独立的用户。当服务器端收到用户的请求后,就会有web容器创建一个唯一ID编码,通过cookie的形式返回给客户端将这个id存储起来。如下图中的JSESSIONID就是服务端创建的一个SessionID。那么当这个用户下一次访问服务端时,我们可以通过客户端发送的http请求中,来比较cookie中携带的jsessionid来判断该用户是否为新用户。
完整Jsp&Servlet讲解_第10张图片

application对象

application描述的时整个web环境的上下文,可以通过该对象操作一些全局的属性、变量已经项目信息。

常用方法:

方法名称 方法描述
Enumeration getInitParameterNames() 获取web项目的配置参数名称
String getRealPath(String path) 获取项目真实路径

你可能感兴趣的:(Jsp&Servlet,jsp,servlet,java,web)