java web学习笔记(持续更新)

Posted z1427094386

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web学习笔记(持续更新)相关的知识,希望对你有一定的参考价值。

java web学习笔记

一、Java Web简介

web: 前端的一些内容,在浏览器中展示的内容,html + css + js
Java Web: 使用Java语言来编写前端页面 ;

jsp属于Java ,所以学习jsp实际上就是学习Java的一个类/接口 Servlet

jsp 全名称:java server page Java服务器页面 ( 动态资源页面)

静态资源页面

当这个页面写完之后,内容就固定死了,不管在何时何地打开,页面展示的内容都是一样的;页面中的数据是死的;

**动态资源页面 **

页面中的数据会变化,写完之后,在不同时间、不同条件下,打开页面展示的内容可能会不一样;页面中的数据不是死的;

将html原本内容和从数据库中查询出来的内容重新合并组成一个新的html页面,来进行展示。

二、认识Servlet

JavaWeb程序 --> 将一个请求路径( 网络地址 ) 变成一条sql语句,发送给数据库进行查询;

1、什么是Servlet?

什么是Servlet? JavaWeb的三大组件 ( Servlet Filter过滤器 Listener监听器 )
    小服务,小组件,
主要作用:
    接收用户发来的请求( 路径及数据 ),给用户响应对应内容( 页面 );

2、请求路径

