持续更新中…
java web中。对于显示层而言,最为基本的就是jsp。那么什么是jsp?jsp是由sun公司开发出来的一套动态网页开发技术,其核心就是在html页面中插入Java代码,可以方便的和服务端进行交互。
jsp的运行依赖于web容器(tomcat),它不能像html代码那样直接由浏览器解析,其需要由web容器将 “*.jsp” 后缀的文件转换成*.java的文件。编译成.class文件之后才能运行。如下流程:
范例:编写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>
代码下载地址:
scriptlet是一段代码块,用来编写java代码,scriptlet有如下三种定义格式:
<%%>:定义局部变量
<%!%>:定义全局变量,全局常量、类、方法
<%=%>:输出值
在jsp中,代码注释有两种:
2、隐式注释:
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.*"%>
导入指令include,导入指令是将我们的多个页面合并成一个页面,如下图:页面导航栏为例
导入指令有静态导入和动态导入两种方式。
范例:静态导入:<%@include file=“文件地址”%>
但是静态导入有一个问题,如下情况,我们在导入的页面中定义相同的变量名称。这个时候就会发生错误。如下图:
我们知道,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 | 异常处理 |
该对象用于获取客户端的请求信息。客户端和服务端的交互中,都是请求-响应这样的交互模式,而这样的交互模式是基于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 |
获取请求参数,将参数转换成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内置对象是客户端向服务端发送请求后,服务端用于回应客户端的请求操作。该对象可以获取回应的输出流、设置头信息、跳转等操作。
该接口定义:public interface HttpServletResponse extends ServletResponse
常用方法:
方法名称 | 描述 |
---|---|
void addCookie(Cookie cookie) | 增加cookie信息到浏览器 |
void sendRedirect(String location) | 重定向url地址 |
void setHeader(String name, String value) | 设置http请求头信息 |
cookie是属于http协议范围,http的请求是单向请求,也就是说我们每一次发送的Http请求都是一个全新的,他不会记录当前这个用户的请求状态,如果我们要想提供一些个性化的服务,可以通过设置http请求头中的cookie携带数据,来记录用户信息。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对象给客户端存储起来。
session是存储在服务端中,用来描述每一个独立的用户。当服务器端收到用户的请求后,就会有web容器创建一个唯一ID编码,通过cookie的形式返回给客户端将这个id存储起来。如下图中的JSESSIONID就是服务端创建的一个SessionID。那么当这个用户下一次访问服务端时,我们可以通过客户端发送的http请求中,来比较cookie中携带的jsessionid来判断该用户是否为新用户。
application描述的时整个web环境的上下文,可以通过该对象操作一些全局的属性、变量已经项目信息。
常用方法:
方法名称 | 方法描述 |
---|---|
Enumeration getInitParameterNames() | 获取web项目的配置参数名称 |
String getRealPath(String path) | 获取项目真实路径 |