移动应用开发--5.10学习日志
准备工作
下载tomcat 9.0.62
1.Servlet
Servlet是Sun公司开发动态web的一门技术
Sun在这些API中提供一个接口叫作:Servlet,如果你想开发一个Servlet程序,只需要两步:
- 编写一个类,实现Servlet接口。
- 把开发好的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学习日志相关推荐
- .Net语言 APP开发平台——Smobiler学习日志:实现手机上常见的ListMenuView
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果...
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的&qu ...
- .Net语言 APP开发平台——Smobiler学习日志:如何设置页面的title
1.修改Mobile Form的TitleText的属性 输入需要显示标题,如图1: 2.修改Mobile Form的TitleStyle属性 其中包括Image属性(窗体图标).BackColor属 ...
- .Net语言 APP开发平台——Smobiler学习日志:仿12306的APP登陆界面
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...
- abp学习日志九(总结)
文章目录 ABP 本系列学习日志 AutoMaper 坑1 坑2(这个不算坑) Application 坑1 坑2 ABP 学习abp的最好的网站(官网) 本系列学习日志 abp学习日记 初记 abp ...
- 我的游戏学习日志10——数字游戏策划(5)游戏策划的概念与分工
我的游戏学习日志10--数字游戏策划(5)游戏策划的概念与分工 1.游戏学的概念 "游戏学"一词来自于英文"Ludology",指从游戏本体的角度研究现象.游戏 ...
- Python学习日志10 - 高阶函数和高级应用
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志10课 - 高阶函数 ...
- 2021-11-03大数据学习日志——数据埋点+网络爬虫——后端开发入门
01_mini-web 本章节学习目标 能够知道Web开发流程 能够知道使用web应用程序处理客户端的动态资源请求操作 能够知道路由列表的实现 能够知道装饰器方式的添加路由 能够知道logging日志 ...
- Unreal4引擎开发学习日志
Unreal4引擎开发学习笔记1 相关说明 本游戏引擎学习日志是笔者根据网上相关教学视频所写,是对视频内容的精炼与总结.如果您认为笔者所写不清晰明确,可以访问以下链接: Unreal入门第一季 - 虚 ...
最新文章
- python中递归函数特点,Python递归函数特点及原理解析
- 科大星云诗社动态20210124
- TensorFlow模型转换h5转pb
- 设置跳转到新的actvity之后不可返回
- 机器学习面试——分类算法SVM
- aspnetdb生成
- 嵌入式Linux入门6:u-boot移植
- oracle rac升级补丁及中间的错误提示
- unix linux 安装mono,关于mono在linux连接unixodbc的问题
- 解决在servlet中输出html的中文输出为问号的问题
- ListView刷新单条item实现方法
- PMP课程学习第五天
- oracle中那个日期怎么相减_oracle 日期相减
- 而立之年,第一篇博客,
- 什么是域名系统或 DNS?
- linux ipp,Get Started with Intel® Integrated Performance Primitives
- python教你用骰子拼图
- 互联网商业模式:小s和大S
- Android 编译错误:CreateProcess error=206, 文件名或扩展名太长。
- 什么是Alpha和Beta测试?