一般来讲,请求路径指的是 网络访问路径 (不带盘符,基本格式为:协议://ip地址:端口号/路径 )
网络路径:
    http://192.168.15.52:8080/web01/hello.html
    http://220.181.38.149:80 --> 百度首页 www.baidu.com (域名商)
本机路径:带盘符的路径
    D:\\工作\\apache\\apache-tomcat-8.5.57
    
将一个本地路径,变成网络路径
需要使用到服务器:tomcat服务器服务 服务器机器

3、tomcat

tomcat的安装,百度搜索tomcat,去官网下载core中的zip格式,解压版
解压之后的tomcat分布:
    bin:放置的都是可执行文件,包含启动执行文件startup.bat( 如果点击之后,出现闪退的情况,说明jdk的环境变量java_home没有配置好 )、
关闭执行文件shutdown.bat;
    conf:放的都是tomcat的配置文件,tomcat的端口号、编码格式、服务配置、支持的文件配置;server.xml web.xml
    lib:tomcat也是Java编写的,在执行的时候,同样需要Java jar包的支持,都存放在这;编写servlet时需要的jar包
    logs:日志记录文件夹,在使用tomcat过程,出现问题,或者没有问题是,形成的日志文档,都在这个文件夹中;
    temp:临时文件,可以删除,但每次执行时都会自动创建
    webapps:tomcat实际执行过程中,所访问的文件地址,所有的页面文件都保存在这个文件夹中;ROOT表示没有项目名
    work:在执行tomcat时,程序中如果有jsp文件,会在这个文件夹中转换成.java文件

4、Servlet的使用

jdk java开发工具包 --> ( jre java运行环境 --> ( JVM + java运行jar包,jdk自带jar包 ) + java开发工具 )
Servlet是Java中的接口,不属于jdk自带jar包,需要导入第三方的jar包( tomcat ) ;
    1、先导入tomcat的jar包,到项目中;
    2、创建一个AServlet,实现Servlet接口

将一个类变成Servlet的三种方式
    1、实现Servlet接口,重写接口中的全部方法;
    2、继承GenricServlet抽象类,重写抽象方法;
    3、继承HttpServlet抽象类,根据需要进行重写;

三、Servlet简单应用

Servlet是 javaweb的三大组件之一,接受请求,给出响应;

1、创建Servlet的方式:

3种创建Servlet的方式:

  1. 通过现实Servlet接口,重写全部方法;
  2. 通过继承GenericServlet抽象类,重写service()方法;
  3. 通过继承HttpServlet抽象类,重写自己需要的方法;(开发种常用)

一般情况下,Java程序,想要执行需要通过main方法,声明对象,使用对象进行调用方法; Servlet的使用

编写完成Servlet之后,需要将Servlet类与路径相互绑定;

2、Serlvet的生命周期

Serlvet的生命周期: Servlet对象从出生、使用、死亡; Servlet会自己创建对象,然后自己调用自己 的生命周期方法;

3个生命周期方法;

  1. init(ServletConfig servletConfig) 初始化方法,看成servlet对象的出生; 当servlet对象一旦被创建时,就会马上执行init方法
  2. service(ServletRquest request , ServletResponse response) 服务方法,是servlet的主要方法,每当路径被请求时,就会执行此方法;
  3. destroy() 结束方法,当Servlet对象一被销毁,在销毁之前的时间执行此方法;

3、路径与servlet绑定的方式

1、使用web.xml配置文件进行绑定; 比较复杂
<servlet>
    <servlet-name>servlet</servvlet-name>
    <servlet-class>cn. hp. Aservlet</Servlet-class>
</servlet>
servlet-mapp1ng>
    <servlet-name>servlet</servlet-name>
    <!--当用户请求http://locathost:8080/web/a-->
    <url-pattern>/a</url-pattern>
</servlet-mapping>

2、使用注解的方式:简单 
在类的名称上一行,@WebServlet("/b");

4、servlet种的request 和 response

request:数据类型: HttpServletRequest请求
    包含:用户发送来的内容以及浏览器的信息等等;
        路径之后跟?key=value&key=value浏览器请求参数,当用户使用get方式时,就是用户发送的请求操作内容
    用来接收用户从浏览器发送过来的数据
   request.getParamter("key的名称") 获取到参数的value
   
请求转发:表面上还是你这个路径,但实际显示的内容由转发后的对象进行处理
    只能转发给本程序中的路径
req.getRequestDispatcher("success.html").forward(req,resp);

请求包含:用法和转发一样 
    语法中将forward换成include 
req.getRequestDispatcher("success.html").include(req,resp);

response:数据类型:HttpServletResponse 响应

重定向:将本次的请求,重新换了一个路径进行访问; 
    此路径,不局限于本项目,可以访问任意网路路径;
请求转发和重定向的区别: 
1、请求转发由request对象发出,只能发送给本项目中存在的路径 重定向由response对象发出,不仅可以发送给本项目中的路径还能够发送给外部路径; 
2、请求转发中一共有一个请求,导致页面中的路径只会是请求的路径 重定向包含两个请求,一个是用户原请求,第二个是servlet做的重定向请求; 
3、请求转发可以支持post、get的请求 重定向第一个请求post、get都支持,第二个请求只支持get方式

4、服务器中,页面的跳转

当一个路径以 / 开头, /就代表 http://localhost:8080/ 
当一个路径不以 / 开头, 就是把原路径的最后一个文件名换成当前的路径内容 

如 原文件路径 http://localhost:8080/web01/a.html ; 
login 路径 --> http://localhost:8080/web01/login 
/login 路径 --> http://localhost:8080/login 
只有在一种情况下,两者跳的路径相同,javaweb项目没有设置项目名时

四、JSP简介

1、JSP是什么?

JSP:是一种页面,java server pages java服务器页面;想要这个页面运行,必须通过服务器中启跳转

只能通过网络访问的方式查看效果,不能直接从本地通过浏览器打开; http://localhost:8080/web02/i ndex.jsp

2、JSP和与html的区别?

1、html是静态资源页面,jsp是动态资源页面,页面内的数据会改变; 
2、html中只能使用标签,进行编写内容;jsp = html + java代码 + 指令 ;

3、jsp三大指令

三大指令

  1. page
  2. taglib
  3. include
在jsp页面最上方<%@ 指令名 属性... %> 
1、page 用来配置当前jsp页面中的相关信息 
属性:
    contentType:用来配置当前jsp中文件的类型,以及编码格式 
    session:设置当前页面是否支持会话,false表示页面不支持session对象 
    isErrorPage:设置当前页面是否为错误页面 
    errorPage:指定哪一页面是错误页面 
    pageEncoding:设置当前页面的编码格式 
    import:向页面中导入Java的jar包 
    isELIgnored:用来设置当前页面中是否需要忽略el表达式 
2、taglib:用来向jsp页面中导入 jstl表达式的 
3、include:用来将多个页面合并成一个页面进行展示;

4、在jsp中Java代码编写格式

Java代码编写片段:
    <% Java代码 %> 
Java代码输出片段:
    <%= 将数据内容输出到页面中 %>

5、jsp的作用域

四大作用域

  1. page
  2. request
  3. session
  4. application
域:用来保存数据;只不过,不用的域大小不一样,保存的数据时间也不一样; 
page域: 页面域,当前页面中的全部数据,整个页面都共享;pageContext 只能在本页面中进行使用 
request域:请求域,在同一次请求中,所有数据共享;域对象 request 
    在servlet中就是 HttpServletRequest类型的对象 
    在jsp中存在这默认内置对象,这个对象可以不用声明,直接在jsp中使用 对象名:request 
session域:会话域,给服务器一次请求,服务器给一次响应,来回的交互过程就叫会话, 域对象: session 
    session即打开浏览器后的操作,都归为一次session,一旦关闭浏览器,此次session即结束; 
    随着第一次请求而创建,随着浏览器的关闭而销毁; 
application域:应用域,最大的一个域,只要将数据保存在应用域中,在整个程序的任意位置都可以 获取到应用域中的数据, 
    随着程序的启动而创建,随着程序的关闭而销毁; 
    
如何使用域中数据; 
    向域中存数据:req.setAttribute("key","value"); 
    从域中取数据:req.getAttribute("key");

6、jsp的本质

先将jsp转换成.java文件,然后通过Java代码将JSP页面以及域对象数据,获取之后,重新拼接成一个新 的页面; 
域数据 和 页面参数

7、域数据 和 页面参数

页面参数数据:
    http://localhost:8080/web02/login?username=zs&pwd=123 
?之后都是页面参数数据 
    在后端servlet中,通过request.getParamter(key)方法进行获取 
域数据:必须是有放才有拿; 
    放数据:域对象.setAttribute("key",value); 可以在servlet中放、也可以在jsp中放 
    拿数据:域对象.getAttribute("key"); 可以在servlet中拿、也可以在jsp中拿

五、JSP内置对象

1、jsp的组成部分 html + java代码 + 指令

hmtl: 超文本标记语言

hmtl: 超文本标记语言
表格标记:格式化显示数据;
<table> 声明一个表格
    <tr> 声明一行
        <th></th> 标题,加粗居中
        <th></th>
        <th></th>
    </tr>
    <tr> 声明一行
        <td></td> 声明一个单元格
        <td></td> 声明一个单元格
        <td></td> 声明一个单元格
    </tr>
    <tr> 声明一行
        <td></td> 声明一个单元格
        <td></td> 声明一个单元格
        <td></td> 声明一个单元格
    </tr>
</table>

表格的特殊属性:

表格的特殊属性:
给table设置的属性:cellspacing="" 设置当前表格中每个相邻单元格之间的间距
给td设置的属性:colspan=""设置当前单元格占几列 rowspan="" 设置档当前单元格占
几行
表单标记:收集用户的信息,让用户进行填写、选择、点击操作;
<form action="后端地址">
    <input type="text" value="默认值" placeholder="提示内容" /> 文本输入框
    input类型 四种类型( 输入框、选择样式、按钮样式、隐藏样式 )
    <input type="password" /> 密码输入框  // 
    <input type="radio" /> 单选框
    <input type="checkbox" /> 多选框
    <input type="button" /> 默认按钮
    <input type="submit" /> 提交按钮
    <input rype="reset" /> 重置按钮
    <input type="file" /> 文件上传按钮 上传头像、上传图片、上传表格
    <input type="image" src="图片地址" /> 图片按钮
    <input type="hidden" /> 隐藏样式,通常保存不想让外人看到的数据;不在页面中占任
    何位置
    <select multiple size="2"> 下拉框样式 multiple 设置当前下拉框支持多选,
        size 设置拉下展示个数
        <option>选择1</option>
        <option>选择2</option>
        <option SELECTED >选择3</option>  //  默认选3
    </select>
    大文本框
    <textarea rows="行数" cols="列数"> 大文本框
</textarea>
</form>
使用表单进行前端后端交互,必须给每个标记一个name属性,该属性代表着后端页面中接收用户操作时 的key值,来获取value;

属性
readonly 只读属性
disabled 禁用属性 变成灰色的了 相当于把它删除了
文本输入框 <input type="text" readonly>
<br/>
密码输入框 <input type="password" disabled>
<br/>


2、JSP的九大内置对象

jsp可以写Java代码,遵循Java的规范,一个方法想要执行,必须通过 对象.方法名() 调用,创建对象必须使用 new 关键字
九大内置对象,表示不用创建对象,这个对象由jsp自己创建,可以直接使用
当一个jsp文件被编译之后,会变成一个servlet文件,具备servlet的所有特征;
1、out对象,像页面中输出内容对象;
    使用:out.println("内容")
2、config对象,servlet配置信息对象;
    config.getServletName()
3、exception对象,不是每个页面中都有的对象,只有在页面被设置为isErrorPage="true"时,才能使用
    exception.getMessage();
4、page对象,当前页面对象, this
5、application对象,应用域对象;用来存储数据的;
    作用范围:当程序启动时,自动创建应用域,当程序停止运行时,应用域被销毁;只要程序在运行,这个域一直在;
    通常使用:项目的公共资源;spring中的数据库连接对象、日志对象功能等
    application.setAttribute("key",value);
6、session对象,会话域对象,并不是每个页面都支持session( page指令的session="false" 表示当前页面不支持session )
    作用范围:当一个浏览器第一次发送请求时,自动创建会话域,浏览器被关闭时,会话域销毁;当会话超时时,会话域也自动销毁;
    通常应用:保存当前登录账号信息;
    session.setAttribute("key",value);
    session.getAttribute("key");
7、request对象,请求域对象使用:
    作用范围:在一次请求中,随着请求的发出而创建,随着响应接收而销毁;
    通常应用:登录验证验证,程序中的搜索框,
    请求对象使用:
    String value = request.getParamter("参数key");
8、response对象,响应对象;向页面中输出一些内容 文字、html代码、html页面、jsp页面
    response.getWriter().println("内容")
    response.sendRedirect("页面路径")
9、pageContext对象,页面域对象,通常不使用页面域自己的功能
    1.此对象一个顶九个;可以获取其他八个对象;
    JspWriter out = pageContext.getOut(); 获取out对象
    ServletConfig config = pageContext.getServletConfig(); 获取config对象
    Exception exception = pageContext.getException(); 获取exception对象
    Object page = pageContext.getPage(); 获取page对象
    ServletContext application = pageContext.getServletContext(); 获取application对象
    HttpSession session = pageContext.getSession(); 获取session对象
    ServletRequest request = pageContext.getRequest(); 获取request对象
    ServletResponse response = pageContext.getResponse(); 获取response对象
2.用来向其他三个域中存放数据
    pageContext.setAttribute("key",value,域值);
域值:
    1 表示 向page域中存放数据
    2 表示 向request域中存放数据
    3 表示 向session域中存放数据
    4 表示 向application域中存放数据
从其他三个域中取数据
    pageContext.getAttribute("key",域值)

六、 javaBean与JSP动作

1、java类

Java的数据类型: 
一:基本数据类型
 1.整数型:byte1字节 -128~127short(-32768~32767) int4字节) long 
 2.小数型:float double 
 3.布尔型:boolean 
 4.字符型:char2字节 0~65535) ASCII表,将char类型和int类型相互换 
 二:引用数据类型 
 1.数组:表示一组同一类型的内容; 
 2.类: 
