准备工作

下载tomcat 9.0.62

1.Servlet

Servlet是Sun公司开发动态web的一门技术
Sun在这些API中提供一个接口叫作:Servlet,如果你想开发一个Servlet程序,只需要两步:

  1. 编写一个类,实现Servlet接口。
  2. 把开发好的Java类部署到web服务器中。

把实现了Servlet接口的Java程序,叫作Servlet

2.Hello Servlet

1.构建一个普通的Maven项目(主工程),删除里面的src目录,之后的学习都是在该项目里建立Modle(子工程)。

2.创建Model子工程。

遇到的问题:创建的Model子工程下没有webapp目录

创建Model时,选择的是New Model 然后直接点击create。(就是没有选择导入框架
解决办法:创建Model时,点击Maven Archetype 在Archetype中选择框架,再点击Create等待自动创建。

创建好的Model子工程

3.在主工程的pom.xml中导入依赖。

maven 版本依赖、版本更新、版本查询网站:https://mvnrepository.com/

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
</dependency>

Maven子父项目:

父项目中的jar包子项目可以使用,子项目的jar包父项目不可以使用。

构建后servlet-01子项目后
父项目中:

<modules><module>servlet-01</module>
</modules>

子项目中:

<parent><artifactId>javaweb</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version>
</parent>

4.编写一个servlet程序:

1.编写一个普通类。

2.实现Servlet接口,这里我们直接继承(extends)HttpServlet。

public class Hello extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {PrintWriter writer = resp.getWriter();writer.print("Hello Servlet");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

3.编写Servlet的映射。

为什么要映射?
    我们写的是Java程序,但是要通过浏览器访问。而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet,还需要给它一个浏览器能够访问的路径。

在web.xml中配置。

5.配置tomcat

之前博客有写 添加链接描述

6.启动Tomcat

启动后自动跳转到http://localhost:8086/servlet_01_war/

在url路径上加/hello
http://localhost:8086/servlet_01_war/hello
页面显示我们doGet里设置好的内容Hello Servlet

可能遇到的问题:

500:Tomcat版本过高,换成9.0

3.Mapping原理

一个Servlet可以指定一个映射路径
一个Servlet可以指定多个映射路径
一个Servlet可以指定通用映射路径
指定一些后缀或者前缀等等……

优先级问题:
    指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求。

4.ServletContext

Web容器在启动的时候,它会为每个Web程序都创建一个对应的ServletContext对象。它代表了当前的Web应用。

共享数据:

我在这个Servlet中保存的数据,可以在另一个Servlet中拿到.

1.存:Hello类里的内容:(向ServletContext写数据)

package com.example.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class Hello extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//将数据保存在ServletContext中;名字:username;值(数据):zhang sanServletContext servletContext = this.getServletContext();servletContext.setAttribute("username","zhang san");}}

2.取:新建一个GetData类(获取信息类)

package com.example.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class GetData extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();String str = (String) servletContext.getAttribute("username");PrintWriter writer = resp.getWriter();writer.println(str);}
}

tips:映射关系也需要补充好

如果先进入http://localhost:8086/servlet_01_war/getdata,则页面显示null(还未获取到信息)。

再进入http://localhost:8086/servlet_01_war/hello页面为空

再次进入http://localhost:8086/servlet_01_war/getdata页面显示zhang san

若获取数据为中文张三,显示界面可能会??(乱码)

在GetData类中加入下面的代码。

//响应到浏览器(处理乱码问题(配置类型和编码))
resp.setContentType("text/html");//响应类型
resp.setCharacterEncoding("UTF-8");//响应的编码格式

ServletContext获取初始化参数

1.在配置文件web.xml中设置初始化参数

<!--配置一些web应用初始化参数--><context-param><param-name>Good Morning</param-name><param-value>2022-05-15 07:22</param-value></context-param>

2.新建GetInit类

package com.example.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class GetInit extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取ServletContext对象ServletContext servletContext = this.getServletContext();//2.获取初始化参数//引号之间的内容要和<param-name>一致,否则跳转到http://localhost:8086/servlet_01_war/getinit,弹出页面显示nullString str = servletContext.getInitParameter("Good Morning");//3.输出结果resp.getWriter().print(str);}
}

3.配置GetInit映射

    <servlet><servlet-name>getinit</servlet-name><servlet-class>com.example.servlet.GetInit</servlet-class></servlet><servlet-mapping><servlet-name>getinit</servlet-name><url-pattern>/getinit</url-pattern></servlet-mapping>

