四十四章 — JSP - 2
JSP是一种动态网页技术,javaServer Pages, Java + HTML ,HTML 是作为网页内容显示,java是作为动态逻辑处理
它实质上是一种模板技术,然后通过Tomcat的jasper组件,可以将其翻译为.java文件,然后进行编译运行
它里面面的每一块组成都会被翻译到.java文件的对应位置
脚本: <% %>
->_jspService()方法内
表达式 <%= %>
->_jspService()方法内 的out.print()
声明: 声明:<%! %> ->
.java文件内的成员位置
一、 掌握request和response的使用
1.JSP的九大内置对象(面试题)
out :向页面输出内容
out.print();//他可以输出任意数据类型,将对应的数据类型转换为字符串
out.write();//它只能输出字符(字符串) 它用于向页面输出HTML内容
request:他代表的是客户端的请求
response:他代表的是服务端的响应
session:会话技术
application:应用程序上下文
page:他指代当前页面,当然如果翻译后的,那么他指代当前对象
pageContext:它是用来获取其他作用域内容的,同样他也是页面的上下文
config:他可以获取到初始化配置参数(web.xml)
exception:它能够获取到某个页面上出现的异常信息 一般要和<%@page errorPage = “error.jsp”%>结合使用
2.request对象
<form action="doRegister.jsp" method="POST">
<p>
帐号:<input type="text" name="username" value="admin"/>
</p>
<p>
密码:<input type="password" name="password" value="123456"/>
</p>
<p>
爱好:
<input type="checkbox" name="hobby" value="1"/>编程
<input type="checkbox" name="hobby" value="2"/>学习
<input type="checkbox" name="hobby" value="3"/>写作业
</p>
<p>
<input type="submit" value="注册" />
</p>
</form>
<%
// 接收客户端的请求参数
// 根据name属性获取对应value的值
// 获取单个值的参数
String username = request.getParameter("username");
String password = request.getParameter("password");
// 获取多个值的参数
String[] hobbies = request.getParameterValues("hobby");
%>
<!-- out.print() -->
<%="接收到的用户名为:"+username %> <br/>
<%="接收到的密码为:"+password %> <br/>
<%
out.print("接收到的爱好有:");
for(String hobby : hobbies){
out.print(hobby+" ");
}
%>
-
String getParamepter(String name);根据name获取value值,如果获取不到返回null
-
String[]getParamepterValue(String name);根据那么获取多个value值的参数
-
Map<String,String[]> getParamepterMap();将请求参数全部注入到Map集合
-
String getMethod();获取请求方式
-
String getRemoteAddr();获取客户端的IP地址
-
String getContextPath();获取项目的根路径
-
String getHeader(String name);获取请求头信息
-
InputStream getInputStream();获取参数的字节输入流
-
void setAttribute(String name,Object val);向request作用域存储信息 但是这个信息只能在同一次请求中有效
-
Object getAttribute(String name);从request作用域提取信息,如果不存在则为null
-
RequestDispatcher getRequestDispathcher(String path);获取请求准发对象
- forward(request,response);实现请求准发
3.GET请求和POST请求的区别(面试题)
GET:
- 地址栏会显示传递的参数
- 一般来讲浏览器对GET请求有数据长度限制
- URL具有传播性
- 不安全
POST:
- 地址栏不会显示传递的参数 通过请求体传输
- 一般来讲浏览器没有数据长度限制
- URL不具备传播性
- 相对安全
二、掌握解决请求中问乱码的问题
POST请求中文乱码:
- request方法:void setCharacterEncoding(字符集);
GET请求中文乱码:数据是通过URL地址传递的 但是tomcat 8.0以下默认的URL编码为ISO-8859-1
- 治标不治本:先解码再编码
- 将得到的参数数据 先以ISO-8859-1(原来的编码)解码
String的构造方法:String:byte[] getBytes(String encoding);
- 再将解码后的内容进行UTF-8(新编码)重新编码
String的构造方法:String(byte[] bytes,String encoding);
- 治本:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
三、理解转发和重定向的区别【面试题】
请求转发:
- 地址栏不变化 还是原来的请求
- 请求转发它是一次请求
- 请求转发他只能跳转到服务器内部的资源
- 请求转发是服务器在帮助你进行页面跳转
重定向:
- 地址栏会变化 便微信的请求地址
- 重定向是两次请求
- 重定向可以跳转到任意地址/资源
- 重定向是服务器响应给客户端一个标识(302)然后客户端重新进行页面跳转
借钱
四、掌握session(会话)对象的使用
- void setAttribute(Stirng name ,Object value) ;向session 作用域存储内容 这个内容在同一次会话中都是有效的
- Object getAttribute(String name);从session作用域中取出内容
- void removeAttribute(String name);从session作用域移除内容
- String getId();获取当前session的编号
- void invalidate();作废session
- void setMaxInactiveInterval(int seconds);设置session非活动有效期(默认为30分钟)
未来要更改时间可以在自己项目中的web.xml配置如下内容。
<!-- ==================== Default Session Configuration ================= -->
<!-- You can set the default session timeout (in minutes) for all newly -->
<!-- created sessions by modifying the value below. -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
- int setMaxInactiveInterval();获取session非活动有效期
session的生命周期:
当浏览器(客户端)访问浏览器时,会话就开始了(帮你创建一个会话对象(每一个浏览器/用户都是独立的)),只要没有完全被关闭对应的浏览器(客户端),或者没有超过session设置的非活动有效期(如果你不在访问服务器,那么就开始计算非活动时间了),那么会话就一直保持。
一般session前期都是用来存储用户登录信息、存储购物车的临时信息…
五、掌握cookie和session的区别
一些网站里例如百度搜索时有历史记录提示
一些网站登录时可勾选7天免登录或者记住我等功能
cookie他和客户端有关
session采用的是默认及的cookie、
模拟实现记住账号
实质上session使用到的就是绘画及的cookie,当浏览器第一次访问服务器时,服务器会生成一个session 并且将session的id写入到浏览器的会话级cookie,当浏览器访问服务器时 会携带cookie,服务区会对cookie中的session id 进行验证,如果有则表示是同一级会话 否则说明会话不存在或者已经过期了,那么就会重复之前的步骤
Cookie和session区别(面试题):
1.cookie只能存储String类型的值,而session可以存储任意类型
2.cookie可以设置会话级也可以设置持久级,而session只能是会话级
3.cookie是客户端存储的内容 而session是服务器存储的内容
4.cookie不够安全,session相对安全,一些重要信息推荐放在session中
六、掌握application对象的使用
它的应用一般和requset和session差不多,它也是一种作用域
tomcat容器中,存在四种作用域,作用域是用来存储信息的
page:当前页面 信息只能在当前页面使用
request:同一次请求
session:同一次会话
application:同一个应用(只要服务器不关闭,application都是同一个)
模拟统计一个网站的访问人数:
- void setAttribute(String name,Object value);
- Object getAttribute(String name);
- void removeAttribute(String name);
1.当用户访问网站时,就给访问人数进行自增1
2,如果是第一个访问网站的用户,那么就初始化访问人数设置为1