servlet主体内容图解
如何创建一个web的应用
- 找到tomcat的webapps路径
- 创建一个文件夹, 名字为项目名
- 如果只有静态资源, 直接创建html文件
访问动态资源, 需要WEB-INF里面web.xml文件, WEB-INF里面的内容不能直接访问, 需要转发才能访问! - 访问方式:
http://地址:端口号/项目名/资源名
IDEA或者MyEclipse创建的项目目录结构
src: Java源代码
web/WebRoot: 该目录下是整个应用程序所有的资源文件,当发布到Tomcat, 该目录自动变为项目名
WEB-INF: 该目录下, 资源不能直接访问
lib: 该目录下用来导入外部jar包
web.xml: 是项目的配置文件, 在该配置文件中一般用来配置web三大组件
classes: 该目录下是所有Java源码被编译后的.class文件
Servlet的三种实现方法
- 实现Servlet接口
- 继承GenericServlet
- 继承HttpServlet类(使用)
其中有两个service方法
重写doGet(), doPost()即可
示例代码:
public class ServletDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("post方式请求");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
System.out.println("get方式请求");
}
}
Servlet中常见的对象
HttpServletRequest: 用来接收客户端传递过来的请求参数
HttpServletResponse: 用来向客户端响应结果
ServletConfig: 该对象封装了Servlet的配置信息
ServletContext: Java Web 4大域对象之一, 它伴随着整个服务器的开启和关闭
get方式和post方式提交
可以简单理解:
当使用表单提交, 并且method属性为post时, 是post请求;
其它请求都为get方式
详细区别:
a) get请求
i. 在浏览器地址栏直接输入的一个地址(带着表单的数据提交)
ii. 表单的默认提交方式
iii. 如果你不通过表单进行提交的话,而是点击链接的话,默认提交的就是get
iv. get请求提交的话,会在浏览器上泄露很多详细信息,不安全,并且地址栏会有长度限制;
v. 如果使用get请求且表单上有中文的话,在servlet中获取数据以及处理数据需要对两个对象进行设置编码以及对拿到的数据进行转编码处理
b) post请求
i. post请求只在你设置了method=“post”
的时候出现;
ii. post请求不会在地址栏显示表单的数据,理论上来说,数据量是没有上限,适合大量数据的提交
iii. 从安全性来说,post不会显示所有表单的详细信息,所以要安全些,需要注意的是,post仅仅只是不显示数据,并不代表数据加密
iv. 如果使用post提交带中文的数据的话,我们仅仅只需要在servlet中对那两个对象设置编码即可;
Servlet的生命周期:
- 当客户端向服务器发送请求的时候, 服务器tomcat根据请求路径
在web.xml中找到对应Servlet的全限定名, 然后实例化一个
servlet对象, 然后马上调用servlet对象init(), 初始化servlet, 该方法
在servlet的一生中只会执行一次 - 紧接着马上调用servlet的service()方法, 处理具体的业务, 并且向客户端
响应处理结果, 每次发送请求都会调用一次该方法 - 当服务器关闭的时候, 服务器会调用servlet的destroy()方法, 销毁servlet的实例, 这个方法也只会执行一次
示例代码:
/**
* Servlet
* 单例多线程
*
* 问题: 我们实现Servlet接口时, 每次都需要实现多个方法, 有点麻烦!
* 所以, 直接继承HttpServlet
* @Author menglanyingfei
* @Created on 2018.01.10 9:42
*/
public class ServletDemo1 extends HttpServlet {
/*
Servlet的方法:
是生命周期的方法之一
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
// 当请求到达服务器的时候, 服务器马上实例化servlet对象
// 并且调用该方法 初始化Servlet, 在Servlet生命周期只创建一次
System.out.println("初始化");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
/*
servlet处理具体请求的方法
处理请求, 每请求一次, 就会调用一次该方法
*/
System.out.println("service");
}
@Override
public void destroy() {
/*
* 在服务器关闭前的时候执行的方法 销毁Servlet实例
*/
System.out.println("销毁!");
}
}
完整代码见:
https://github.com/menglanyingfei/Java/tree/master/JavaWebTrain