java web学习笔记(持续更新)
Posted z1427094386
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web学习笔记(持续更新)相关的知识,希望对你有一定的参考价值。
java web学习笔记
- 一、Java Web简介
- 二、认识Servlet
- 三、Servlet简单应用
- 四、JSP简介
- 五、JSP内置对象
- 六、 javaBean与JSP动作
- 七、MVC模式
- 八、el表达式
- 九、JSTL标准标签库
- 十、SQL攻击
- 十一、ajax
一、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的方式:
- 通过现实Servlet接口,重写全部方法;
- 通过继承GenericServlet抽象类,重写service()方法;
- 通过继承HttpServlet抽象类,重写自己需要的方法;(开发种常用)
一般情况下,Java程序,想要执行需要通过main方法,声明对象,使用对象进行调用方法; Servlet的使用
编写完成Servlet之后,需要将Servlet类与路径相互绑定;
2、Serlvet的生命周期
Serlvet的生命周期: Servlet对象从出生、使用、死亡; Servlet会自己创建对象,然后自己调用自己 的生命周期方法;
3个生命周期方法;
- init(ServletConfig servletConfig) 初始化方法,看成servlet对象的出生; 当servlet对象一旦被创建时,就会马上执行init方法
- service(ServletRquest request , ServletResponse response) 服务方法,是servlet的主要方法,每当路径被请求时,就会执行此方法;
- 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三大指令
三大指令
- page
- taglib
- 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的作用域
四大作用域
- page
- request
- session
- 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.整数型:byte(1字节 -128~127) short(-32768~32767) int(4字节) long
2.小数型:float double
3.布尔型:boolean
4.字符型:char(2字节 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/S: Client / Server 客户端/服务器 项目 ,如 QQ 微信 LOL 吃鸡
优势:当恶意修改数据时,不仅要破坏服务器内容还需修改客户端内容,安全性比较高;
劣势:一旦需要维护,先将服务器进行升级,然后同步客户端数据;
B/S: Browser / 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设计模式,针对项目架构进行设计,将整个项目的代码分成几个包,每个包里用来编写哪种内容;
M:Model层,模型层,保存数据的层 JavaBean,用来接收数据所使用的类;存储数据Bean 业
务逻辑Bean
V:View层,视图层,就是给用户展示数据的层,包含页面的样式,html、jsp
C:Controller层,控制层,控制页面跳转,控制页面中显示的内容;servlet
MVC设计模式,不是独属于Java的,而是适用于所有的B/S( 浏览器/服务器 )项目;
Java出了独有的 三层架构模式
页面层:web层,程序中所有和页面有关的内容,都归属于web层,包含页面、页面跳转、页面数据
相当于MVC中的 V和C
业务逻辑层: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 Oracle:Oracle 微软: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学习笔记(持续更新)