前言:经过最近学习,web阶段快要学完,最近要从头复习下JavaWeb的知识
Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。
例如:平常我们访问的网站,像百度,淘宝这些网站统称为Web
JavaWeb是Java提供的一门动态web资源开发技术,是用Java技术来解决相关web互联网领域的技术栈,像百度,腾讯等等都用java来开发系统。
其中用JavaWeb来开发有两大好处:
1.跨平台
在多人开发的条件下,由于JVM的存在,开发和部署服务器的系统可以随意挑选,只要有对应版本的JDK
2.开源多
开源社区活跃,可以降低开发成本
B/S架构 是 Browser/Server 的缩写,翻译过来就是 浏览器/服务器 架构模式,它的特点是,用户只需要用浏览器访问服务器,就可以获取web资源,具体如图
B/S架构的好处:易于维护升级;服务器端升级后,客户端无需任何部署就可以使用到新的版本。
静态资源主要包含HTML、CSS、JavaScript、图片等,主要负责页面的展示。其特点就是,每个用户看到的都是一样的页面,而且是固定的,不能随着用户的变化进行动态的变化。
动态资源主要包含Servlet、JSP等,主要用来负责逻辑处理。特点是,进行逻辑的处理,并且将逻辑的处理结果给静态资源进行动态展示,所以静态资源和动态资源要一起使用。
数据库主要用来存储数据。
例如:用户登录,在客户端请求服务器时,服务器会从数据库取出数据,并对客户端输入的数据进行比较,会把资源相应给用户,若正确则会放行,若匹配不成功则会提示用户。逻辑处理如下图
这里简略说一下HTTP协议,目前我购入两本《图解TCP/IP》和《图解HTTP》目前读了一半,等读完会进行详细总结讲解
这里讲解在调试过程中经常出现到的集中HTTP响应状态码
200 ok 客户端请求成功(一切成功!!!)
404 Not Found 请求资源不存在(地址栏写错误)
500 Internal Server Error 服务端发生不可预期的错误(一般是服务器内部报错-通常会有报错信息提示)
Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet。
1)需要提前导入Servlet依赖坐标(也可以在Maven仓库中查找)
javax.servlet
javax.servlet-api
3.1.0
provided
*这里需要注意:这题添加scope中添加了bean的作用域为provided,因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错
2)定义一个类,实现Servlet接口,并重写接口中所有方法(包含了Servlet的5个生命周期-其中三个常用的)
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/Test")
public class Test implements Servlet {
/*
初始化方法
1.调用时机:默认情况下,Servlet被第一次访问时被调用
2.调用次数: 1次
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
/*
获取Servlet的初始化参数
(当servlet配置了初始化参数后,web容器在创建servlet实例对象时,
会自动将这些初始化参数封装到ServletConfig对象中,
并在调用servlet的init方法时,
将ServletConfig对象传递给servlet。)
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
提供服务
1.调用时机:每一次Servlet被访问时,调用
2.调用次数: 多次(每访问一次就调用一次)
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//获取请求方式,根据不同的请求方式进行不同的业务处理
HttpServletRequest request = (HttpServletRequest)req;
//1. 获取请求方式
String method = request.getMethod();
//2. 判断
if("GET".equals(method)){
// get方式的处理逻辑
}else if("POST".equals(method)){
// post方式的处理逻辑
}
}
/*
提供有关servlet 的信息
*/
@Override
public String getServletInfo() {
return null;
}
/*
销毁方法
1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用
2.调用次数: 1次
*/
@Override
public void destroy() {
}
}
在实际开发中2.1中的方法创建很复杂,需要重写很多方法,并且我们大部分时间是在service方法中进行编写,所以可以通过继承HttpServlet简化创建步骤,若在需要时可以用2.1中的方法创建。
如图为Servlet的体系结构
package Servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(value = "/Servlet")
public class Servlet extends HttpServlet {
/*
get请求是调用的方法
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
/*
post请求调用的方法
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
一个Servlet可以配置多个urlPattern路径,如下
package Servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(urlPatterns = {"/Test03","/Test04"})
public class Servlet extends HttpServlet {
/*
get请求是调用的方法
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
/*
post请求调用的方法
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
urlPattern配置规则总共有四种匹配
package Servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(urlPatterns = "/Test04/Test03")
public class Servlet extends HttpServlet {
/*
get请求是调用的方法
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
/*
post请求调用的方法
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
在浏览器成功访问
package Servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(urlPatterns = "/Test04/*")
public class Servlet extends HttpServlet {
/*
get请求是调用的方法
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
/*
post请求调用的方法
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
运行结果
package Servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(urlPatterns = "*.a")
public class Servlet extends HttpServlet {
/*
get请求是调用的方法
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
/*
post请求调用的方法
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
运行结果
package Servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(urlPatterns = "/*")
public class Servlet extends HttpServlet {
/*
get请求是调用的方法
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
/*
post请求调用的方法
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
运行结果
精确匹配 > 目录匹配> 扩展名匹配 > /* > /
学完这些基本的Servlet就可以创建了,后续会总结过呢更多的使用,努力学习的一天!