发表时间:2022-03-24来源:网络
web开发:
web即网页,如www.baidu.com,大体可分为动态Web和静态Web静态Web html,css提供给所有人看的数据始终保持固定不变动态Web 几乎所有的网站都是动态Web。提供给所有人看的数据不是固定不变的,不同的人,不同时间和不同地点看到的信息都有可能不同!技术栈:Servlet/JSP,ASP,PHP在Java中,动态Web资源开发的技术统称为Javaweb(用Java开发Web)
Web应用程序:可以提供浏览器访问的程序;
a.html、b.html…多个web资源可以被外界访问,对外界提供服务所有能访问到的页面或者资源,都存在于世界某一角落的计算机上URL:在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。统一的web资源会被放在同一个文件夹下一个web应用程序有多部分组成(静态web,动态web) html,cssjsp,servletjava程序jar包配置文件(properties)web应用程序编写完成后,若想提供给外界访问,需要一个Web服务器(tomcat)来统一管理
静态页面存在的缺点
页面数据固定不变,所有用户看到的都是同一个页面,但是可以通过一些手段实现类似轮播图,点击特效等伪动态效果
JavaScript(实际开发中运用的最多)VBScript无法与数据库交互(数据无法持久化,用户无法交互)页面效果动态展示,不同人,不同时间,不同地点看到的页面各不相同,动态网页的访问流程如下:

)

ASP:
微软开发:国内最早流行的动态web技术在HTML中嵌入VB脚本ASP开发的页面往往包含上前行业务代码,页面极其混乱,维护成本高PHP:
开发速度快,功能强大,跨平台,代码简单(70%的动态网页都是用PHP开发的)无法承载大访问量高并发的情况JSP/Servlet:
sun公司主推的B/S架构基于Java语言开发可以承载三高带来的影响语法像ASP,有利于原本的ASP开发者转型,加强了市场强度web服务器用来处理用户的一些请求和给用户一些响应信息
IIS
windows中自带的web服务器,由微软开发,支持ASP语言
Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
而Tomcat 实际上运行JSP 页面和Servlet。Tomcat最新版本为10.0.14**。**
tomcat官网:https://tomcat.apache.org/
注意:电脑上所有运行环境最好放在一个文件夹下,方便管理(jdk,python,tomcat等)
文件夹作用
启动和关闭tomcat

访问测试:http://localhost:8080/
可能遇到的问题:
java环境变量没有配置闪退问题:需要配置兼容性乱码问题:配置文件中设置
可以配置启动的端口号
常见端口号:
tomcat:8080mysql:3306http:80https:443可以配置主机名称
默认主机名为localhost(127.0.0.1)默认网站存放位置为:webapps高难度面试题:
请你谈谈网站是如何进行访问的!
输入域名并回车检查本机的 C:\Windows\System32\drivers\etc\hosts配置文件下是否存在该域名的域名映射; 有:直接返回对应的IP地址,在这个地址中有我们需要访问的web程序,可以直接访问没有:去DNS服务器找,找到的话就返回,找不到就返回找不到网页
将自己写的网站,放到tomcat种指定的web应用的文件夹(webapps)下,就可以访问了
网站应有的结构:
--webapps :Tomcat服务器的web目录 -ROOT -kuangstudy :网站的目录名 - WEB-INF -classes : java程序 -lib:web应用所依赖的jar包 -web.xml :网站配置文件 - index.html 默认的首页 - static -css -style.css -js -img -.....HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
文本:html,字符串,~ ….超文本:图片,音乐,视频,定位,地图…….端口号:80Https:安全的
端口号:443客户端—发请求–服务器
百度:
Request URL:https://www.baidu.com/ 请求地址 Request Method:GET get方法/post方法 Status Code:200 OK 状态码:200 Remote(远程) Address:14.215.177.39:443 Accept:text/html Accept-Encoding:gzip, deflate, br Accept-Language:zh-CN,zh;q=0.9 语言 Cache-Control:max-age=0 Connection:keep-alive 连接状态:保持连接服务器—响应—客户端
百度:
Cache-Control:private 缓存控制 Connection:Keep-Alive 连接 Content-Encoding:gzip 编码 Content-Type:text/html 类型200:请求响应成功 200
3xx:请求重定向
重定向:你重新到我给你新位置去;4xx:找不到资源
404 资源不存在;5xx:服务器代码错误 500
502:网关错误常见面试题:
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
为什么要学习Maven?
在javaweb开发中,需要使用大量的jar包,我们手动去导入;如何能够让一个东西自动帮我导入和配置jar包。由此,maven诞生了!
我们目前用来就是方便导入jar包的!
Maven的核心思想:约定大于配置
有约束,不要去违反。Maven会规定好你该如何去编写我们的Java代码,必须要按照这个规范来;
官网:https://maven.apache.org

