Servlet学习笔记

启动Tomcat方式
1.双击打开bin/startup.bat 文件,如果命令行窗口一闪而过,打开http://localhost:8080无页面,配置环境变量 JAVA_HOME 为jdk目录

2.方式二:使用命令行

catalina run
关闭Tomcat方式

修改端口号
1.D:\Soft\apache-tomcat-9.0.27-windows-x64\apache-tomcat-9.0.27\conf
目录下的server.xml

1-65535 端口号范围,修改完后需要重启Tomcat才生效
如何部署到Tomcat服务器
方式一
1.将项目拷贝到
/webapps目录下,浏览器访问
方式二
在\conf\Catalina\localhost 目录下创建配置文件xml,例如 web03.xml
<!--Context表示工程上下文 path表示工程的访问路径:/web03 docBase表示你的工程目录在哪里 -->
<Context path="/web03" docBase="D:\web03" />
注意:保存为utf-8格式,配置文件名要和path一样,修改后重启Tomcat
手托html页面和在浏览器中输入地址访问的背后不同原因

IDEA 整合Tomcat
File | Settings | Build, Execution, Deployment | Application Servers
1.点击添加 选择Tomcat Server


2.创建一个工程

2.JavaWeb
a)如何创建动态工程
1.新建新模块



创建后效果:

b)动态Web工程的目录描述

c)如何导入jar包
1.打开项目结构菜单操作界面,添加一个自己的类库

2.浏览,选择到你当前类库需要的jar包


3.选择给哪个模块使用

4.选择Artifacts选项,将类库添加到打包部署中

d)部署运行
1.编辑运行实例

2.工程路径

3.rerun按钮

4.选择有修改时热部署

3.Servlet
什么是Servlet
1.Servlet是JavaEE规范之一。规范是接口
2.Servlet就是JavaWeb三大组件之一,三大组件是:Servlet程序,Filter过滤器,,Listener监听器
3.Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,并并响应数据给客户端
通过继承HTtpServlet实现Servlet程序
一般在实际项目开发中,都是使用继承HttpServlet的方式去实现Servlet程序
1.编写一个类去继承HTTPServlet类
2.根据业务需要重新doGet或者doPost方法
3.到web.xml中的配置Servlet程序的访问地址
使用IDEA创建Servlet程序


取消掉勾选,不然会使用3.0的注解
Servlet 的继承结构

4.ServletConfig类
ServletConfig类 从类名上来看,就知道是Servlet程序的配置信息类
servlet程序和ServletConfig对象对象都是由Tomcat负载创建,我们负责使用
Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象
a)ServletConfig类的三大作用
1.可以获取Servlet程序的别名servlet-name的值
servletConfig.getServletName();
2.可以初始化参数init-param
System.out.println("初始化参数username的值是:"+servletConfig.getInitParameter("username"));
3.获取ServletContext对象
b)ServletConfig的注意事项
1.
这个类ServletConfig在 implements Servlet 的类中的(重载方法:
public void init(ServletConfig servletConfig) throws ServletException {
}
)出现,也可以在extends HttpServlet的类中使用(
ServletConfig servletConfig=getServletConfig();
)
-
public class HelloServlet3 extends HttpServlet {}
重写init方法时要加上super.init(config);
因为getServletConfig() 方法是来自于GenericServlet父类,GenericServlet中已有init() 方法,他将ServletConfig保存起来,重写后就没有了
5.ServletContext类
a)什么是SevletContext?
1.ServletContext是一个接口,它表示Servlet上下文对象
2.一个web工程,只有一个ServletContext对象实例(在不同的Servlet访问ServletContext地址相同)
3.ServletContext对象是一个域对象
4.ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁
什么是域对象?
域对象,是可以像Map一样存取数据的对象,叫域对象
这里的域指的是存取数据的操作范围
| 存数据 | 取数据 | 删除数据 | |
|---|---|---|---|
| Map | put() | get() | remove() |
| 域对象 | setAttribute() | getAttribute() | removeAttribute() |
b)ServletContext类的四个作用
1.获取web.xml中配置的上下文参数context-param
<!--context-param是上下文参数(它属于整个web工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
ServletContext context=getServletConfig().getServletContext();
String username=context.getInitParameter("username");
System.out.println("context-param的参数是:"+username);
2.获取当前的工程路径,格式:/工程路径
System.out.println("当前工程路径:"+context.getContextPath());
3.获取工程部署后在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ <br/>
*
* */
System.out.println("工程部署的路径:"+context.getRealPath("/"));
//输出D:\Code\Java\workspace\JavaWeb\out\artifacts\06_servlet_war_exploded\
//还有其他输出
//以下路径是是IDEA整合Tomcat之后。Tomcat被拷贝的一些副本信息
Using CATALINA_BASE: "C:\Users\zsr\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_27_JavaWeb_2"
Using CATALINA_HOME: "D:\Soft\apache-tomcat-9.0.27-windows-x64\apache-tomcat-9.0.27"
Using CATALINA_TMPDIR: "D:\Soft\apache-tomcat-9.0.27-windows-x64\apache-tomcat-9.0.27\temp"
Using JRE_HOME: "D:\Soft\Java\JDK1.8.0"
Using CLASSPATH: "D:\Soft\apache-tomcat-9.0.27-windows-x64\apache-tomcat-9.0.27\bin\bootstrap.jar;D:\Soft\apache-tomcat-9.0.27-windows-x64\apache-tomcat-9.0.27\bin\tomcat-juli.jar"
4.像Map一样存取数据
(ServletContext没有存数据之前都是空的,存之后在哪个Servlet取都会有数据)
ServletContext context1= getServletContext();
System.out.println("保存之前:Context中获取域数据:"+context1.getAttribute("key1"));
context1.setAttribute("key1","value1");
System.out.println("Context中获取域数据:"+context1.getAttribute("key1"));
6.HTTP协议
a)什么是协议?
协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议
所谓HTTP协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP协议
HTTP协议中的数据又叫报文
b)请求的HTTP协议格式
客户端给服务器发送的数据叫请求。
服务器给客户端回传的数据叫响应。
请求又分为GET请求,和POST请求两种
i.GET请求
1.请求行
(1)请求的方式 GET
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1
2.请求头
key:value 组成 不同的键值对,表示不同的含义
使用ie浏览器的httpwatch

