javaweb
1、基本概念
web开发:
- web
- 静态web
- 动态web
- 淘宝,
- 不断变化
- 技术栈:Servlet/JSP ASP PHP
1.2、web应用程序
web应用程序:可以提供浏览器访问的程序
- 能访问的任何页面都存在于世界的某个角落
- URL
- 这些同意的web资源会被放到同一个文件夹 Tomcat
- 一个web 组成
- html css js
- jsp servlet
- java程序
- jar包
- 配置文件(Properties)
外部访问需要服务器统一管理
1.3、静态web
2、web服务器
ASP:
- 微软:
- HTML中嵌入VB脚本
PHP
- PHP开发速度快,功能强大,跨平台,代码简单
- 无法承载大访问量的情况
JSP/Servlet
B/S
C/S
- sun公司主推的B/S
- 基于Java
- 承载三高带来的影响
- 语法像ASP
2.2、web服务器
一种被动的操作 处理用户强求和信息
IIS
微软的 ASP window自带
Tomcat
百度百科
手写Tomcat
3、Tomcat
启动关闭
Tomcat:8080
mysql:3306
hTTP:80
HTTPS:443
可以配置主机的名称
- 默认主机名为:
- 默认网站
高难度面试题
请你谈谈网站是如何进行访问的!
3.4、发布一个web网站
先模仿
- 将自己写的网站,放到Tomcat的webapps(应用的文件夹)下
网站应该有的结构
--webapps:Tomcat服务器的web目录 -ROOT -kuangstudy:网站的目录名 -WEB-INF -calsses:Java程序 -lib.xml :网站配置文件 -index.html 默认的首页 -static -css -style.css -js -img -.......4、HTTP
4.1、什么是HTTP
HTTP 简单的请求响应协议,通常运行在TCP之上
- 文本
- 超文本
https:安全的
- 443
4.2、两个时代
- http1.0
- HTTP/1.0 :客户端与服务器连接后,只能获得一个web资源,断开连接
- http2.0
- HTTP/1.1:客户端与服务器连接后,能获得多个web资源
4.3、HTTP请求
- 客户端--发请求(request)--服务器
百度:
Request URL: https://www.baidu.com/ 请求地址Request Method: GET 请求方式/POSTStatus Code: 200 OK 状态码:200Remote(远程) Address: 110.242.68.3:443Referrer Policy: strict-origin-when-cross-originAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cache-Control: max-age=0Connection: keep-aliveCookie: PSTM=1642766731; BAIDUID=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_UPN=12314753; BIDUPSID=09E509314F3EB3812F3612BCD6996E78; __yjs_duid=1_87aeb27da8e0a5310018c003dc9c8a141642819771266; BDSFRCVID_BFESS=vM4OJexroG0RE6oHNZuLhC45X-mPxN5TDYLEOwXPsp3LGJLVgaSTEG0PtfppquI-2ZlgogKKBeOTHn0F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=JJkO_D_atKvDqTrP-trf5DCShUFsKnolB2Q-XPoO3KJCsDQvyMTEbfAJLN8tXIrLLTbw_xbgylRp8P3y0bb2DUA1y4vpK-ogQgTxoUJ25tJ2qt5Vqj5Ah--ebPRi3tQ9QgbXopQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MC09j6KhDTPVKgTa54cbb4o2WbCQQ-Jd8pcN2b5oQT8wQHjyBU605G635K-ayT6VV-n8jqOUWfAkXpJvQnJjt2JxaqRC5bj6Sh5jDh3MbR8QKqoAe6jzaIvy0hvc0J5cShnkDMjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQhjGtOtjDttb32WnTJ25rHDbTw5tI_-P4DeUTWBxRZ56bHWh0MLqK-Dpn8MtoBMMJ3jJAL2lOOBJTnKUT1366OMCblK-RGQj-d3xJKQh343bRTLnQM-PjhOjC4W4vJhP-UyP5-Wh37aJRlMKoaMp78jR093JO4y4Ldj4oxJpOJ5JbMopCafDDbbD0xj6LBePtjMfbWetoQ265tWjrJabC3EfTJXU6qLT5X5tn8bxQqWgo0aPcS0K-hoKoOjTOTyl0njxQyWt7EtTRlanvy2DQGDbOCjMonDh8n3H7MJUntKHcAoj6O5hvvER5O3M7_DMKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQXH_Etj-OJJutoKvt-5rDHJTg5DTjhPrM54FJWMT-MTryKKJ43CQoOhrL5fvsLT30W2cLQnvwJGnRhlRNB-3iV-OxDUvnyxAZbUQgLUQxtNRJ0tJM-45zKDoLh-JobUPULxo9LUvXtgcdot5yBbc8eIna5hjkbfJBQttjQn3hfIkj2CKLK-oj-DK6DTu53q; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_HOME=1; H_PS_PSSID=35839_35104_31254_34584_35491_35872_35541_35796_35315_26350_35743; BA_HECTOR=018h01808lala5855p1h0m9ok0qHost: www.baidu.comsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.361、请求行
- 请求行中的请求方式:GET
- 请求方式:GET,POST,HEAD,DELETE,PUT,TRACT...
- get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL显示内容,不安全,但高效
- post:相反
2、消息头
Accept:告诉浏览器,他所支持的数据类型Cache-Control:缓存控制 Connection:告诉浏览器断开还是连接4.4、HTTP响应
- 服务器--响应--客户端
百度
Bdqid: 0xe82971940005867b 缓存控制Connection: keep-alive 连接:保持连接Content-Encoding: gzip 编码Content-Type: text/html;charset=utf-8 类型1.响应体
Accept:告诉浏览器,它所支持的数据类型Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 IS08859-1Accept-Language:告诉浏览器,它的语言环境Cache-Control:缓存控制Connection:告诉浏览器,请求完成是断开还是保持连接HOST: 主机..../.Refresh:告诉客户端,多久刷新1次;Location:让网页重新定位;2、响应状态码(重点)
200:成功 200
3**:请求重定向
- 重定向:重新到新位置去302
4**:找不到资源404
- 资源不存在
5**:服务器代码错误 500 502:网关错误
常见面试:
当你的浏览器中地址栏输入地址并回车的一瞬间到页面展示出来,经历了什么
5、Maven
我为什么要学习这个技术?
5.1、Maven项目架构管理工具
就是方便导入jar包的
Maven的核心思想:约定大于配置
- 有约束,不要去违反
Maven会规定好应该如何写Java
5.2、下载安装Maven
官网
下载完解压即可:
狂神建议:电脑上的所有环境都放在哟个文件夹下
5.3、环境变量配置
在我们的系统环境变量配置中配置如下配置:
- M2_HOME maven目录下的bin目录
- MAVEN_HOME maven的目录
- 在系统的path中配置%MAVEN_HOME%\bin
5.4、阿里云镜像
- 镜像:mirrors
- 作用加速
- 在setttins.xml文件中找到<mirrors></mirrors>标签对,进行修改:
5.5、本地仓库
在本地的仓库,远程仓库;
建立一个本地仓库:
<localRepository>D:\Java_IDE\apache-maven-3.8.4\maven-repo</localRepository>5.6、在IDEA中使用Maven
5.7、创建一个普通的maven项目
这个只有在web下才有
5.8、在idea中标记
配置Tomcat
解决警告问题 为什么会有这个问题:我们访问一一个网站,需要指定一个文件夹名字;****
5.10、POM文件
maven由于约定大于配置,我们之后的可能遇到我们写的配置文件无法导出
<!--在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>**/*.properties</exclude> <exclude>**/*.xml</exclude> </excludes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>5.12、IDEA操作
目录树
5.13、解决遇到的问题
Maven仓库的使用
官网:https://mvnrepository.com/
6、什么是servlet
6.1、servlet简介
- sun开发动态web的一门技术
- sun在这些api中提供了一个接口叫servlet,开发的两个步骤
- 编写一个类,实现servlet接口
- 把开发好的java类部署到web服务器中
把实现了servlet接口的Java程序叫做 servlet
6.2、HelloServlet
servlet接口在sun公司有两个默认的的实现类:
HttpServlet,GenericServlet
继承差不多
Maven环境优化
编写一个servlet程序
6.3、servlet原理
servlet是由web服务器调用,web服务器在收到浏览器请求之后会:
6.4、mapping问题
6.5、ServletContext
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象, 它代表了当前 的web应用;
1、共享数据
- 在这个servlet保存的数据可以在另一个拿到
2、获取初始化参数
<!-- 设置一些web应用初始化参数--> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql//localhost:3306/mybatis</param-value> </context-param>public class ServletDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); ServletContext context = this.getServletContext(); String url = context.getInitParameter("url"); resp.getWriter().print(url); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}3、请求转发
public class ServletDemo04 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); System.out.println("进去了04"); ServletContext context = this.getServletContext(); context.getRequestDispatcher("/gp").forward(req,resp);// RequestDispatcher gp = context.getRequestDispatcher("gp");// gp.forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}<servlet> <servlet-name>sd3</servlet-name> <servlet-class>com.mink.servlet.ServletDemo03</servlet-class> </servlet> <servlet-mapping> <servlet-name>sd3</servlet-name> <url-pattern>/gp</url-pattern> </servlet-mapping> <servlet> <servlet-name>sd4</servlet-name> <servlet-class>com.mink.servlet.ServletDemo04</servlet-class> </servlet> <servlet-mapping> <servlet-name>sd4</servlet-name> <url-pattern>/sd4</url-pattern> </servlet-mapping>4、读取资源文件
Properties
- 在java目录下新建properties
- 在resources下新建properties
两个都被打包到理同意路径下:classes,我们俗称这个路径为classpath
思路:需要一个文件流
public class ServletDemo05 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties prop = new Properties(); prop.load(is); String uname = prop.getProperty("username"); String pwd = prop.getProperty("password"); resp.getWriter().print(uname+":"+pwd); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}访问测试即可ok!!!
6.6、HttpResponse
web服务器接收到客户端的http请求,针对这个请求分别创建一个代表请求的request对象,代表响应的一个HttpServletResponse;
- 我们如果要获取客户端亲求过来的参数,找
- 如果IP要给客户端响应一些信息:找HttpServletResponse
1、简单分类
负责向浏览器发送数据的方法
ServletOutputStream getOutputStream() throws IOException; PrintWriter getWriter() throws IOException;负责向浏览器发送一些响应头的信息
//interface ServletResponsevoid setCharacterEncoding(String var1); void setContentLength(int var1); void setContentType(String var1); void setBufferSize(int var1);//interface HttpServletResponse void setIntHeader(String var1, int var2); void addIntHeader(String var1, int var2); void setStatus(int var1);http状态码
public interface HttpServletResponse extends ServletResponse { int SC_CONTINUE = 100; int SC_SWITCHING_PROTOCOLS = 101; int SC_OK = 200; int SC_CREATED = 201; int SC_ACCEPTED = 202; int SC_NON_AUTHORITATIVE_INFORMATION = 203; int SC_NO_CONTENT = 204; int SC_RESET_CONTENT = 205; int SC_PARTIAL_CONTENT = 206; int SC_MULTIPLE_CHOICES = 300; int SC_MOVED_PERMANENTLY = 301; int SC_MOVED_TEMPORARILY = 302; int SC_FOUND = 302; int SC_SEE_OTHER = 303; int SC_NOT_MODIFIED = 304; int SC_USE_PROXY = 305; int SC_TEMPORARY_REDIRECT = 307; int SC_BAD_REQUEST = 400; int SC_UNAUTHORIZED = 401; int SC_PAYMENT_REQUIRED = 402; int SC_FORBIDDEN = 403; int SC_NOT_FOUND = 404; int SC_METHOD_NOT_ALLOWED = 405; int SC_NOT_ACCEPTABLE = 406; int SC_PROXY_AUTHENTICATION_REQUIRED = 407; int SC_REQUEST_TIMEOUT = 408; int SC_CONFLICT = 409; int SC_GONE = 410; int SC_LENGTH_REQUIRED = 411; int SC_PRECONDITION_FAILED = 412; int SC_REQUEST_ENTITY_TOO_LARGE = 413; int SC_REQUEST_URI_TOO_LONG = 414; int SC_UNSUPPORTED_MEDIA_TYPE = 415; int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416; int SC_EXPECTATION_FAILED = 417; int SC_INTERNAL_SERVER_ERROR = 500; int SC_NOT_IMPLEMENTED = 501; int SC_BAD_GATEWAY = 502; int SC_SERVICE_UNAVAILABLE = 503; int SC_GATEWAY_TIMEOUT = 504; int SC_HTTP_VERSION_NOT_SUPPORTED = 505; void addCookie(Cookie var1); boolean containsHeader(String var1); String encodeURL(String var1); String encodeRedirectURL(String var1); /** @deprecated */ @Deprecated String encodeUrl(String var1); /** @deprecated */ @Deprecated String encodeRedirectUrl(String var1); void sendError(int var1, String var2) throws IOException; void sendError(int var1) throws IOException; void sendRedirect(String var1) throws IOException; 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); void setStatus(int var1); /** @deprecated */ @Deprecated void setStatus(int var1, String var2); int getStatus(); String getHeader(String var1); Collection<String> getHeaders(String var1); Collection<String> getHeaderNames(); default void setTrailerFields(Supplier<Map<String, String>> supplier) { } default Supplier<Map<String, String>> getTrailerFields() { return null; }}2、常见应用
下载文件
public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 要获取下载文件的路径 String realPath = "D:\\git\\gitcode\\kuangstudy\\javaweb\\javaweb-02-servlet\\response\\target\\classes\\bmw.jpg"; System.out.println("下载路径为:"+realPath);// 2. 文件名 String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1); System.out.println("文件名为:"+fileName);// 3. 让浏览器支持我们下载的东西 resp.setHeader("Content-Disposition","attachment;filename"+ URLEncoder.encode(fileName,"utf-8"));// 4. 获取下载文件的输入流 FileInputStream is = new FileInputStream(realPath);// 5. 创建缓冲区 int len; byte[] buffer = new byte[1024];// 6. 获取OutputStream对象 ServletOutputStream os = resp.getOutputStream();// 7. 将FileOutputStream流写入到buffer缓冲区// 8. 使用OutputStream将缓冲区中的数据输出到客户端 while ((len= is.read(buffer))>0){ os.write(buffer,0,len); } is.close(); os.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}3、验证功能验证码
验证怎么来的
- 前端
- 后端实现,需要java的图片类
4、实现重定向
一个web资源收到客户端请求后,通知客户端去访问另一个web资源,这就叫重定向
常见场景:
- 用户登录
response
void sendRedirect(String var1) throws IOException; resp.sendRedirect();状态码:302public class RedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// resp.setHeader("Location","/respomse_war/image");// resp.setStatus(302); resp.sendRedirect("/response_war/image"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}面试题:请你聊聊请求转发和重定向的区别?
- 相同点
- 不同点
6.7、HttpServletResquest
HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会 被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息;
1、获取前端传递的参数
2、请求转发
重定向写 / 表示本项目; 转发不用写
转发是在服务器内部流转的
p167、Cookie、Session
7.1、会话
会话:用户打开浏览器,打开了很多超链接,逐个关闭这个过程就是会话
有状态会话:
你能怎么证明你是西开的学生?哈哈
你 西开
一个网站,怎么证明你来过?
客户端 服务端
7.2、保存回家的两种技术
cookie
- 客户端技术(响应,请求)
session
- 服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或数据保存在session中
7.3、Cookie
一个网站cookie是否存在上限!
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多20个
- cookie大小限制4kb
- 300个cookie浏览器上限
删除Cookie
- 不设置有效期,关闭浏览器,自动失效
- 设置有效期时间为0
中文编码解码:
7.4、Session(重点)
什么是session:
- 服务器会给每一个用户(浏览器)创建一个session对象
- 一个session独占一个浏览器,只要浏览器没关,这个session就存在
- 用户登陆之后,整个网站都可以访问---->保存购物车信息保存用户信息
Session和cookie的区别: .
- Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
- Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息, 减少服务器资源的浪费)
- Session对象由服务创建;
使用场景:
- 保存一个登录用户的信息;
- 购物车信息;
- 在整个网站中经常会使用的数据,我们将它保存在Session中; .
使用session
会话过期,在web.xml中配置
<!-- 设置session默认失效时间--><session-config><!-- 以分种为单位--> <session-timeout>1</session-timeout></session-config>8、JSP
8.1、 什么是jsp
java Server pages : Java服务器端页面,和servlet一样,用于动态web
最大特点:
- 写jsp就像在写html
- 区别
- HTML只给用户静态
- jsp可以嵌入Java 为用户提供动态
8.2、jsp原理
思路:jsp如何执行
- 代码层面简单
- 服务器内部工作tomcat中有一个work目录idea中使用tomcat的会在idea的tomcat中生产一个work
2018以后的IDEA在隐藏圓录AppData/ JetBrains里面
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问servlet
jsp最终也会被转换成一个Java类
jsp本质上就是一个servlet
//初始化public void_ public void _jspInit() { }//销毁 public void _jspDestroy() { }// jsp Service public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {在jsp页面中,只要是Java代码就会原封不动的输出;
如果是HTML代码,就会被转换为
out.weite("<html>\r\n")8.3、jsp基础语法
任何语言都有自己的语法,
JSP作为Java技术的一种应用,它拥有一些自己扩充的语法(了解即可),Java所有语法都支持
jsp表达式
<%-- jsp表达式作用:用来将程序的输出,输出到客户端<%= 变量或表达式%>--%><%= new java.util.Date()%>jsp脚本片段
<%--jsp脚本语言--%><% int sum=0; for (int i = 1; i <= 100; i++) { sum+=i; } out.println("<h1>sum="+sum+"</h1>");%><%-- 套娃--%> <% for (int i = 0; i < 5; i++) { %> <h1>hello mink</h1> <% } %>jsp 声明
<%! static { System.out.println("loding servlet"); } private int globalVar = 0; private void mink(){ System.out.println("进入了方法MINK"); } %>JSP声明:会被编译到SP生成Java的类中!其他的,就会被生成到jspService方法中!
在jsp,嵌入java代码即可
几种格式8.4、jsp指令
<%@page args.... %><%@include file=""%> <body><%--将两个页面合二为一--%><%@ include file="common/header.jsp" %><h1> 主题内容</h1><%@include file="common/footer.jsp"%><hr><%--jsp标签拼接页面,本质还是三个--%><jsp:include page="common/header.jsp"/> <h1> hhhhhhh </h1></body>8.5、九大内置对象
- PageContext 存
- Request 存
- Response
- Session 存
- Application 【ServletContext】 存东西
- config 【ServletConfig】
- out
- page
- exception
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的! session:客户端向服务器发送请求,产生的数据,用户用完一会还有用, 比如:购物车;
application:客户端向服务器发送请求,产生的数据,个用户用完了, 其他用户还可能使用,比如:聊天数据;
p20????????????????????????????8.6、jsp标签,jstl标签,EL表达式
EL表达式:${}
- 获取数据
- 执行运算
- 获取web开发的常用对象
jsp标签
<%--jsp: include--%><%--http://localhost: 8080/jsptag. jsp?name-kuangshen&age=12--%><jsp :forward page="/jsptag2.jsp"><jsp :paramname="name"value="kuangshen"></jsp :param><jsp :param name="age" value="12"></jsp :param></jsp : forward>JSTL表达式
弥补html的不足
核心标签(掌握部分)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>使用步骤
- 引入队应的taglib
格式化标签
SQL标签
XML标签
9、JavaBean
实体类
实体类 JavaBean有特定的写法: ●必须要有一个无参构造 ●属性必须私有化 ●必须有对应的get/set方法;
一般用来和数据库的字段做映射 ORM;
ORM:对象关系映射
- 表-->类
- 字段-->属性
- 行记录-->对象
id
name
age
address
1
秦将1号
3
2
秦将2号
18
3
秦将3号
100
????????????????????????
10、MVC三层框架
Model
View
Controller
10.1、早些年
Servlet和Jsp都可以写ava代码;为了易于维护和使用; Servlet专注于处理请求,以及控制视图跳转 JSP专注于显示数据
用户直接访问控制层,控制层就可以直接操作数据库;
servlet--CRUD-->数据库弊端:程序十分臃肿,不利于维护servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码架构:没有什么是加一-层解决不了的!程序猿调用|JDBC|Mysq1 Oracle Sq1Server10.2、MVC三层架构
Model
- 业务处理:业务逻辑(Service)
- 数据持久层:CRUD(Dao)
View
- 展示数据
- 提供连接发送Servlet请求
Controller
- 接受用户请求
- 交给业务层处理响应的代码
- 控制视图的跳转
11、Filter
Filter:过滤器,过滤网站数据
- 处理中文乱码
- 登录验证
servlet版本3.1.0
12、监听器
实现一个监听器的接口:(有N种)
13、过滤器、监听器常见应用
监听器:GUI种常用
用户登录后才能进入主页