JSP-01

只有Servlet能够跟客户端做响应

当访问jsp时候,可以自动的将jsp转换为servlet,将jsp中的html代码全部拷贝出来,自动生成一个servlet

既然jsp文件和html文件都能给出前段页面,那么我为什么 还要把html写进jsp,再把jsp转换为servlet资源传给客户端。因为就是想把java代码加进去,因为原生的html代码是无法在里面写java代码的。访问.html没有用,因为不能把java的数据加载进来,只有在jsp中才可以穿插java代码。

JSP本质上就是一个Servlet,JSP主要负责与用户交互,将最终的界面呈现给用户,HTML+JS+CSS+JAVA的混合文件 
        当服务器接收到一个后缀是JSP的请求时,将该请求交给JSP引擎去处理,每一个JSP页面第一次被访问的时候,JSP引擎会将它翻译成一个servlet文件,再由web容器调用Servlet完成响应。

单纯从开发角度来看JSP就是在html中嵌入java程序

具体嵌入方式有三种

1.<%   Java代码 %>

2.<%! Java方法  %>

3.<%=Java变量 %>           //把Java对象直接输出到HTML页面中

Java代码在jsp文件中的不同区域,看似隔断,实际上是一片连续的java代码区域,最终都会放到Servlet的service方法中去

Jsp-02

 index2.jsp

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %><%--Created by IntelliJ IDEA.User: AdminDate: 2022/1/4Time: 9:41To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>index2</title><h1> test index2 path in "http://localhost:port/index2.jsp" </h1><h1> test index3 path in "http://localhost:port/index3.jsp" </h1><h1> test index4 path in "http://localhost:port/index4.jsp" </h1>
</head>
<body>
<h1> test index2 path in "http://localhost:port/index2.jsp" </h1>
<h1> test index3 path in "http://localhost:port/index3.jsp" </h1>
<h1> test index4 path in "http://localhost:port/index4.jsp" </h1>
<HR>
<%String str = "hello world";System.out.println(str);//hello world不会显示在客户端的浏览器中,而是显示在控制台
%>
<%--写进标签中的东西在浏览器页面上才能看到--%>
<h1>hello world!</h1>
<h1>写进标签中的东西在浏览器页面上才能看到</h1>
<h1>System.out.println("hello world")不会显示在客户端的浏览器中,而是显示在控制台</h1><HR>
<HR align=center width=300 color=#b92600 SIZE=1>
<h3>声明一个java方法并调用,在控制台输出hello world,System.out.println只能输出到控制台,不能输出到前段页面</h3>
<h3>要想在前端页面展示hello world,需要通过html标签输出</h3>
<%!//声明一个Java方法public String test() {return "测试JSP中的java方法";}
%>
<%//调用Java方法System.out.println(test());
%><HR align=center width=300 color=#b92600 SIZE=1>
<h3>老笨办法,一行一行标签敲出来的表格</h3>
<%List<String> names = new ArrayList<>();names.add("张三");names.add("李四");names.add("王五");List<Integer> ages = new ArrayList<>();ages.add(22);ages.add(21);ages.add(23);
%>
<table border="1"><tr><th>姓名</th><th>年龄</th></tr><tr><td><%--看!html标签获取java变量来了--%><%=names.get(0)%></td><td><%=ages.get(0)%>></td></tr><tr><td><%=names.get(1)%></td><td><%=ages.get(1)%>></td></tr><tr><td><%=names.get(2)%></td><td><%=ages.get(2)%>></td></tr>
</table>
<HR><HR align=center width=300 color=#b92600 SIZE=1>
<h3>通过java代码和html标签混合编程循环遍历输出表格</h3>
<table><tr><th>姓名</th><th>年龄</th></tr><%for (int i = 0; i < names.size(); i++) {%><tr><td><%=names.get(i)%></td><td><%=ages.get(i)%>></td></tr><%}%>
</table></body>
</html>

效果

JSP-03

jsp内置对象9个

request:表示一次请求,和HttpServletRequest同一个类型

response:表示一次响应,和HttpServletResponse同一个类型