3.接口 
Java设置数据类型的目的: 
Java中的变量和常量: 
常量:在整个程序运行过程中,不会被改变的值; 所有的数字常量,默认为int类型 
变量:在整个程序运行过程中,可能会被改变的值;

2、Java程序执行顺序:

从上往下,同一行从左往右;遇到等号,从右往左; = 表示赋值
Java:万物皆对象,万物皆可new; 一new一对象;

3、JavaBean

JavaBean是一种Java的定义规范,用来描述一个类; 
Java的三大特性;封装、继承、多态; 
封装:
    将属性使用private私有化,对外提供公共的方法进行访问; 
    根据对此类的不同属性的需求,提供响应的set\\get方法; 
属性:
    只读属性 只设置get方法 只写属性 只设置set方法 
    
JavaBean类:
    将一个Java类,通过封装的方式设置属性,并对每一个属性设置set\\get方法,以及有参无参构造、 toString()方法,统称为JavaBean类 
JavaBean的属性:
    由set\\get方法决定,将set\\get方法中 set\\get去掉后,
属性名:
    首字母的小写后的值, 即为属性名; 
// getStudentNumber --> 属性:studentNumber 
// setStudentNumber1 --> 属性:studentNumber1

4、JSP动作及cookie的使用

三大指令:

 <%@ page /> <%@ taglib /> <%@ include />

