20200303
一、基础知识介绍
Web应用程序:就是在浏览器里运行的程序,网站也可认为是一个小型web应用程序。
软件架构:
B/S(Browser/Server)模式:浏览器/服务器模式,web应用程序就属于B/S模式。
C/S(Client/Server)模式:客户机/服务器模式,比如:QQ。
二、搭建Java web的开发环境
1、安装JDK,JDK就是JAVA的开发工具包。
2、安装Tomcat,web服务器软件,主要用于网站的发布。PHP的常用的web服务器软件是Apache,微软的web服务器软件是IIS。
3、安装eclipse,集成开发环境(IDE)。
4、在eclipse中新建web项目
操作:"File"->"New"->"Dynamic web project"
项目的结构介绍:
Java Resource:放java程序的目录,其中src里存放自己写的java程序
build:主要放java程序编译后class文件。
WebContent:站点根目录,主要存放前端的资源和jsp文件。
5、新建一个jsp页面
jsp页面的组成:html代码和java程序片组成。
在jsp页面嵌入java代码的三种方式:
Java程序片:<% %>
Java表达式:<%= %>
Java成员变量:<%! %>
java成员变量的生命周期为Tomcat的运行周期,就像Java类的静态变量一样,可被多个该类的对象所共享。
三、jsp页面常见的内置对象
out,request,response,cookie,session,application
所谓内置对象就是直接在页面中使用,不需要通过类来创建的对象。
1、out
out对象主要向浏览器输出内容,它的主要方法是print(),println(),write()
2、request
请求对象,主要用来封装客户端的请求,包括客户端的操作系统、浏览器、URL和发送数据。
常用的方法:
request.setCharacterEncoding("UTF-8") //设置请求对象的字符编码,防止中文乱码
request.getParameter("参数名") //获得请求里的某个参数的值
request.getParameterValues("参数名") //获得某个参数的多个值,返回的是一个字符串数组。
前端知识补充:
表单的中常用的控件
表单:<form method="请求方式" action="处理请求的服务器端地址">
请求方式:
GET:发送的数据是附在URL后面,在地址栏输入地址或点链接都是GET请求。
POST:通常表单提交的请求最好是POST
文本框:<input type="text" >
id:给浏览器用的,name:是给服务器的
密码框:<input type="password" >
提交按钮:<input type="submit" >
重置按纽:<input type="reset" >
单选按纽:<input type="radio">
复选框:<input type="checkbox">
下拉列表:
<select name="...">
<option value="值1">值1</option>
...
</select>
3、response
响应对象,是由服务器对用户请求作出的响应。
常用方法:
response.sendRedirect("地址") //重定向到某个页面
例:response.redirect("login.jsp"); //跳转到login.jsp页面
response.setHeader("页面文件头的属性名","页面文件头的属性值")
例:response.setHeader("refresh","3;url=loginSuccess.jsp"); //3秒后跳转login.jsp页面
response.setContentType("响应内容打开的应用程序类型");
例:response.setContentType("application/msword"); //用本地的word打开响应内容
4、Session
会话,是指客户端与服务器的一次会话,它的生命周期从用户访问网站开始直到离开网站。服务器为每一个访问用户创建session对象,每个用户的session对象互不相同。
常用方法:
session.setAttribute("键名",键值) //键值的类型是Object类型
session.getAttribute("键名") //获得session对象里面指定键名的键值,该方法返回类型为Object
session.removeAttribute("键名") ///从session对象里移除指定的元素
session.invalidate() //让session失效,一般在用户退出的时候使用
session的生存期限取决于下面几个因素:
1)用户是否关闭浏览器 2)是否调用了invalidate()方法 3)是否达到最长的"发呆"时间
5、application
应用程序对象,web服务器启动后就会产生application对象,直到web服务器关闭,在此期间application对象可被所有的用户所共享。
常用方法:
application.setAttribute("键名",键值)
application.getAttribute("键名")
application.removeAttribute("键名")
application和session的区别:
session跨页面共享数据,但每个用户的session数据各不相同,属于用户级的。
application跨页面、跨用户共享数据,属于应用程序级的。
6、Cookie类
//强调一下,cookie不是jsp内置对象,只是它是web常用的技术,所以也放在这一块写了。
cookie是在客户端保存一些文本信息,例如在保存用户的用户名和密码,以便下次访问这个网站时,直接从本地硬盘读取相应的信息,封装在请求对象里,服务器可从请求对象里获得cookie信息。
常用操作:
(1)创建一个Cookie对象
Cookie c1=new Cookie("键名","键值"); //只能存储文本型数据
(2)获取cookie对象的键和值
cookie对象.getName() //获得 cookie对象的键名
cookie对象.getValue() //获得cookie对象的键值
(3)获取某个cookie对象
请求对象里有多个cookie对象,如何来获得指定的cookie对象?
//比如找键名为"username"的Cookie对象的值。
String userNameValue=""; Cookie[] cookies=request.getCookies();//获取请求对象里的所有Cookie对象 for(Cookie c:cookies){ if(c.getName().equals("username")){ userNameValue=c.getValue(); break; } } //userNameValue就是键名为username的Cookie对象的值
四、JavaBean
Java类的一个实例,通常是实体类的一个对象,实体类一般是专门用来存储数据的,一般要用公开的getter()和setter()方法。一般对应数据库中的一张表。业务类一般用来处理业务逻辑的。
1、JSP的动作标记
(1)usebean
格式:<jsp:usebean id="bean的名字" class="bean的类名" scope="范围" ></jsp:usebean>
功能:如果在指定的范围(隐含对象:request,session,application)内,没有对象,JSP就会创建一个bean,如果有的话,就取这个对象。
(2)getProperty
格式:<jsp:getProperty name="bean的名字" property="属性名" />
功能:取bean的属性
(3)setProperty
格式:<jsp:setProperty name="bean的名字" property="属性名" value="属性值" />
练习一:
1、新建一个产品类Product(实体类)
2、新建一个产品服务类ProductService(业务类)
添加一个方法getProducts(),获得所有产品
3、新建jsp页面ProductList.jsp,呈现所有产品。
练习二:利用session技术实现添加产品功能
1、设计一个添加产品的表单ProductForm.jsp
2、接收并处理输入的产品数据的页面AddProduct.jsp
3、修改并完善数据展示页面ProductList.jsp
JSP的指令标记
<%@ page import ...%> //页面指令
<%@ taglib prefix="c" ...%> //jstl标签库指令
<%@ include file="" %> //包含指令
五、 Servlet
概念:它就是Java程序,设计目的是开发动态web资源。
sevrlet是接口,HttpServlet实现Servlet接口的类,我们写的Servlet程序是继承HttpServlet,需要重写两个方法,一个doGet();另一个doPost();
创建Servlet程序
helloWorld(camel命名法)
HelloWorld(pascal命名法)
ASP
JSP(Java Server Page)
Servlet最常用的是作控制器(Controller),接收请求,调用业务类的方法处理数据,发送数据到视图(JSP)。
MVC
M:Modal(模型)
V:View(视图)
C:Controller(控制器),Servelt
六、EL和JSTL
EL(表达式语言)
可以在jsp页面直接使用隐含对象(pageContext,request,session,application)
格式:${表达式}
例如:${product.name}
JSTL:JSP Standard Tag Libray(JSP标准标签库)
html标签:<div>
jsp标签:<jsp useBean...>
jstl标签:<c:forEach ...>
使用jstl
(1)下载jstl的jar包,复制到WEB-INFO目录下。
(2)在使用jstl的jsp页面中,加入指令标记引入核心库,
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
引用jstl的目的是为了团队协作开发,前后端分离。
0407练习一:
设计一个添加产品表单,表单数据提交给Servlet程序处理后,将数据发送给jsp页面并显示。
1.设计一个添加产品的表单ProductForm.html
2.新建一个Servlet程序AddProductServlet1.java
3.新建视图ProductView.jsp页面展示Servlet传过来的数据
七、Java访问MySQL数据库
MySQL适合中小型项目,Oracle适合中大型应用程序。
Java使用mysql
(1)下载mysql的驱动
(2)访问mysql数据库
(一)使用MySQL CLI访问mysql数据库
c:/>mysql -u <用户名> -p<密码>
常见的命令:
mysql>show databases; //显示所有的数据库
mysql>use <数据库> //使用数据库
mysql>show tables; //显示当前库下的所有表
mysql>desc <表名> //查看表结构
mysql>create database <数据库名> //创建数据库
mysql>create table <表名>(<列的定义>,...)
例:
create table product(
id int auto_increment primary key, //auto_increment是自动编号
name varchar(255), //产品名称
price float, //产品价格
image varchar(255) //产品图片
);
(二)Java连接MySQL
1、java连接MySQL8.x数据库
驱动下载: mysql-connector-java-8.0.16.jar
//1.加载mysql数据连接驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //8.0 //2.连接数据库 Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop?useSSL=false&serverTimezone=UTC", "root", "root");
//说明:8.0一定要带上参数serverTimezone=UTC
2、Java连接MySQL5.x数据库
驱动下载:mysql-connector-java-5.1.39-bin.jar
//1.加载mysql数据库的驱动 Class.forName("com.mysql.jdbc.Driver"); //2.连接数据库 Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop","root","root");
3、Java连接MySQL8.0数据库,但驱动是5.x
驱动下载:mysql-connector-java-5.1.39-bin.jar
(1)修改mysql8.0的加密规则
进入windows命令行窗口,在dos提示符下输入:mysql -u root -proot
出现mysql命令提示符"mysql>",再输入以下命令:
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER; -- 密码永不过期 mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; --改成5.x加密规则 mysql>FLUSH PRIVILEGES; --刷新权限 mysql>alter user 'root'@'localhost' identified by 'root'; --最终修改root用户的密码
说明:
8.x和5.x的区别是加密规则不同:
5.X版本是:default_authentication_plugin=mysql_native_password
8.x版本就是:default_authentication_plugin=caching_sha2_password
(2)Java连接MySQL的主要代码
//1.加载mysql数据库的驱动 Class.forName("com.mysql.jdbc.Driver"); //2.连接数据库 Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop","root","root");
Java读取MySQL数据库中的数据的步骤:
1、建立数据库连接Connection
2、通过Connection对象创建语句对象Statement
3、由Statement对象执行查询,获得结果集ResultSet
4、对结果集进行遍历。
Java对数据库进行写入操作步骤:
1、建立数据库连接Connection
2、通过Connection对象创建语句对象Statement或预编译的语句对象PrepareStatement
3、执行语句对象Statement或预编译的语句对象PrepareStatement
练习一:访问NBA所有的球队
1、建立球队的数据模型(实体类)Team
2、建立业务逻辑类TeamService
3、建立控制转发的Servlet类GetTeamsServlet
4、建立视图TeamList.jsp
study数据库在腾讯云上的连接信息:
数据库地址:jdbc:mysql://sh-cdb-qego3b2a.sql.tencentcdb.com:61551/study
用户名:student
密码:student
练习二:访问NBA所有的球员
1、建立球员的数据模型(实体类)Player
2、建立业务逻辑类PlayerService
3、建立控制转发的Servlet类GetPlayersServlet
4、建立视图PlayerList.jsp
study数据库在腾讯云上的连接信息:
数据库地址:jdbc:mysql://sh-cdb-qego3b2a.sql.tencentcdb.com:61551/study
用户名:student
密码:student