pageContext:页面上下文,获取页面信息,该类来自于pageContext,Servlet有上下文ServletContext

session:表示一次会话,保存用户信息,来自于HttpSession类

application: ServletContext的实例,表示当前的web应用,是个全局的对象,保存所有用户的共享信息

config: 表示当前JSP转换完成的对应的Servlet的ServletConfig对象,可以获取当前Servlet的信息

out: JspWriter对象,向客户端浏览器输出数据,也可以用jsp表达式向客户端浏览器输出信息。

page:当前Jsp对应的Servlet对象

exception:表示JSP页面发生异常

常用的是 request、response、session、application、pageContext

request常用方法
1、String getParameter(String key)获取客户端传来的参数。
2、void setAttribute(String key,Object value)通过键值对的形式保存数据。
3、Object getAttribute(String key)通过key取出value。
4、RequestDispatcher getRequestDispatcher(String path)返回一个RequestDispatcher对象该对象的forward方法用于转发请求
5、String[] getParameterValues()获取客户端传来的多个同名参数
6、void setCharacterEncoding(String charset) 指定每个请求的编码

index3.jsp

<%@ page import="java.util.Arrays" %><%--Created by IntelliJ IDEA.User: AdminDate: 2022/1/6Time: 14:00To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>index3.jsp</title>
</head>
<body>
<%request.setCharacterEncoding("UTF-8");//指定每个请求的编码String idStr = request.getParameter("id");Integer id = null;Integer id2 = null;try {//这个请求的时候,没有带id参数会可能会导致Integer.parseInt(null)抛出异常id = Integer.parseInt(idStr);} catch (Exception e) {id = null;}String name = request.getParameter("name");String[] names = request.getParameterValues("name");String age = request.getParameter("age");//----------------------out.write("在jsp中 out.write(\"xxxx\") ");Class clazz = page.getClass();String id1 = (String) pageContext.getAttribute("id");//-----------------------//将数据存入request中try {request.setAttribute("id2", id + 2);} catch (Exception e) {request.setAttribute("id2", null);}//数据数据转到index4.jsp中,同事页面也跳转到index4.jsp//RequestDispatcher requestDispatcher = request.getRequestDispatcher("index4.jsp");//requestDispatcher.forward(request,response);//-----------------------
%>
<h3>eg: http://localhost:8080/index3.jsp?id=1&name=2&age=3 //常规传参</h3>
<h3>eg: http://localhost:8080/index3.jsp?name=2&name=3&name=4&name=abc&age=3 //不传id也可以</h3>
<h3>eg: http://localhost:8080/index3.jsp?&name=value1&name=value2&name=value3 //同名参数传多值</h3>
<h5>您访问的时候所带的参数是:<br/>你请求的地址为:http://localhost:8080/index3.jsp?id=<%=id%>&name=<%=name%>&age=<%=age%>
</h5>
<p>---------------------------------------------------------------------</p>
<p>无论请求的时候给的name参数的值有几个,总是第一个值是有效的,这叫做近水楼台先得月</p>
<p>假设:</p>
<p>http://localhost:port/index3.jsp?&name=value1&name=value2&name=value3</p>
<p>此时,name参数的值一直是value1</p>
<p>String name = request.getParameter("name");//value1</p>
<p>如果,我就要一次性给同一个参数传递多个不同的值,某些场景可能需要</p>
<p>String[] names=request.getParameterValues("name");</p>
<br/>
<p>---------------------------------------------------------------------</p>
<p>id参数传来的值:<%=id%>
</p>
<p>id1:<%=id1%>
</p>
<p>id+2:<%=id2%>
</p>
<p>age参数:<%=age%>
</p>
<p>name参数的第一个值,作为默认值:<%=name%>
</p>
<p>name参数的多个值:<%=Arrays.toString(names)%>
</p>
<%=clazz%>
<p>---------------------------------------------------------------------</p>
<p>数据数据转到index4.jsp中,同时页面也跳转到index4.jsp    <br/>RequestDispatcher requestDispatcher = request.getRequestDispatcher("index4.jsp");<br/>requestDispatcher.forward(request, response);<br/>
</p>
</body>
</html>