jsp动作:jsp动作标签

基本格式:
    <jsp:标签名 属性1="属性值1" 属性2="属性值2" > </jsp:标签名>
作用:
    jsp --> servlet 动作标签就相当于servlet中的语句,所有的动作标记,都相当于Java中的
代码;
1. <jsp:forward page="page1.jsp" /> 将请求转发语句直接使用jsp代码进行书写; 
作用:
    请求转发
相当于servlet中的
    request.getRequestDispatcher("page1.jsp").forward(request,response);
2. <jsp:param name="" value=""/> 将请求参数保存在请求路径上
    使用时,需要放在<jsp:forward> </jsp:forward> 此标签之内,作为请求参数传递,不会暴露在请求路径中;
3. <jsp:include page="page1.jsp"> 请求包含动作和指令 <%@ include page = page1.jsp /> 一样的操作;
    只不过两者中<jsp:include>在编译期就被中执行了
4. <jsp:useBean id="cat2" scope="request" class="cn.hp.model.Cat" /> 
    在request域中去需寻找cat2,如果没有找到,则新建一个cat2,并保存在request域中;如果存在,就直接获取这个值;
    此动作,只是用来保存数据和获取数据的;
    id:在域中创建/获取名字为当前值得数据 相当于 key
    class:保存JavaBean的对象数据类型,必须使用类的全路径方式
    scope:从哪个域中进行获取/保存数据 page request session application
