1、jsp组成
![](https://img.haomeiwen.com/i1212547/eadc124f2ee38bac.png)
2、注释
语法 | 描述 |
---|---|
<%-- 注释 --%> | JSP注释,注释内容不会被发送至浏览器甚至不会被编译 |
< !-- 注释 --> | HTML注释,通过浏览器查看网页源代码时可以看见注释内容 |
3、jsp指令
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。
jsp中有三个指令,都以<%@ 开头。分别为
- page指令:<%@ page ... %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
- include 指令:<%@ include ... %>,包含其他文件
- taglib指令:<%@ taglib ... %>,引入标签库
3.1、page指令
Page指令用来设置jsp页面的一些属性。一个JSP页面可以包含多个page指令。
其属性有:
属性 | 介绍 |
---|---|
contentType | 指定当前JSP页面的MIME类型和字符编码 |
import | 导入java包,与类中的import类似 |
language | 定义JSP页面所用的脚本语言,默认是Java |
isELIgnored | 是否忽略el表达式,设置为true则不执行el表达式 |
pageEncoding | 指定页面的编码格式 |
MIME类型:MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。用来设定浏览器该用什么方式来解析该文件,当文件被访问的时候,浏览器会自动使用指定应用程序来打开。
pageEncoding是jsp文件本身的编码,是指定web容器将jsp编译成java文件时采用什么编码读取jsp文件。
contentType的charset设置的编码是指服务器发送给客户端时的内容编码
如果都不存在,则默认编码为ISO-8859-1;
3.2 include指令
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。
语法:<%@ include file="文件相对 url 地址" %>
jsp页面include 导入html页面时乱码:https://blog.csdn.net/gnail_oug/article/details/51707061
3.3 taglib指令
taglib指令用来引入jsp的标签库(常用的有jstl,也可以自己定义标签库)
语法:<%@ taglib uri="地址" prefix="前缀" %>
4、java 脚本
在jsp中可以写java代码来动态的生成东西。
语法: <% java代码 %>
当使用到java中引用类型的时候需要导包
<%@ page import="entity.Emp" %>
<%--java代码--%>
<% int i=10;
System.out.println(i);%>
<%--java表达式--%>
<%=i%>
<%--java循环写法--%>
<% for (int j = 0; j <5 ; j++) { %>
<div style="color: red;"> <%=j%> </div>
<% } %>
<%--使用自己定义的类--%>
<%
Emp emp = new Emp();
emp.setName("张飞");
emp.setDept("蜀国");
%>
5、表达式
表达式是将java表达式输出为String类型字符串到页面,表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
<%= 表达式 %>
<%--使用自己定义的类--%>
<%
Emp emp = new Emp();
emp.setName("张飞");
emp.setDept("蜀国");
%>
姓名:<%=emp.getName()%>
部门:<%=emp.getDept()%>
日期:<%=new Date().toLocaleString()%>
6、申明
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。
语法:<%! java方法 %>
<%!
public int add(int i,int j){
return i+j;
}
%>
1+1=<%=add(1,1)%>
7、jsp内置对象
jsp 中默认存在9个对象,不需要定义即可直接使用,我们称为内置对象。
对象名 | 含义 |
---|---|
request | httpServletRequest对象,用来封装请求的数据 |
response | httpServletResponse对象,用来封装响应数据 |
out | JspWriter类的实例,用来向页面输出内容 |
session | HttpSession类的实例,用来表示当前会话 |
application | 当前应用(一个项目产生一个application,tomcat关闭才会消失) |
config | jsp页面配置信息 |
pageContext | 当前页面上下文内容(页面的所有对象) |
page | 当前页面,类似于this |
exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
8、out对象
out对象用来输出内容到浏览器。
<%
out.println("<h2>静夜思</h2>");
out.println("床前明月光<br>");
out.println("疑是地上霜<br>");
out.println("举头望明月<br>");
out.println("低头思故乡<br>");
out.flush();//将缓冲区的内容输出
%>
9、request对象
request为请求对象。当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。可以用来获取请求的参数,设置请求参数,转发请求,获取Cookie等操作。
方法名 | 作用 |
---|---|
String getParameter(String name) | 根据页面表单元素的name获取页面提交数据 |
String[ ] getParameterValues(String name) | 获取一个页面表单组件对应多个值时的用户的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码,在调用getParameter( )之前进行设定,可以解决中文乱码问题 |
当为get请求时中文乱码解决方式:
name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题
--1 获取数据
获取到用户信息<br>
用户名: <%=request.getParameter("name")%>
密 码: <%=request.getParameter("password")%>
--2 设置编码格式
<%--当表单提交中文内容时,需要设置编码格式--%>
<% request.setCharacterEncoding("utf-8");%>
10、response对象
response对象用于响应client请求,向客户输出信息。
作用:
- 重定向网页
- 设置http请求响应头信息
11、application对象
application类似于系统的“全局变量”,用于实现用户之间的数据共享。一个项目只有一个application。
![](https://img.haomeiwen.com/i1212547/942a429fcb60c672.png)
应用:
统计页面访问次数
12、session
12.1 cookie
cookie指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据。
cookie的传送过程如下图所示:
![](https://img.haomeiwen.com/i1212547/0b404dc382270abd.png)
![](https://img.haomeiwen.com/i1212547/e150c9d9e80a4c5a.png)
编码问题
cookie 的值叧能是 ascii 字符,如果是中文,需要将中文转换成 ascii 字符形式。
可以使用 URLEncoder.encode()方法和 URLDecoder.decode()方法来进行这种转换。
cookie 保存时的编码问题
cookie 的值叧能是 ascii 字符,如果是中文,需要将中文转换成 ascii 字符形式。
可以使用 URLEncoder.encode()方法和 URLDecoder.decode()方法来进行这种转换。
e. cookie 的保存时间 cookie.setMaxAge(int seconds); seconds > 0
浏览器会将 cookie 以文件的方式保存在硬盘上。在超过指定的时间以后,会删除
该文件。
seconds < 0
默认值,浏览器会将 cookie 保存在内存里面。叧有当浏览器关闭乊后,才会删除。
seconds = 0 立即删除该 Cookie
f. 删除 cookie
比如要删除一个 name 为"username"的 cookie。 Cookie c = new Cookie("username",""); c.setMaxAge(0);
response.addCookie(c);
g. cookie 的路径问题
浏览器在向服务器上的某个地址发送请求时,
会先比较 cookie 的路径不向访问的路径(地址)是否匹配,叧有匹配的 cookie,才会发送。 cookie 的路径可以通过 cookie.setPath(String path)方法来设置。
如果没有设置, 则有一个缺省的路径,缺省的路径是生成该 cookie 的组件的路径。 比如: /appname/addCookie 保存了一个 cookie,
则该 cookie 的路径就是/appname/addCookie。
规则:
cookie 的路径必须是要访问的路径的上层目录戒者是不要访问的路径相等,浏览器 才会将 cookie 发送给服务器。
一般可以设置 setPath("/appname"),表示访问该应用下的所有地址,均会发送
cookie使用示例:
<%
//创建cookie
Cookie cookie=new Cookie("username","james");
//设置cookie的超时时间,单位为秒
cookie.setMaxAge(100000);
//将cookie响应回浏览器
response.addCookie(cookie);
%>
https://www.cnblogs.com/shizhijie/p/8422662.html
session即会话管理对象。
什么是会话?
![](https://img.haomeiwen.com/i1212547/db2da4a949198e0a.png)
- session 存在服务器端
- 浏览器第一次访问服务器jsp页面或servlet时生成。
- 服务器停止或session超时时销毁,可以设置session的超时时间
- 关闭浏览器后,再打开浏览器访问,原来那个session其实没被销毁,只是会创建一个新的session.
![](https://img.haomeiwen.com/i1212547/5c67dc3c526ed358.png)
在web.xml中配置如下代码,设置session过期时间。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
13、http请求
https://blog.csdn.net/x_iya/article/details/79774018
https://cloud.tencent.com/developer/news/396583
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
http协议特点:
- 无连接:每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
http请求方式:
get:用来获取服务器上的内容,请求参数跟在url后,用?与请求隔开,多个参数间用&分割。
post:用来向服务器新增内容,可以提交的数据在请求体中。
put:向服务器修改内容
delete:向服务器删除内容
get和post区别
-
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,POST方法是把提交的数据放在HTTP包的Body中.
-
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
-
GET方式提交数据,相对不安全,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
-
get通常用来获取服务器资源,而post通常用来提交数据到服务器。
http请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
![](https://img.haomeiwen.com/i1212547/060132b9ff4c451b.png)
http响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
![](https://img.haomeiwen.com/i1212547/f8344e7a206e393c.jpg)
http 状态码
HTTP之状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:
状态码 | 含义 |
---|---|
200 OK | //客户端请求成功 |
400 Bad Request | //客户端请求有语法错误,不能被服务器所理解 |
401 Unauthorized | //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 |
403 Forbidden | //服务器收到请求,但是拒绝提供服务 |
404 Not Found | //请求资源不存在,eg:输入了错误的URL |
500 Internal Server Error | //服务器发生不可预期的错误 |
503 Server Unavailable | //服务器当前不能处理客户端的请求,一段时间后可能恢复正常` |
更多状态码http://www.runoob.com/http/http-status-codes.html
14、对象作用范围
![](https://img.haomeiwen.com/i1212547/567446a133699719.png)
网友评论