World Wide Web 全球广域网->也称为万维网 是一种基于超文本和HTTP协议的分布式应用架构
HTML(HyperText Mark-up Language):用于链接网络上的信息
HTTP协议(HyperText Transfer Protocol):规定了服务端与客户端通信的规则
万维网:WWW是World Wide Web的简称
C/S: Client/Server 客户端与服务端交互的应用程序
B/S: Browser/Server 浏览器与服务器交互的web应用程序–>网站
c/s与b/s区别:
C/S需要客户拥有特定的客户端,比如你的app,你在app中的每次操作会被当作请求发送至服务器进行处理,服务器再做出对应的响应给你。
优点:响应速度快(客户端与服务端直接进行交互)、安全性高
缺点:宕机 、升级更新、运行工作全部由服务器完成、服务器运行压力较大
B/S只需要客户拥有浏览器即可访问,永远保持最新状态,避免了停机更新的时段。
优点: 客户无需升级,只需更新服务器即可。可以通过一定权限实现多客户访问,交互性较强
缺点:访问速度较慢、安全性没有C/S高
静态Web:所有的用户访问到的网页界面相同,如html、css、JavaScript
动态Web:不同客户访问同一网页得到的界面各不相同 如:servlet/JSP、PHP
TomCat是阿帕奇Apache基金组织发行的开源、免费的服务器软件,属于中小型Java EE 服务器
安装与配置遍布全网 安装网址: http://tomcat.apache.org/
简单来讲:Maven用于在web开发中导入jar包使用,省去了导入大量jar包的步骤
官网:https://maven.apache.org/
一些依赖和配置:
阿里云镜像:
alimaven central aliyun maven http://maven.aliyun.com/nexus/content/repositories/central/
servlet依赖&jsp依赖
javax.servlet-api
javax.servlet javax.servlet-api 4.0.1 provided
jsp-api
javax.servlet.jsp javax.servlet.jsp-api 2.3.3 provided
com.mysql mysql-connector-j 8.0.31
Servlet:sun公司提供的一门开发动态Web的技术
此处提到一个artifacts(可以理解为一个工件、构件) 我们开发完成的Java项目需要部署在服务器上,artifacts的作用就是将Java项目打成一个文件包(常见如war包、exploded包)
在IDEA中: 选中你的项目模块—>open Module Settings–>
可以看到我们每个web项目模块都会生成这样的artifacts部署文件包,下面我们看TomCat的操作:
我们需要再tomCat上选择要运行的web项目文件包才能再服务器上部署:
同一时刻不建议将多个文件包选中(可能会造成包之间的冲突导致报错):
可以用于多个servlet之间通信(不通过数据持久化就可以实现)
// -- 设定servlet
this.getServletContext().setAttribute("键key","值value")// -- 获取servlet
String value = this.getServletContext().getAttribute("键key")
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 获取servletContext容器 2. 根据初始化参数名获取该参数String url = req.getServletContext().getInitParameter("url");// 3. 写出resp.getWriter().println("url:"+url);}
url jdbc:mysql//localhost:3306/mybatis
demo01 gec.ServletDemo01
demo01 /demo01
// --请求转发// --1. 获取请求转发器,并规定好转发的目标位置 /demo01 斜杠代表当前项目 demo01 表示某一个映射后的地址// RequestDispatcher requestDispatcher = req.getRequestDispatcher("/demo01");// --2. 调用forward方法转发 入参req、resp// requestDispatcher.forward(req,resp);// --3. 简化写法req.getRequestDispatcher("/demo01").forward(req,resp);
在resources资源包下创建了资源文件( ##.properties文件 )可以通过servletContext+Properties进行读取,如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 通过properties获取文件资源内容// --1. 获取流InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");// --2. 创建properties对象Properties prop = new Properties();// --3. 将流注入属性对象prop.load(is);// --4. 以键值对形式获取指定路径下资源的内容String username = prop.getProperty("username");String password = prop.getProperty("password");resp.getWriter().println("username="+username+"\npassword="+password);}
注意上述程序中的–> /WEB-INF/classes/db.properties

HTTPServletResponse: 服务器将要给客户端做出的响应
HTTPServletRequest: 服务器接收的客户端的请求
resp方法:
// 向浏览器发送数据
servletOutputstream getOutputstream() throws IOException;
Printwriter getwriter() throws IOException;
//向浏览器发送响应头
// 设置编码方式
void setCharacterEncoding(String var1);
// 设置文本长度
void setContentLength(int var1);
void setContentLengthLong(long var1);
// 设置文本文件类型 通常为--> text/hrml
void setContentType(String var1);
void setDateHeader(String varl,long var2)
void addDateHeader(String var1,long var2)
// 设定头信息 通常 var1代表请求 var2代表操作
void setHeader(String var1,String var2);
void addHeader(String var1,String var2);
void setIntHeader(String var1,int var2);
void addIntHeader(String varl,int var2);
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// -- 下载文件// --1. 定义要下载的文件路径String realPath = "C:\\Users\\20729\\Desktop\\杂七杂八\\photo\\1.jpg";System.out.println("下载路径:"+realPath);// --2. 下载的文件名String fileName = realPath.substring(realPath.lastIndexOf("\\"+1));// --3. 设置下载头信息(客户端真正执行下载操作的核心),另浏览器能够支持(Content-Disposition)所下载文件resp.setHeader("Content-disposition","attachment;filename"+fileName);// --4. 获取下载文件的输入流FileInputStream fis = new FileInputStream(realPath);// --5. 创建缓冲区int len = 0;byte[] buffer = new byte[1024];// --6. 通过响应对象获取输出流ServletOutputStream os = resp.getOutputStream();// --7. 写出文件while((len=fis.read(buffer))>0){os.write(buffer,0,len);}// --8. 关闭流fis.close();os.close();}
// 依旧以登录校验为例
if (username.equals("admin")&&password.equals("123456")){// 重定向/*resp.sendRedirect("/mvnWeb-02/login.html")实际上是完成了以下两个步骤(按照下面的写法也可以完成重定向):--1. resp.setHeader("Location","/mvnWeb-01/login.html");--2. resp.setStatus(302);302就是指重定向的状态代码,一般开发会用:
resp.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);*/resp.sendRedirect("/mvnWeb-02/login.html");}else{resp.sendRedirect("/mvnWeb-02/index.html");}
请求转发如图:
A想要请求获取C的资源但是不能直接获取,则A只能向B发送请求,B再请求C,最终返回
重定向如图:
A想要获取C的资源,A本来是向B发送请求,但是A可以直接跳转定向C发送请求
用户登录校验
doGet:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");// 登录校验if (username.equals("admin")&&password.equals("123456")){// 请求转发req.getRequestDispatcher("/login.html").forward(req,resp);}else {req.getRequestDispatcher("/index.html").forward(req,resp);}}
index.html
login.html
WELCOME TO MY WORLD!
web.xml
login gec.HttpServletRequestDemo07 login /login
上一篇:酒吧订台是什么
下一篇:可以把家风比喻成什么