目录
一、javaweb基本概念
——动态页面和静态页面——
示例:eShop静态与动态示例
静态页面(例如公司的门户网站),不需要与用户交互,页面内容不能变化的
动态页面(例如12306购票),需要与用户交互、页面内容会发生变化的
静态页面:
>页面内容不会发生变化(除非修改了页面代码)
>不能实现和浏览网页的用户之间进行交互
动态页面:
>动态页面以数据库技术为基础,可以根据用户的需求从数据库中获取特定的数据
>能够与用户交互(例如登录、注册、商品搜索...)
>动态页面必须要有web服务器的支持才能运行(因为它需要web服务器的解释和执行)
——Web应用系统基础——
Web应用系统通常也称为B/S(浏览器/服务器)
C/S:client-server(客户端/服务器),比如我们之前做的swing
B/S:browser-server(浏览器/服务器),B/S是一个特殊的C/S,B/S就是把客户端统一改成了浏览器
web应用程序工作原理图
-----Tomcat使用和配置-----
Tomcat下载:tomcat.apache.org
Tomcat是一个免费的开放源代码的java应用服务器。
它是Apache软件基金协会与Sun公司联合开发的Web服务器,除支持HTML静态页面外,还是JSP、Servlet等JAVA WEB应用的服务器
1>Apache是普通的web服务器,本身只支持html静态网页,还可以通过插件支持php
http://www.apache.org
2>tomcat不仅可以支持html静态网页,还支持jsp动态网页(访问html静态网页性能较差)
>它是基于apache的一个servlet容器(可以认为是apache的扩展)
http://tomcat.apache.org
静态资源服务器(不能支持jsp的服务器):apache、nginx…
动态资源服务器(支持jsp的服务器):tomcat、jboss、jetty…
在企业中一般会使用“静态资源服务器+动态资源服务器”组合…
nginx+tomcat
Tomcat启动与停止(默认端口号8080)
服务器启动双击startup.bat文件
如果启动过程发生闪退代表服务器无法启动
解决:配置环境变量,告诉它jdk根目录在哪,tomcat根目录在哪
- 直接更改系统环境变量
- 临时更改startup.bat文件,在它顶部增加
SET JAVA_HOME=D:\Program Files\Java\jdk1.7.0_13
SET TOMCAT_HOME=E:\apache-tomcat-7.0.63
Tomcat目录结构介绍(见ppt)
webapps中必须有一个文件夹包起来才能访问,不能直接把html文件放到webapps根目录
更改Tomcat端口号”conf/server.xml”
二、用Maven环境搭建项目
maven的核心思想:约定大于配置
1.在javaweb开发中,需要使用大量的jar包,我们手动去导入;
2.如何能够让一个东西自动帮我导入和配置这个jar包
环境搭建
1.配置环境变量:M2_HOME maven目录下的bin目录
2.MAVEN_HOME maven的目录
3.在系统的path中的配置 %MAVEN_HOME%\bin
测试maven是否安装成功,打开cmd输入命令 mvn -version
阿里云镜像
镜像:mirrors
作用:加速我们的下载
国内建议使用阿里云的镜像
路径: apache-maven->conf->settings.xml
m
maven本地仓库
建立一个本地仓库:localRepository
IDEA中的Maven操作
a.创建一个maven项目
IDEA项目创建成功后,看一眼Maven配置
b.创建一个普通的Maven项目
标记文件夹功能
IDEA中配置Tomcat
pom.xml是Maven的核心配置文件
防止我们资源导出失败的问题
三、HelloServlet
ServletContext对象
存与取
请求转发与重定向
面试题:重定向与请求转发的区别?
相同点:页面都会实现跳转
不同点:请求转发,url不会产生变化,307
重定向:url地址栏发生改变,302
HttpServletRequest
代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息会被封装到HttpservletRequest,通过这个HttpSerlvetRequest的方法,获得客户端的所有信息;
四、ookie、Session
cookie:客户端技术(响应、请求)
session:服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在session中!
常见场景:网站登录之后,你下次不用再登录了,第二次访问直接就登上去了
服务器响应给客户端cookie
cookie:一般会保存本地的 用户目录下appdata;
一个网站cookie是否存在上限?
a.一个cookie只能保存一个信息;
b.一个web战点可以给浏览器发送多个cookie ,最多存放20个cookie;
c.Cookie大小有限制4kb;
d.300个cookie浏览器上限
删除cookie
a.不设置有效期,关闭浏览器,自动失效;
b.设置有效期时间为0
编码解码
什么是Session?
1.服务器会给每一个用户(浏览器)创建一次会话(一个Session对象),一个浏览器对应一个session
2.一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在
3.用户登录之后,整个网站它都可以访问! (保存用户的信息,保存购物车的信息)
Session和cookie的区别:
Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
Session是把用户的数据写到用户独占Session中,服务端保存(保存重要的信息,减少服务器资源的浪费)
Session由服务器创建;
使用场景:
保存一个登录用户的信息
购物车信息;
在整个网站中经常会使用的数据,我们将他保存在session中;
五、JSP
Java Server Pages : java服务端页面,也和Servlet一样,用于动态web技术
最大特点:
a.写jsp就像在写HTML
b.区别:
html只给用户提供静态的数据
jsp页面中可以嵌入java代码,为用户提供动态数据;
jsp原理
思路:jsp到底证明执行的
代码层面没有任何问题
服务器内部工作
tomcat中由一个work目录;
IDEA中使用Tomcat的会在IDEA的tomcat中生成一个work目录
IDEA tomcat的工作空间:C:\Users\taogege\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat
我电脑的地址:C:\Users\taogege\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\a6b0cacb-35be-4fcc-b42a-a5b5fbb02eed\work\Catalina\localhost\ROOT\org\apache\jsp
发现页面转变成了java程序!
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
jsp最终也会转换为一个java类
导入相关依赖
<!-- JSTL 表达式 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard标签 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
JSP基础语法和指令
jsp表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式>
<%= new java.util.Date()%>
JSP脚本片段
<%
int sum=0;
for (int i = 0; i <20 ; i++) {
sum+=i;
}
out.println("<h1>Sum="+sum+"</h1>");
%>
JSP声明
<%
static{
System.out.println("Loading Servlet")
}
private int num=0;
public void taogege(){
System.out.println("进入了方法taogege");
}
%>
jsp声明:会被编译到JSP生成java的类中!其他的,就会被生成到_jspService方法中! 在Jsp中嵌入Java代码即可 <%%> 片段 <%=%>表达式 <%!%>全局方法 <%--注释--%> jsp的注释,不会在客户端显示,html就会!
JSP配置错误页面
第一种方式,在web.xml配置
第二种,直接在jsp页面中配置
jsp指令
将头文件和尾部文件,放入网页主体中,将2个页面合二为一
JSP内置对象
pageContext、request、response、Session、Application、config、out、page、exception
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用
session客户端向服务器发送请求,产生的数据,看完可能还有用,比如,购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户可能还使用,比如:聊天数据
MVC架构
六、Filter过滤器
用来过滤网站的数据
处理中文乱码,登录验证
导包注意是servlet的
实现Filter,重写init(),doFilter(),destroy()
在web.xml中配置过滤器
/servlet/*表示servlet文件下的文件都会经过过滤器
注意:路径前面要加servlet否则将不会经过过滤器
七、监听器
实现一个监听器接口;(N种)
1.编写一个监听器
实现监听器的接口
//统计网站在线人数,统计session
public class OnlineCountListener implements HttpSessionListener {
//创建session监听,看你的举动
//一旦创建session就会触发一次这个事件
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
if (onlineCount==null){
onlineCount=1;
}else{
int count=onlineCount.intValue();
onlineCount=count+1;
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
//销毁session监听
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
if (onlineCount==null){
onlineCount=0;
}else{
int count=onlineCount.intValue();
onlineCount=count-1;
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
/**
* Session销毁
* 1.手动销毁 getSession.invalidate();
* 2.自动销毁 <
*/
web.xml配置监听器
<!--注册监听器-->
<listener>
<listener-class>org.tao.listener.OnlineCountListener</listener-class>
</listener>
过滤器,监听器常见应用