4.运行

ServletContext请求转发

请求A界面,实际访问B界面,URL不变。
1.创建GetRequestDispatch类

package com.example.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class GetRequestDispatch extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = this.getServletContext();//进入了/getRequestDispatch 界面System.out.println("进入了GetRequestDispatch");//实际被转发到了/getinit 界面servletContext.getRequestDispatcher("/getinit");servletContext.getRequestDispatcher("/getinit").forward(req,resp);}
}

2.配置映射关系

 <servlet><servlet-name>getRequestDispatch</servlet-name><servlet-class>com.example.servlet.GetRequestDispatch</servlet-class></servlet><servlet-mapping><servlet-name>getRequestDispatch</servlet-name><url-pattern>/getRequestDispatch</url-pattern></servlet-mapping>

3.运行:

移动应用开发--5.10学习日志相关推荐

  1. .Net语言 APP开发平台——Smobiler学习日志:实现手机上常见的ListMenuView

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...

  2. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果...

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的&qu ...

  3. .Net语言 APP开发平台——Smobiler学习日志:如何设置页面的title

    1.修改Mobile Form的TitleText的属性 输入需要显示标题,如图1: 2.修改Mobile Form的TitleStyle属性 其中包括Image属性(窗体图标).BackColor属 ...

  4. .Net语言 APP开发平台——Smobiler学习日志:仿12306的APP登陆界面

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...

  5. abp学习日志九(总结)

    文章目录 ABP 本系列学习日志 AutoMaper 坑1 坑2(这个不算坑) Application 坑1 坑2 ABP 学习abp的最好的网站(官网) 本系列学习日志 abp学习日记 初记 abp ...

  6. 我的游戏学习日志10——数字游戏策划(5)游戏策划的概念与分工

    我的游戏学习日志10--数字游戏策划(5)游戏策划的概念与分工 1.游戏学的概念 "游戏学"一词来自于英文"Ludology",指从游戏本体的角度研究现象.游戏 ...

  7. Python学习日志10 - 高阶函数和高级应用

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志10课 - 高阶函数 ...

  8. 2021-11-03大数据学习日志——数据埋点+网络爬虫——后端开发入门

    01_mini-web 本章节学习目标 能够知道Web开发流程 能够知道使用web应用程序处理客户端的动态资源请求操作 能够知道路由列表的实现 能够知道装饰器方式的添加路由 能够知道logging日志 ...

  9. Unreal4引擎开发学习日志

    Unreal4引擎开发学习笔记1 相关说明 本游戏引擎学习日志是笔者根据网上相关教学视频所写,是对视频内容的精炼与总结.如果您认为笔者所写不清晰明确,可以访问以下链接: Unreal入门第一季 - 虚 ...

最新文章

  1. python中递归函数特点,Python递归函数特点及原理解析
  2. 科大星云诗社动态20210124
  3. TensorFlow模型转换h5转pb
  4. 设置跳转到新的actvity之后不可返回
  5. 机器学习面试——分类算法SVM
  6. aspnetdb生成
  7. 嵌入式Linux入门6:u-boot移植
  8. oracle rac升级补丁及中间的错误提示
  9. unix linux 安装mono,关于mono在linux连接unixodbc的问题
  10. 解决在servlet中输出html的中文输出为问号的问题
  11. ListView刷新单条item实现方法
  12. PMP课程学习第五天
  13. oracle中那个日期怎么相减_oracle 日期相减
  14. 而立之年,第一篇博客,
  15. 什么是域名系统或 DNS?
  16. linux ipp,Get Started with Intel® Integrated Performance Primitives
  17. python教你用骰子拼图
  18. 互联网商业模式:小s和大S
  19. Android 编译错误:CreateProcess error=206, 文件名或扩展名太长。
  20. 什么是Alpha和Beta测试?

热门文章

  1. laravel框架 APP 支付宝支付
  2. hive 内连接 左外连接 右外连接 满外连接 左半开连接 交叉连接 多表连接 隐式连接
  3. 一位同学3年通过CPA, CFA, ACCA的经验
  4. jQuery插件实现图片墙小案例
  5. 有限元法的学习(一)
  6. Enterprise Architect多人协作方法
  7. 储成才/李家洋/卜庆云团队联合解码东北水稻育种史,助力水稻精准设计育种...
  8. 时间轴_鲲鹏芯片发展历程
  9. 示波器实现全自动测试
  10. 看顶级3D角色建模师怎么使用ZBrush渲染制作人物衣物、皮肤