Servlet学习日志
创始人
2024-02-06 11:23:13

Hello Web

Web

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与静态Web

静态Web:所有的用户访问到的网页界面相同,如html、css、JavaScript
动态Web:不同客户访问同一网页得到的界面各不相同 如:servlet/JSP、PHP

Maven和TomCat

Tomcat

TomCat是阿帕奇Apache基金组织发行的开源、免费的服务器软件,属于中小型Java EE 服务器
安装与配置遍布全网 安装网址: http://tomcat.apache.org/

Maven

简单来讲:Maven用于在web开发中导入jar包使用,省去了导入大量jar包的步骤
官网:https://maven.apache.org/

一些依赖和配置:

阿里云镜像:

alimavencentralaliyun mavenhttp://maven.aliyun.com/nexus/content/repositories/central/

servlet依赖&jsp依赖

javax.servlet-api

javax.servletjavax.servlet-api4.0.1provided

jsp-api

javax.servlet.jspjavax.servlet.jsp-api2.3.3provided

com.mysqlmysql-connector-j8.0.31

Hello Servlet

Servlet:sun公司提供的一门开发动态Web的技术

  • Java提供了一个接口Servlet用于开发,我们通常把实现了Servlet接口的类称之为一个servlet
  • 开发web需要我们编写一个servlet实现类、将开发好的Java类部署到web服务器中

此处提到一个artifacts(可以理解为一个工件、构件) 我们开发完成的Java项目需要部署在服务器上,artifacts的作用就是将Java项目打成一个文件包(常见如war包、exploded包)
在IDEA中: 选中你的项目模块—>open Module Settings–>

在这里插入图片描述可以看到我们每个web项目模块都会生成这样的artifacts部署文件包,下面我们看TomCat的操作:在这里插入图片描述我们需要再tomCat上选择要运行的web项目文件包才能再服务器上部署:在这里插入图片描述同一时刻不建议将多个文件包选中(可能会造成包之间的冲突导致报错):在这里插入图片描述

ServletContext

用法一:共享数据

可以用于多个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);}
urljdbc:mysql//localhost:3306/mybatis
demo01gec.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–>resp

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");}

重定向与请求转发

  1. 两者都可以实现页面跳转
  2. 请求转发时,url地址栏不会发生变化
  3. 重定向时,url地址栏会发生变化

请求转发如图:在这里插入图片描述

A想要请求获取C的资源但是不能直接获取,则A只能向B发送请求,B再请求C,最终返回

重定向如图:在这里插入图片描述

A想要获取C的资源,A本来是向B发送请求,但是A可以直接跳转定向C发送请求

HTTPServletRequest

请求转发

用户登录校验

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

// 此处action指定的login为servlet映射的地址叫做 login --> 需要在web.xml配置账号:
密码:

login.html

    

WELCOME TO MY WORLD!

web.xml

logingec.HttpServletRequestDemo07login/login

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...