下载完成后解压即可;
在我们的系统环境变量中
配置如下配置:
M2_HOME maven目录下的bin目录MAVEN_HOME maven的目录在系统的path中配置 %MAVEN_HOME%\bin
测试Maven是否安装成功,保证必须配置完毕!

在本地的仓库(也有远程仓库),用于在本地存放下载的jar包;
建立一个本地仓库:localRepository
D:\maven\repository










这个只有在web应用下才会有!

方法一:直接在目录结构中设置

方法二:项目结构中配置



5.9 在IDEA中配置tomcat

解决警告问题
必须要的配置:为什么会有这个问题:我们访问一个网站,需要指定一个文件夹名字;

pom.xml是maven的核心配置文件


maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题, 解决方案:
src/main/resources **/*.properties **/*.xml true src/main/java **/*.properties **/*.xml true地址:https://mvnrepository.com/



把实现了Servlet接口的Java程序叫做,Servlet
Serlvet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet
构建一个普通的Maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立Model;这个空的工程就是Maven主工程;关于Maven父子工程的理解:父项目中会有
servlet-01子项目会有
javaweb-02-servlet com.kuang 1.0-SNAPSHOTMaven环境优化
修改web.xml为最新的将maven的结构搭建完整编写一个Servlet程序
编写一个普通类
实现Servlet接口,这里我们直接继承HttpServlet
public class HelloServlet extends HttpServlet { //由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样; @Override protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException { //ServletOutputStream outputStream = resp.getOutputStream(); PrintWriter writer = resp.getWriter(); //响应流 writer.print("Hello,Serlvet"); } @Override protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
编写写Servlet的映射
为什么需要映射:我们写的是JAVA程序,但是要通过浏览器访问,而浏览器需要连接web服务器, 所以我们需要再web服务中注册我们写的Servlet,还需给他一个浏览器能够访问的路径;
hello com.kuang.servlet.HelloServlet hello /hello配置Tomcat 注意:配置项目发布的路径就可以了
启动测试,OK!
Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:

一个servlet指定一个映射路径
hello /hello一个servlet指定多个映射路径
hello /hello hello /hello2 hello /hello3一个servlet指定通用映射路径
hello /hello/*默认请求路径
hello /*指定一些后缀或者前缀
hello *.yirui优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的 web应用;
我在这个Servlet中保存的数据,可以在另外一个servlet中拿到;
public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //this.getInitParameter() 初始化参数 //this.getServletConfig() Servlet配置 //this.getServletContext() Servlet上下文 ServletContext context = this.getServletContext(); String username = "秦疆"; //数据 context.setAttribute("username",username); //将一个数据保存在了 ServletContext中,名字为:username 。值 username } } public class GetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); String username = (String) context.getAttribute("username"); resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); resp.getWriter().print("名字"+username); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } hello com.kuang.servlet.HelloServlet hello /hello getc com.kuang.servlet.GetServlet getc /getc如果要获取客户端请求过来的参数:找HttpServletRequest
如果要给客户端响应一些信息:找HttpServletResponse
负责向浏览器发送数据的方法 :
ServletOutputStream getOutputStream() throws IOException; PrintWriter getWriter() throws IOException;设置响应头的方法:
void setCharacterEncoding(String var1); void setContentLength(int var1); void setContentLengthLong(long var1); void setContentType(String var1); void setDateHeader(String var1, long var2); void addDateHeader(String var1, long var2); void setHeader(String var1, String var2); void addHeader(String var1, String var2); void setIntHeader(String var1, int var2); void addIntHeader(String var1, int var2);**会话:**用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之 为会话;
**有状态会话:**一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会 话;
你能怎么证明你是西开的学生?
你西开发票西开给你发票学校登记西开标记你来过了一个网站,怎么证明你来过?
客户端服务端cookie服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了;服务器登记你来过了,下次你来的时候我来匹配你;seesioncookie
客户端技术 (响应,请求)session
服务器技术,利用这个技术,可以保存用户的会话信息? 我们可以把信息或者数据放在Session 中!常见常见:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!
cookie:一般会保存在本地的 用户目录下 appdata;
一个网站cookie是否存在上限!聊聊细节问题
一个Cookie只能保存一个信息;一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;Cookie大小有限制4kb;300个cookie浏览器上限删除Cookie;
不设置有效期,关闭浏览器,自动失效;设置有效期时间为 0 ;什么是Session:
服务器会给每一个用户(浏览器)创建一个Seesion对象;一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在;用户登录之后,整个网站它都可以访问!–> 保存用户的信息;保存购物车的信息……

Session和cookie的区别:
Cookie是把用户的数据写给用户的浏览器,浏览器保存 (可以保存多个)Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资 源的浪费)Session对象由服务创建;使用场景:
保存一个登录用户的信息;购物车信息;在整个网站中经常会使用的数据,我们将它保存在Session中;使用Session:
package com.kuang.servlet; import com.kuang.pojo.Person; import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; public class SessionDemo01 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题 req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=utf-8"); //得到Session HttpSession session = req.getSession(); //给Session中存东西 session.setAttribute("name", new Person("秦疆", 1)); //获取Session的ID String sessionId = session.getId(); //判断Session是不是新创建 if (session.isNew()) { resp.getWriter().write("session创建成功,ID:" + sessionId); } else { resp.getWriter().write("session以及在服务器中存在 了, ID:"+sessionId); } //Session创建的时候做了什么事情; // Cookie cookie = new Cookie("JSESSIONID",sessionId); // resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } //得到Session HttpSession session = req.getSession(); Person person = (Person) session.getAttribute("name"); System.out.println(person.toString()); HttpSession session=req.getSession(); session.removeAttribute("name"); //手动注销Session session.invalidate();会话自动过期:web.xml配置
15Java Server Pages : Java服务器端页面,也和Servlet一样,用于动态Web技术!
最大的特点:
写JSP就像在写HTML区别: HTML只给用户提供静态的数据JSP页面中可以嵌入JAVA代码,为用户提供动态数据;浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet! JSP最终也会被转换成为一个Java类! JSP 本质上就是一个Servlet

在JSP页面中,只要是 JAVA代码就会原封不动的输出; 如果是HTML代码,就会被转换为:
out.write("\r\n");这样的格式,输出到前端!
JSP表达式
JSP脚本片段
JSP声明
JSP指令
网页主体 网页主体**request:**客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!
**session:**客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;
**application:**客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如: 聊天数据;
EL表达式: ${ }
获取数据执行运算获取web开发的常用对象JSP标签:
JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签,可以供我们使用,标签的功能和 Java代码一样!

JSTL标签库使用步骤
引入对应的 taglib使用其中的方法在Tomcat 也需要引入 jstl的包,否则会报错:JSTL解析错误 Title实体类
JavaBean有特定的写法:
必须要有一个无参构造属性必须私有化必须有对应的get/set方法;一般用来和数据库的字段做映射 ORM;
ORM :对象关系映射
表—>类字段–>属性行记录---->对象什么是MVC: Model view Controller 模型、视图、控制器
早些年:

用户直接访问控制层,控制层就可以直接操作数据库;
弊端: 程序十分臃肿,不利于维护
servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码
MVC三层架构:

Model
业务处理 :业务逻辑(Service)数据持久层:CRUD (Dao)View
展示数据提供链接发起Servlet请求 (a,form,img…)Controller (Servlet)
接收用户的请求 :(req:请求参数、Session信息….)交给业务层处理对应的代码控制视图的跳转登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username, password)---->交给业务层处理登录业务(判断用户名密码是否正确:事务)--->Dao层查询用 户名和密码是否正确-->数据库Filter:过滤器 ,用来过滤网站的数据;
Filter开发步骤:
导包

编写过滤器
public class CharacterEncodingFilter implements Filter { //初始化:web服务器启动,就以及初始化了,随时等待过滤对象出现! public void init(FilterConfig filterConfig) throws ServletException { System.out.println("CharacterEncodingFilter初始化"); } //Chain : 链 /* 1. 过滤中的所有代码,在过滤特定请求的时候都会执行 2. 必须要让过滤器继续同行 chain.doFilter(request,response); */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); System.out.println("CharacterEncodingFilter执行前...."); chain.doFilter(request, response); //让我们的请求继续走,如果不写,程序到这里就被拦截停止! System.out.println("CharacterEncodingFilter执行后...."); } //销毁:web服务器关闭的时候,过滤会销毁 public void destroy() { System.out.println("CharacterEncodingFilter销毁"); } }web.xml中注册
CharacterEncodingFilter com.kuang.filter.CharacterEncodingFilter