Servlet学习笔记

1.Tomcat

 

 

 

 

启动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();

  1. public class HelloServlet3 extends HttpServlet {}

重写init方法时要加上super.init(config);

 @Override
     public void init(ServletConfig config) throws ServletException {
         super.init(config);
         System.out.println("重写了init方法");
    }
 

因为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类型(通用型):

超文本标记语言文本 .html text/html

xml文档 .xml text/xml

XHTML文档 .xhtml application/xhtml+xml

普通文本 .txt text/plain

RTF文本 .rtf application/rtf

PDF文档 .pdf application/pdf

Microsoft Word文件 .word application/msword

PNG图像 .png image/png

GIF图形 .gif image/gif

JPEG图形 .jpeg,.jpg image/jpeg

au声音文件 .au audio/basic

MIDI音乐文件 mid,.midi audio/midi,audio/x-midi

RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio

MPEG文件 .mpg,.mpeg video/mpeg

AVI文件 .avi video/x-msvideo

GZIP文件 .gz application/x-gzip

TAR文件 .tar application/x-tar

 

7.HttpServletRequest类

a)HttpServletRequest类有什么作用

每次只有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装好到Request对象中,然后传到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有请求的信息。

 

b)HttpServletRequest类的常用方法

  1. getRequestURI() 获取请求的资源路径

  2. getRequestURL() 获取请求 的统一资源定位符(绝对路径)

  3. getRemoteHost() 获取客户端的ip地址

  4. getHeader() 获取请求头

  5. getParameter() 获取请求的参数

  6. getParameterValues() 获取请求的参数(多个值的时候使用)

  7. getMethod() 获取请求的方式GET或者POST

  8. setAttribute(key,value) 设置域数据

  9. getAttribute(key) 获取域数据

  10. 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)请求的转发

什么是请求转发?

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。

 

 

posted @ 2021-03-11 20:22  七海er  阅读(236)  评论(0)    收藏  举报