5. <jsp:getProperty name="对应useBean的id值" property="对应JavaBean对象的属性"/>
6. <jsp:setProperty name="对应useBean的id值" property="对应JavaBean对象的属性"value="设置的属性值"/>


5、cookie

项目架构:
    C/SClient / Server 客户端/服务器 项目 ,如 QQ 微信 LOL 吃鸡
        优势:当恶意修改数据时,不仅要破坏服务器内容还需修改客户端内容,安全性比较高;
        劣势:一旦需要维护,先将服务器进行升级,然后同步客户端数据;
    B/SBrowser / Server 浏览器/服务器 项目 , 淘宝 京东 唯品会
        优势:只需要维护服务器端,不用操心客户端的内容;
        劣势:只要一破坏服务器端数据,全部数据都会受影响;
java ee 项目,主要是使用 c/s项目模型;

使用cookie完成:
1.小饼干、小甜点;存在于用户电脑中,浏览器中进行保存;样式key1=value1;key2=value2
    在浏览器第一次请求服务器时,是不会携带cookie的,只有请求过服务器之后,服务器会将
cookie放在响应中,一起发送会浏览器;浏览器在接收到cookie之后,会将cookie数据保存在本地中(硬盘
中某一浏览器的存储地址中);当下一次再去访问相同路径时,再将cookie携带在request请求中一起发送给
服务器;每一个浏览器的cookie是独立的,不通用的;
2.session:会话域,
    从服务器中产生,在用户的电脑中是看不见的;
域范围:
    打开浏览器第一次请求服务器,到关闭浏览器为止;

