JavaWeb三大核心内容:
Servlet
Servlet特征:
-
Servlet是服务器端组件,必须保存在服务器上。
-
Servlet可以动态拼资源(HTML/IMG等),即处理HTTP协议。
-
Servlet必须满足Sun的规范。
-
Servlet是什么:Servlet是Sun推出的,用来在服务器端处理HTTP协议的组件。
服务器:
-
名称:Java 服务器、Java Web 服务器、Servlet 容器;
-
本质:是一个软件,需要安装在硬件上才能用和浏览器是平级的关系;
-
举例:Tomcat(Apache)、JBOSS、WebLogic、WebSphere。
Servlet开发步骤:
1.创建WEB项目
目录:webapp/WEB-INF/web.xml
2.导入jar包
通过maven导入jar包,搜javaee
使用服务器自带的jar包,右键项目->target runtime->勾选tomcat
3.创建Servlet
实现Servlet接口
也可以继承HttpSevlet,此类已实现了Servlet接口
实现/重写service(),在此方法内动态拼HTML
4.注册Servlet
注册Servlet,并声明别名
通过别名,给此Servlet注册网名(以/开头)
5.部署项目
在Servers下选择Tomcat,右键Add and Remove
在弹出框内左侧选中项目,双击移动到右侧
部署:就是拷贝
6.访问Servlet
Servlet执行原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
Servlet工作原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
请求方式:
-
介绍:浏览器向服务器发送数据的方式;
-
GET:
-
默认情况下所有的请求都是GET请求
-
采用路径传参,即通过路径携带参数
-
传参过程中参数可见,隐私性差
-
因为路径大小有限制,所以能够传递的参数很小
- POST:
-
method=“post”
-
采用实体内容传参
-
在传参的过程中,路径上看不到参数,隐私性好
-
实体内容专门用于传递数据,因此大小不受限制
- 使用场景:
-
浏览器向服务器索取(查询)数据用GET请求
-
浏览器向服务器提交(保存)数据用POST请求
中文乱码:
重定向:
-
格式:res.sendRedirect(“findEmp”);//findEmp是网名
-
原理图如下:
项目路径访问:
URI和URL:
-
狭义(Java):
-
URI:绝对路径;
-
URL:完整路径;
-
URL包含了URI;
-
-
广义(Java/.net/php):
-
URI:资源的名称;
-
URL:资源的真名;
-
URI包含了URL;
-
Servlet生命周期:
-
第1、2、4步只能执行一次,第3步可以执行多次;
-
因为Servlet被Tomcat自动创建一次,因此它在Tomcat内是单例的(只有1个实例),即Servlet满足单例模式;
-
默认情况下,首次访问Servlet时,Tomcat会创建它,也可以修改配置文件web.xml,使得Tomcat启动时就直接创建Servlet;
-
启动时创建Servlet,数字1代表创建的次序:
<load-on-startup>1</load-on-startup>
HttpServlet:
- 自定义的类继承HttpServlet类,重写service方法,Tomcat将HttpServletRequest,
HttpServletResponse传入此方法:
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
super.service(req, res);
}
//...
}
- 调用父类,并将HttpServletRequest、HttpServletResponse两个参数传入:
public class HttpServlet {
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res= (HttpServletResponse) response;
this.service(req, res);
}
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String m = req.getMethod();
if(m.equals("GET")) {
doGet(req, res);
}else if(m.equals("POST")) {
doPost(req, res);
}
}
private void doPost(HttpServletRequest req, HttpServletResponse res) {
// TODO
}
private void doGet(HttpServletRequest req, HttpServletResponse res) {
// TODO
}
//...
}
-
doGet()和doPost()默认的代码直接抛出了异常,为了强制开发者去重写他们。 若要调用它们,就必须重写;
-
service()内去掉super.service()的目的就是不掉用它们,从而避免异常;