servlet06.java

@WebServlet("/servlet06")
public class Servlet06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 地址栏发送的请求是get请求// http://localhost:8080/servlet06?id=1&name=%E5%BC%A0%E4%B8%89&age=23response.getWriter().write("HtteServlet doGet");String id = request.getParameter("id");String name = request.getParameter("name");String age = request.getParameter("age");System.out.println("http://localhost:port/servlet06?id=" + id + "&name=" + name + "&age=" + Integer.parseInt(age));// http://localhost:port/servlet06?id=1&name=寮犱笁&age=23}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//如果想要客户端发送post请求,要么写一个表单发送,要么用postman等工具发送post请求response.getWriter().write("HtteServlet doPost");}}

JSP-04

Session

用户会话
        服务器无法识别每一次HTTP请求的出处(不知道来自于哪个终端),它只会接受到一个请求信号,所以就存在一个问题:将用户的响应发送给其他人,必须有一种技术来让服务器知道请求来自哪,这就是会话技术。
        会话:就是客户端和服务器之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。
        会话状态∶指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。

实现会话的两种方式:

  • Session
  • Cookie

属于同一次会话的请求都有一个相同的标识符,sessionlD
session常用的方法:
String getld()        获取sessionID
void setMaxInactivelnterval(int interval)        设置session的失效时间,单位为秒
int  getMaxInactivelnterval()        获取当前session的失效时间,默认失效时间 1800s
void invalidate()        设置session立即失效
void setAttribute(String key,Object value)        通过键值对的形式来存储数据,request也可以存储
Object getAttribute(String key)        通过键获取对应的数据
void removeAttribute(String key)        通过键删除对应的数据

a标签触发退出登录,退出登录的逻辑是Servlet08写的,所以“/servlet08”得写一样了

Cookie

创建Cookie

Cookie cookie = new Cookie( "name" ,"tom");
response. addcookie ( cookie) ;

读取cookie

Cookie[] cookies=request.getCookies();
for (Cookie cookie1 : cookies) {
        //因为out.write只能写String类型的,所以,把cookie toString一下
        int i=1;
        out.write("cookie"+i+" "+cookie1.toString()+":\t"+cookie1.getName()+"="+cookie1.getValue()+"<br/>"); i++;
}

Cookie常用的方法:
void setMaxAge(int age)        设置Cookie的有效时间,单位为秒
intgetMaxAge()        获取Cookie的有效时间
String getName()        获取Cookie 的name
String getValue()        获取Cookie的value