cookie的使用

Cookie cookie = new Cookie("key","value");

七、MVC模式

jsp组成: html java代码 指令

早期的Javaweb项目,将全部的内容编写在jsp页面中,不仅编写html页面样式,同时还写Java代码;

导致页面内容非常繁杂,一旦发生错误,出现bug,调试成本非常高;

1、MVC设计模式

MVC设计模式,针对项目架构进行设计,将整个项目的代码分成几个包,每个包里用来编写哪种内容;
    MModel层,模型层,保存数据的层 JavaBean,用来接收数据所使用的类;存储数据Bean 业
务逻辑Bean
    VView层,视图层,就是给用户展示数据的层,包含页面的样式,html、jsp
    CController层,控制层,控制页面跳转,控制页面中显示的内容;servlet
MVC设计模式,不是独属于Java的,而是适用于所有的B/S( 浏览器/服务器 )项目;

Java出了独有的 三层架构模式
    页面层:web层,程序中所有和页面有关的内容,都归属于web层,包含页面、页面跳转、页面数据
相当于MVC中的 VC
    业务逻辑层:service层,用来处理业务请求,相当于MVC M
    持久层:dao层,所有和数据库打交道的内容,都归属于dao层,就是使用Java操作数据库进行增、删、改、查;相当于MVCM
java中的容器:保存数据的 
    变量、数组、集合(List Set Map)、对象

2、三层架构

根据三层架构和mvc模式,将Javaweb项目设计为:( 将项目进行分层,分包 )

src下的包:
    model包:用来写JavaBean类
    dao包:用来进行和数据库之间打交道
    service包:用来对项目中的业务做处理
    servlet/controller包:用来写页面跳转的类、数据传递的类; Servlet
    将页面内容全部放在web文件夹下编写;
    util包:(工具包) 针对项目中的额外工具而创建的;

3、 JDBC

jdbc: java database connection Java数据库连接 使用Java语言操作数据库
    java:属于一种编程语言,sun ( JDBC接口,一套数据库相关的规则 )
    数据库:数据库语言,数据库分为多种,sun:mysql OracleOracle 微软:sqlserver 每
个厂商按照Java的接口生产对应的一套Java操作对应数据库jar包;
    mysql: mysql.jar oracle.jar sqlserver.jar

JDBC的使用

操作MySQL:DML
1、找到mysql连接Java的jar包,将jar包导入到web程序中;
2、告诉程序,我要使用的数据库是哪一个;加载相应的数据库驱动;就是创建一个MySQL的数据库对象;
    Class.forName("com.mysql.jdbc.Driver");
3.知道了是哪一个数据库,接着就要连接到数据库哪一个库中;要指定连接的库的名称,以及使用的用户名、密码
指定连接的库的名称 : 
    url: 标准格式 三部分
    jdbc: 各个厂商自己规定的连接写法 mysql://localhost:3306 
    连接的数据库及参数 /db?key=value&k2=v2
如: jdbc:mysql://localhost:3306/db?characterEncoding=utf8
    用户名:root 密码:root/123456
    通过上一步的驱动加载,会告知程序中驱动管理器,接着可以使用驱动管理器将url,username,password发送给数据库,从获取一个Java与mysql数据库之间的连接;
Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "root", "root");
4.通过连接,创建一个查询编辑器(可以用来编写sql语句,并且执行的 )Statement statement = connection.createStatement(); statement对象就是查询编辑器,可以执行sql语句
5.编写一条sql语句,并执行,执行DML语句,得到受影响行数
    int update = statement.executeUpdate("insert into dept values (50,'实训部','郑州')");
6.执行完毕后,将全部资源进行关闭,先创建的后关闭,后创建的先关闭;
    statement.close();
    connection.close();

DQL:4步与DML操作相同;
java web学习笔记(持续更新)

Java学习笔记持续更新

HTML/CSS/JavaScript学习笔记持续更新

RabbitMQ学习笔记(持续更新ing)

PHP全栈学习笔记12

MySQL 学习笔记(持续更新)