ii.POST请求
1.请求行
(1)请求的方式 POST
(2)请求的资源路径[+?+请求参数]
(3)请求的协议的版本号 HTTP/1.1
2.请求头
key:value 组成 不同的键值对,表示不同的含义
空行
3.请求体就是发送给服务器的数据

iii.常用请求头的说明
Accept:表示客户端可以接收的数据类型
Accpet-Languege:表示客户端可以接收的语言类型
User-Agent:表示客户端浏览器的信息
Host:表示请求的服务器ip和端口号
iv.哪些是GET请求,哪些是POST请求
GET请求有哪些:
1.form标签method=get
2.a标签
3.link标签引入css
4.script标签引入js文件
5.img标签引入图片
6.iframe引入html页面
7.在浏览器地址栏输入地址后敲回车
POST请求有哪些:
8.form标签 method=post
c)响应的HTTP协议格式
1.响应行
(1)响应的协议和版本号 HTTP/1.1
(2)响应状态码 200
(3)响应状态描述符 OK
2.响应头
key:value 组成 不同的键值对,表示不同的含义
空行
3.响应体

d)常见的响应码说明
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500 表示服务器已经收到请求,但是服务器内部错误(代码错误)
e)MIME类型说明
MIME是HTTP协议中的数据类型
MIME的英文全称是“Multipurpose Internet Mail Extensions” 多功能Internet邮件扩充服务,MIME类型的格式是“大类型/小类型”,并与 某一种文件的扩展名相对应。
常见的MIME类型(通用型):
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
Microsoft Word
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音
MIDI音乐
RealAudio音乐
MPEG
AVI
GZIP
TAR
7.HttpServletRequest类
a)HttpServletRequest类有什么作用
每次只有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装好到Request对象中,然后传到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有请求的信息。
b)HttpServletRequest类的常用方法
-
getRequestURI() 获取请求的资源路径
-
getRequestURL() 获取请求 的统一资源定位符(绝对路径)
-
getRemoteHost() 获取客户端的ip地址
-
getHeader() 获取请求头
-
getParameter() 获取请求的参数
-
getParameterValues() 获取请求的参数(多个值的时候使用)
-
getMethod() 获取请求的方式GET或者POST
-
setAttribute(key,value) 设置域数据
-
getAttribute(key) 获取域数据
-
getRequestDispatcher() 获取请求转发对象
c)如何获取请求的参数
<form action="http://localhost:8080/07_servlet/parameterServlet" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
兴趣爱好:<input type="checkbox" name="hobby" value="cpp" >c++
<input type="checkbox" name="hobby" value="java" >java
<input type="checkbox" name="hobby" value="javascript" >javascript
<input type="submit">
</form>
String username=request.getParameter("username");
String password=request.getParameter("password");
String[] hobby=request.getParameterValues("hobby");
d)POST请求的中文乱码解决
//设置请求体的字符集为UTF-8,从而解决post的中文乱码
//要在获取请求参数前调用才有效
request.setCharacterEncoding("UTF-8");
e)请求的转发
什么是请求转发?
请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。


浙公网安备 33010602011771号