session:
保存在服务器
保存的数据是Object
会随着会话的结束而销毁
保存重要信息
存储用户信息;
        session: setAttribute("name" ,"admin"")存
        getAttribute(""name"")取

生命周期:
        服务端:只要WEB应用重启就销毁,客户端:只要浏览器关闭就销毁。

cookie:
保存在浏览器
保存的数据是String
可以长期保存在浏览器中,无会话无关
保存不重要信息
典型的应用:biblibili保存你观看的视频进度,下次打开从上次关闭的位置继续观看。
存cookie: response.addCookie(new Cookie(name,"admin")
取cookie:
Cookie[ ] cookies = request.getcookies() ;
for (cookie cookie:cookies){
        if(cookie.getName( ).equals ( "nane" )){
                out.write("欢迎回来"+cookie.getvalue( ) );
         }
}
生命周期:
        不随服务端的重启而销毁,客户端:默认是只要关闭浏览器就销毁,我们通过setMaxAge()方法设置有效期,一旦设置了有效期,则不随浏览器的关闭而销毁,而是由设置的时间来决定。

问题:

打开idea的Event Log查看其被占用的端口号,我这里是xxx

打开cmd
netstat -ano|findstr xxx        //获取进程号
taskkill -f -pid yyy                 //杀死进程

04、JavaWeb-JSP+Session+Cookie相关推荐

  1. 四、Web服务器——Session Cookie JSP入门 学习笔记

    今日内容 1. 会话技术1. Cookie2. Session 2. JSP:入门学习 会话技术 1. 会话:一次会话中包含多次请求和响应.* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直 ...

  2. Java Web应用(JSP/Session/Cookie)

    JSP JSP本质上就是一个Servlet,JSP主要负责与用户交互,将最终的界面呈现用户,HTML+JS+Java的混合文件.-->前后端不分离 原理:当服务器接收到后缀.jsp文件请求时,将 ...

  3. JavaWeb(二):Cookie、Session、JSP、过滤器和监听器、JDBC

    JavaWeb-2 学习视频:B站 狂神说Java – https://www.bilibili.com/video/BV12J411M7Sj 学习资料笔记:CSDN – https://blog.c ...

  4. Cookie和Session-学习笔记02【Cookie案例、JSP改造Cookie案例】

    Java后端 学习路线 笔记汇总表[黑马程序员] Cookie和Session-学习笔记01[Cookie_快速入门.Cookie_细节] Cookie和Session-学习笔记02[Cookie案例 ...

  5. 【JSP HTTP 状态码】【JSP 表单处理】【JSP 过滤器】【JSP Cookie 处理】【JSP Session】【JSP 文件上传】

    JSP HTTP 状态码 HTTP请求与HTTP响应的格式相近,都有着如下结构: 以状态行+CRLF(回车换行)开始 零行或多行头模块+CRLF 一个空行,比如CRLF 可选的消息体比如文件,查询数据 ...

  6. 基于javaweb+JSP+Servlet学生在线选课系统(管理员、教师、学生)

    基于javaweb+JSP+Servlet学生在线选课系统(管理员.教师.学生) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练 ...

  7. 基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台、后台)

    基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习, ...

  8. 基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台、后台)

    基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练 ...

  9. 基于javaweb+JSP+Servlet学生成绩管理系统(管理员、教师、学生)

    基于javaweb+JSP+Servlet学生成绩管理系统(管理员.教师.学生) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练 ...

最新文章

  1. 近六成员工强烈支持,携程将推出“3+2 ”工作模式,一周三天到岗两天在家办公...
  2. Linux学习准备工作
  3. CENTOS安装ElasticSearch
  4. 信息网络基础设施普遍薄弱,提防信息安全风险--央行副行长
  5. java代码_35个Java 代码优化细节
  6. cookie与session详解
  7. 【HDU - 1863】 畅通工程(并查集+最小生成树)
  8. ripro虚拟资源主题8.9开心版/免授权/ripro日主题V8.9
  9. 猿辅导 python_关于猿辅导机器学习项目ytk-learn和ytk-mp4j分布式机器学习库
  10. python io多路复用框架_python之IO多路复用
  11. App Support
  12. 和qc哪个发展更好_转行大数据还是人工智能,哪个发展更好
  13. Java-Thread-Affinity框架使用及原理分析
  14. Python中while循环练习——打印星星总结
  15. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群(续)
  16. Java实验——设计一个数组模型,用于存储体育项目成绩男生体育项目有足球、长跑和铅球,女生体育项目有跳舞、体操、游泳。设计排序算法,将变量a、b、c中的数值按大小顺利进行互换(从大到小排列)。
  17. Git:git-pull 的用法总结
  18. [php] 获取请求 IP 地址,及所处 IP 所在服务商代码
  19. 知心世界姐王瑞平:谷传民与大衣哥朱之文是沟通问题不是人品问题
  20. Android下QQ空间查看大图特效

热门文章

  1. css 相对定位 position relative
  2. Efficient reversible data hiding for JPEG images with multiple histograms modification(论文阅读)
  3. 思科模拟器-实验3:单交换机VLAN配置和结果验证
  4. 万字Android技术类校招面试题汇总,Android岗
  5. Ubuntu20.04 系统禁用自带的Nouveau驱动
  6. 《SPA设计与架构》之认识SPA
  7. UI设计中顶部栏的设计要点
  8. 紫光展锐CEO楚庆:5G是人类最野心勃勃的连接计划
  9. IBM3650 5M 读取硬盘不成功
  10. hive报错:running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physica终极解决方式