基于浏览器的 B/S browsor server
基于客户端的C/S Client Server
区别:
b/s结构用户使用方便,要求比较低,升级和维护较为方便,可以跨平台使用。
缺点:安全性较低,复杂的功能性能比较低。
c/s结构:开发的发挥空间加大,性能较好,安全性高。升级维护难度较大。
2.web应用系统分类
静态网站: html,js,css
动态网站:
静态的页面:html css js
动态网站技术: jsp(java) asp(C#) php
动态网站的区别: 数据是动态。
3.网站的运行原理
- 输入域名(www.jd.com)
- 解析域名:找到对应dns服务器把对应域名的IP地址返回给浏览器
- 根据返回的IP地址访问真正的目标服务器
- 服务器返回浏览器需要的网站资源(html,css,js,图片,文字,数据)
- 浏览器展示相关资源。
4.常用的web服务器
-
Java : tomcat
-
C# : IIS
-
安装jdk:
选择安装文件安装
配置环境变量: 搜索“环境变量” -》 编辑环境变量配置 -> 系统环境下: JAVA_HOME 值:jdk的主目录-》path添加jdk信息: %JAVA_HOME%bin %JAVA_HOME%lib %JAVA_HOME%jre
-
启动tomcat : tomcat的安装目录->bin目录 -> startup.bat
-
关闭tomcat服务器: tomcat 的安装目录-> bin目录-> shutdown.bat
-
访问tomcat的默认网站: http://localhost:8080 localhost:127.0.0.1
-
IP : xx.xx.xx.xx xx(0-255) 唯一表示一个网络的一台电脑
-
端口: 唯一表示一个运行的程序。 80:网站的默认端口 8080:tomcat ftp:23 (0-65535)
-
修改tomcat的默认端口
找到tomcat安装目录下的conf -> sever.xml
<Coinnector port=“8080” …> 修改成 其他端口 (特殊端口不要用比如数据库3306)
重启tomcat的
-
http协议:超文本传输协议。 默认的端口:80
-
http协议请求的方式:
get 请求:只传输文本,会暴露地址,不安全;请求数据不能超过2k;效率高于post
post 请求:传输任意数据,不会暴露地址,安全;请求数据无限制;
-
URL: 全球统一定位器,网址
http://ip:port/路径
5.创建web项目
- 安装idea 安装idea(intellj idea官网下载) -> 参考破解文档。(复制破解文件,设置安装目录,复制激活码)
- new project -》 选择 java EnterPrise -》Web application(4.0) -》选择安装的jdk -》选择对应的jdk版本-》选择tomcat 服务器 (没有可以自己添加-找到Tomcat安装目录)-》选择项目名称和项目路径。
6.jsp的基础
jsp定义: java server page , 是一种动态网站开发技术标准
执行原理: 将java代码嵌入html代码中,由web服务器编程后生成静态HTML页面,浏览器展示。
7.创建jsp文件
选择工程的web文件夹->鼠标右键->new -> jsp/jspx->输入jsp的名称,确定
jsp页面组成:静态和动态组成。
动态部分包括:脚本标记 (java代码)
指令标记
动作标记
8.jsp的脚本标记
基本语法: <% java代码 %>
- jsp的脚本中只能出现java代码
- jsp脚本必须严格遵守java语法
- jsp的脚本可以嵌入到html页面的任意地方,且相互之间能够访问
- 各个脚本间的java语法必须是完整的
9. jsp的声明
可以在jsp中声明变量和方法
声明的语法:<%! 声明的变量和方法 %> int a; int main(){}
- 声明必须以;结尾
- 可以直接使用在<%@ page%> 已经声明的变量和方法,不需要重复声明
- 一个声明仅在一个页面有效。如果要在多个页面有效,用<%@ include%>
10.jsp的表达式
表达式可以直接将程序的数据输出到客户端。
表达式语法:<%= 变量和表达式 %> === out.println()
11.注释
java的注释: //
/*
*/
html注释: <!-- -->
jsp注释: <%-- --%>
快捷键: ctrl+/
12.jsp指令
page页面指令: 设置和定义页面的一些属性。
语法:<%@page 属性1=‘值’ 属性2=‘值’ %>
常用属性:
language 设置支持的脚本语言,目前只有Java
import: 导入jar包
isErrorPage: 是否是错误页面码。 默认值:false
errorPage: 当前页面出现错误,跳转到指定的url
contentType: 文档类型和编码格式: text/html charset=utf-8
变量,数据类型,操作符,选择,循环,方法,数组,String,list,Arraylist,set, 类,继承,多态,接口
13.idea的使用
设置idea属性: 菜单file -》 setting - 》edit
快速整理代码的快捷键: ctrl+shift+L
导入包的快捷键:alt+enter(回车键)
插入模板数据:alt+insert
14.JSP的内置对象
为了更加方便动态网站编程,jsp提供了9个内置对象。 可以直接使用,需要是实例化。
- request 客户端与系统信息交互用的。 一次请求有效
- response 响应客户端的信息:向客户端传递信息。
- out 控制数据的输出操作 , 跟脚本<%= %>一样。
- application 处理服务器级别的共享数据用。 存活与整个服务器运行期间
- session 回话级别的共享数据用。 存活网页的回话期间。
- config 取得jsp编译后的Servlet信息
- pageContext 存取和处理系统运行时的各种信息
- page 当前页面对象。
- exception 异常处理。
15.request对象
接收客户端通过http请求处理用的,向服务器请求,作用范围:一次请求有效。
request内置对象的方法:
- getParameter(参数名称) 获取请求中参数名称对应的值。 也就是input的name对应的值。
- getParameterValues(参数名称) 获取请求中参数名称对应的所有值。 name中存放的多值,比如CheckBox里面的值。
- setAttribute(string name,object obj) 设置属性
- getAttribute(string name) 获取指定属性
- getAttributeNames() 返回request对象所有属性名称集合
- getParameterName() 返回客户端所有name参数的值。
- setCharacterEncoding(String encoding) 设置正文中用的编码集
表单元素: 文本框,密码框,下拉框,单选按钮,复选框,提交按钮,重置按钮,文本域
<textarea>
<select>
16.response对象
服务器数据发送给客户端以响应其请求。
常用的函数:
- sendRedirect(url) 将客户端重定向到指定的url页面。
- setHeader(String name,String value) 设置htttp应答报文的首部字段和值及自动更新
- addCookie(Cookie cookie) 设置一个Cookie对象。
17.sesion 内置对象
会话就是页面在登陆的状态,用户在持续使用的过程中,会话期间Session存储变量持续有效,会话一结束,就失效。
session内置的方法:
setAttribute(String name,Object obj) 可以设定属性值
getAtrribute(String name) 可以获取属性值
removeAttribute(String name) 删除session对象中的属性值
isNew() 判断是否为新的Session。
可以在会话期间实现页面间的传递传输。
18.Application内置对象
是一个服务器级别的用户数据共享对象,可以实现多用户对数据的存取。
Application对象的常用方法:
setAttribute(String name,Object obj) 设置application对象的属性值
getAttribute(String name) 获取application对象的属性值
removeAttribute(String name) 删除对象的属性值
getRealPath(String path) 返回虚拟路径的真实路劲
request 请求对象 一次请求有效(客户端请求,请求信息:用户名,密码)
response 请求响应对象 服务器响应客户端请求(给数据,跳转面,设置页面信息)
session 会话对象(一直停留的预留时间30分,否则自动结束会话) 整个会话期间,页面可以传递信息
application 服务器内置对象,服务器运行期间有效。
request: getParameter();getParameterValues();setCharacterSet(“UTF-8”);setAttribute();getAttribute();
getRequestDistpacher(“跳转页面”).forward(request,response);
respsonse: sendRedirect(); setContextType();addCookie();
session: setAttribute();getAttribute();removeAttribute()
application: setAttribute();getAttribute();removeAttribute();
19.JDBC
Java操作mysql数据库的一种技术。
操作谁? 服务器地址,服务的密码账号,数据库名字
怎么操作? 查看数据; 添加数据,修改数据,删除数据。
- 连接数据库 怎么连接?
- 连接数据库后操作。
- 释放连接。
JDBC的操作步骤:
1.导入jar包
Class.forName(“com.mysql.jdbc.Driver”)
2.创立连接对象
String userName = “root”
String userPassword = “root”
String url = “jdbc:mysql://localhost:3306/数据库名称”
Connetion conn = DriverManager.getConnection(url,userName,userPassword);
- 定于sql语句
String sql = “insert into dept values(?,‘?’,‘?’)”;
4.执行sql语句
Statement stmt = conn.createStatement();
增删改:int n = stmt.excuteUpdate(sql);
查询: ResultSet rs = stmt.excuteQuery(sql);
5.处理执行结果
6.释放资源
stmt.close()
conn.close();
20.jdbc的对象
DriverManager :管理驱动类
- getConnection(String url)
- getConnection(String url,String username,String pwd)
url格式:jdbc:mysql://ip:端口/数据库 ?useSSL=false
useSSL=false; mysql5.0版本以上必须设置,禁止证书或者其它验证。
Connection:数据库的连接对象
可以获取sql的执行对象:
普通:createStatement();
预编译:prepareStatement();
可以获取存储过程的执行对象
可以进行事务管理
开启事务:setAutoCommit(false)
提交事务:commit()
回滚事务:rollback()
Statement:执行sql语句对象
执行DDL/DML: executeUpdate(sql)
执行DQL: executeQuery(sql)
返回 ResultSet类对象
ResultSet对象
存放查询结果的一个对象。
next() ; 返回true,表示ResultSet对象中还有数据
返回false, 表示ResultSet对象中没有数据
getString(参数) :返回列数据类型为String类型的列值,参数可以是索引也可以是列名。索引从1开始。
getInt(参数)
preparedStatement对象:
预编译sql语句并执行
conn.preparedStatement(sql);
设置预编译参数:
setXXX(索引,值)
XXX: 需要设置参数的数据类型。String,int
索引:1开始,按顺序设置参数
值需要设置的值。
21.JavaBean和jsp的标准动作
因为java+html写在一起的时候,阅读难度大、维护难度大,升级不方便等于原因,需要把两者分开,简化jsp页面,方便开发和维护。
JavaBean是Java写的一个实现特定功能的组件,可以重复利用,可以面向对象编程。
开发模式: jsp+javabean+servlet vue.js + spring boot
必须提供一个无参的构造函数。
JavaBean必须放到一个包,且这个类必须是一个公开的类(public)
JavaBean必须为属性提供get()或者set()方法,且属性必须为私有类型(private)
JavaBean要实现Serializable序列化接口。
包名:全部小写
类名:首字母大写
属性名:第一个单词全部小写,后面每个单词首字母大写
方法名: 与属性名命名方式相同
可以同时有多个不同的属性。通常都会用get或者set修饰。
例: 属性名:name
get设置: getName() 只读
set设置: setName() 只写
练习: Person
姓名 name 性别 sex 年龄 age 婚否 marri
封装数据的 Javabean: 对一个实体(表格)封装,提供一套完整的操作接口(增删改查)
封装业务的Javabean: 不需要针对实体,也没有get或者set方法,只有业务的操作方法。
使用标签的形式代替java脚本
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
useBean:在前端jsp页面创建一个javabean对象。
语法:<jsp:useBean id=“对象名” class=“包.类名” scope=“page”>
id: javabean实例化对象
class: javabean ,需要通过包名导入
scope: Bean实例化的存储范围,及有效范围
page: 当前page页面
request:request的请求范围
session: 整个会话范围
application: 整个应用方位
setProperty: 设置useBean创建对象中的属性值。
语法:<jsp:setProperty name=“BeanId” property=“Bean属性名称” value=“属性值” param=“请求参数” />
name: useBean中的ID值
property: bean的属性名称
value: 属性值
param: 自动从请求中获取对应参数值放入对象中。
getProperty:获取useBean创建对象中的属性值
语法:<jsp:getProperty name=“BeanID” property=“Bean的属性名” />
练习:计算长方形的周长和面积
1.创建 长 宽 面积 周长
2.jsp 输入 长 宽
3.jsp
forward: 请求跳转到另外一个html,jsp,Servlet中。
注意:forward相当于转发,不是重定向。
语法:<jsp:forward page=“url” />
22.servlet概述
why: 因为jsp文件中出现大量Java代码,显得混乱且不方便维护升级,开发难度大。为了能够使jsp只负责显示数据,后端逻辑代码交由后端处理,后端处理逻辑的技术servlet技术。
什么是servlet?
java servlet : java 的后端服务器小程序。小程序负责响应前端请求,并进行交互,最终让jsp专门负责数据展示。
Servlet 是javaweb最核心的内容,是Java提供的一门动态web资源开发技术。
Servlet Java EE的一个编程规范,其实本质是一个接口,我们只需要继承这个接口,重写servlet方法就可以实现复杂的后端服务器程序编写。
导入Servlet的jar包
Servlet-api.jar jsp-api.jsp
file-> project Structue -> libaries -> 找到对应的jar(tomcat中lib)-> 确定-> models -> 导入。
继承Servlet接口:
implements Servlet{}
导入Servletd的方法: Alt+ enter导入对方的方法。
Servlet的访问方式:
给Servlet类写注解: @WebServlet(“/demo01”)
访问路径: http://localhost:8080/web-项目名/demo01
补充:
继承的servlet类由容器负责创建对象,并负责调用对应的方法。
JavaWeb的处理流程:
实际上就是一个不断请求与响应的过程:
1. 客户端发送请求至服务器。
1. Web服务器接收请求并进行处理。
1. Web服务器将处理的结果响应给客户端,并展现在客户端界面。
输入http://localhost:8080/web-项目名/demo01可以访问服务器Servlet
http://localhost:8080 负责找到Tomcat服务器
web-项目名 找到对应Tomcat下的项目
demo01 可以访问到需要访问的servlet类。
找到对应的类后调用对应的方法实现需求
Service方法:
ServletRequest: 封装http请求的数据
ServletResponse: 封装相应的数据。
Servlet的生命周期
第一步:加载并实例化Servlet继承类,服务器在启动时或者第一次请求时就是实例化。
第二步:初始化服务相关信息。容器会自动调用init()函数,只能被调用1次。
编程可以通过重写init函数初始servlet的一些参数。
第三步:请求处理:当容器(Tomcat)收到请求后,会自动调用Service函数,并把请求的参数通过函数参数传递给它。然后根据情况适当调用doGet()或者doPost()两个函数。
重写doGet()或者doPost()函数即可。
第四步:销毁:一旦服务器停止服务,容器会调用destroy()函数。
HttpServletRequest对象
Javax.Servlet(接口)
接口:ServletRequest,ServletResponse,ServletContex,ServletConfig
类: ServletOutputStream,ServletInputStream,GenericServlet
HttpServletRequst对象常用方法:
String getParameter(String name) 获取页面提交指定名称的参数值。
String[] getParameterValues(String name) 获取提交相同名称的参数数组。
Enumeration getParameterNames() 获取请求中所有参数名的值放到Enumeration
Map getParameterMap() 返回保存了的请求的所有参数名和值的map对象 pzl 16
void setAttribute(String name,object obj) 设置request范围内的存储数据。
object getAttribute(String name ) 获取
Cookie[] getCookie() 获取request中的所有Cookie
String getMethod() 获取请求类型,如GET,Post
String getRequsetURI() 获取主机名到参数之间的路径
StingBuffer getRequestURL() 获取请求的url
String getRealPath() 获取当前项目的实际物理路径
HttpSession getSession() 获取当前会话的对象
getRequestDispatcher() 获取转发对象, 调用forword转发到另一个页面。
HttpServletResponse对象
封装了服务器响应客户端处理方法。
常用方法:
PrintWriter getWriter() 获取响应的打印输出流对象,可以用该对象向jsp输出内容。
void addCookie() 向响应中添加一个Cookie对象,也就是向客户端发送一个Cookie
void setCharacterEncoding(String enc) 设置响应的编码格式。jsp是utf-8 传递告诉对方编码方法
void sendRedirect(String path) 重定向
使用servlet API的原则
开发人员在开发的时候,通常继承HttpServlet类,然后从写里面的方法
原则:
重写doGet()方法处理get请求。
重写doPost() 方法处理post请求。
如果需要初始化工作,要重写init()函数
如果需要清理资源工作,重写destroy() 函数
实际工作:大多数都会重写doGet和doPost方法
请求转发和重定向
均可以跳转页面。
区别:
请求转发是同一个请求,在服务器端进行,浏览器url不会变。
重定向是一个新的请求,浏览器中显示的是新的url,request的值不能用。
重定向需要开启一个新的请求,比请求转发要慢一些。
经验:优先使用请求转发,请求外部服务器资源时用重定向。
Servlet API:Servlet Config
servlet容器初始化一个实例化对象,会为当前的servlet准备一个唯一的ServletConfig对象,实例化对象可以读取里面的内容初始化参数。
注意:ServletConfig只能针对当前配置的Servlet有效。
初始化信息位置: web.xml 中配置。
数据库的用户名、密码、数据类型等。
配置xml:
<servlet> 可以每个Servlet类有个配置
\<servlet-name> 别名(一般用类名)\</servlet-name>
<servlet-class> 实际类(包名.类)</servlet-class>
<init-param> 可以有多个参数
<param-name> 参数名称 </param-name>
<param-value> 参数值 </param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name> 别名
<url-partern> 当前这个Servlet的访问路径 如:/demo01
</servlet-mapping>
Servlet中获取配置信息:
a.获取连接对象 sc = this.getServletConfig()
b.利用对象获取值: sc.getInitParameter(String name) 例:sc.getInitParameter(“uid”)
ServleAPI: ServletContext
可以实现多个Servlet获取相同的信息,可以实现多个Servlet初始化。
注意:多个Servelet类共享初始化数据。
配置:
<context-param>
<param-name> 参数名称
<param-value> 参数值
获取:获取配置对象 cs = this.getServletContext()
利用对象获取值: sc.getInitParameter(String name)