JavaWeb的简单总结
前言
JavaWeb框架虽然是老技术,但是还有很多地方值得我们学习的。甚至依然有些学校开设这门课程。
我们在学习这门技术的同时也要站在思想层面去思考它
利用假期的时间,我再次学习了一遍JavaWeb
让我们来看看它有哪些知识点吧。
一、3大组件(重点)
Java的三大组件有哪些呢?
1、Servlet
2、Listener 监听器
3、Filter 拦截器(过滤器)
下面我们对这三大组件进行详细介绍
1、Servlet
Servlet的特点
1、是JavaWeb的三大组件之一
2、是JavaEE规范之一,也就是接口
3、是服务器中的Java小程序,用于接收请求和响应请求
Servlet的作用
用于客户端和服务端的交互,接收客户端的请求和响应客户端。
逻辑图如下:
Servlet的生命周期
- 创建Servlet实例
- 初始化Servlet,执行init()初始化方法
- 执行Service()方法(用于处理请求和响应的方法)
- Servlet的销毁,执行destroy()销毁方法
Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法,init()方法只会调用一次,当web工程停止的时候调用destroy()销毁方法
service()方法的介绍
源码
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
通过上面源码我们发现service()
方法有两个参数,分别为:
ServletRequest对象:主要用于接收客户端的请求,对客户端的请求进行处理的对象。
ServletResponse对象:主要用于接收服务端的响应信息
一般在实际项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序
实际开发中使用Servlet
步骤:
1、编写一个类去继承HttpServlet
类
2、根据请求类型(get请求,post请求)重写 doGet()
或doPost()
方法
3、到web.xml中的配置Servlet程序的访问地址(或者通过注解的方式在类头配置@WebServlet("\访问地址"))
如下:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author:小庄
*/
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("这里处理get请求的代码");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("这里处理post请求的代码");
}
}
GET请求有哪些?
- form标签 method=“get”
- a标签的跳转
- link标签引入css
- Script标签引入js文件
- img标签引入图片
- iframe标签引入html页面
- 在游览器地址栏中输入地址敲回车
POST请求有哪些?
- form标签 method=“post”
我们发现doGet()
和doPost()
方法都有HttpServletRequest
和HttpServletResponse
对象,在实际开发中也常用到它
HttpServletRequest的常用方法
方法 | 作用 |
---|---|
getRequestURI() | 获取请求的资源路径 |
getRequestURL() | 获取请求的统一资源定位符 |
getRemoteHost() | 获取客户端的ip地址 |
getHeader() | 获取请求头 |
getParameter() | 获取请求的参数 |
getMethod() | 获取请求的方式GET或POST |
getParameterValues | 获取请求的参数(多个值的时候使用) |
setAttribute(key,value) | 设置域数据 |
getAttribute(key) | 获取域数据 |
getRequestDispatcher() | 获取请求转发对象 |
setCharacterEncoding("utf-8") | 设置编码格式为UTF-8 |
getCookies() | 获取Cookie数组 |
getSession() | 获取Session对象 |
HttpServletResponse的常用方法
方法 | 作用 |
---|---|
setStatus() | 设置响应状态码,常见有404,403,500 |
sendRedirect() | 设置重定向 |
getWriter() | 获取字符输入流对象 |
getOutputStream() | 获取字节输入流对象 |
addCookie() | 添加一个Cookie |
encodeRedirectURL | 指定重定向的编码格式 |
sendError() | 给客户端发送一个错误响应,可发送状态码+错误信息 |
例如:response.getWriter().write(回传的数据);
2、Listener
Listenter的特点
- 是JavaWeb的三大组件之一
- 是JavvaEE的规范,也就是接口
- Listenter的作用是监听某种事物的变化。然后通过回调函数,反馈给用户(程序)去做一些相应的操作
具体的实现逻辑请参考我写的Java设计模式中的观察者模式
Java设计模式,收藏过百
3、Filter
Filter的特点
- Filter过滤器是JavaWeb的三大组件之一;三大组件分别是:Servlet程序就、Listener监听器、Filter拦截器(过滤器)
- Filter过滤器它是JavaEE的规范,也就是接口
- Filter过滤器它的作用是:拦截请求,过滤响应
拦截请求常见的应用场景有:
- 权限检查
- 日记操作
- 事务管理等
具体的实现逻辑请参考我写的Java设计模式中的责任链模式
Java设计模式,收藏过百
Filter具体实现步骤:
- 创建一个类实现Filter接口(import javax.servlet.*;)
- 重写doFilter方法并写入拦截的内容
- 调用chain.doFilter(req, resp);方法放行,否则就停在那里
小案例:
import javax.servlet.*;
import java.io.IOException;
/**
* @Author:小庄
*/
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
//这里写拦截的内容,可以对请求和响应的内容进行拦截
//放行
chain.doFilter(servletRequest,servletResponse);
}
}
二、ServletConfig
顾名思义,这个类是服务器的配置类
ServletConfig类的作用
1、可以获取Servlet程序的别名 servlet-name的值
2、获取初始化参数init-param的值
3、获取ServletContext对象
项目中我们通常使用它获取ServletContext对象,代码如下:
ServletContext context = getServletConfig().getServletContext();
三、ServletContext
什么是ServletContext?
- ServletContext是一个接口,它表示Servlet上下文对象
- 一个web工程,只有一个ServletContext对象实例
- ServletContext对象是一个域对象
什么是域对象?
是可以像Map一样存取数据的对象,叫域对象
这里的域指的是存取数据的操作范围
存数据 | 取数据 | 删数据 | |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
ServletContext的作用
我们先获取ServletContex对象
ServletContext context = getServletConfig().getServletContext();
1、获取web.xml中配置的上下文参数context-param中的值
context.getInitParameter("");//里面写参数名
2、获取当前的工程路径,格式: /工程路径
context.getContextPath()
3、获取工程部署后在服务器硬盘上的绝对路径
context.getRealPath("/");
4、像Map一样存取数据
context.setAttribute("key","value");//存数据
context.getAttribute("key");取数据
四、请求转发和重定向
1、请求转发
请求转发的特点
- 游览器地址栏没有变化
- 一次请求
- 共享域对象的值
- 可以转发到WEB-INF目录下 //默认情况下,游览器不能直接访问WEB-INF目录
- 不能访问工程以外的资源 //如:不能访问百度的网页
具体使用
request.getRequestDispatcher(工程的具体地址).forward(request,response); //forward的参数是请求和响应的值
2、重定向
定义:是指客户端给服务器发请求,然后服务器告诉客户端说:我给你新地址
也就是说,服务端告诉客户端,叫客户端重新访问重定向的地址,注意,不能重定向自身的请求地址,不然会陷入死循环
具体使用
response.sendRedirect(绝对地址)
绝对路径和相对路径
相对路径
. 表示当前目录
.. 表示上一级目录
资源名 表示当前目录下的资源名
绝对路径
http://ip:port/工程路径/资源路径
Web中 /斜杠的不同意义
在web /斜杠是一种绝对路径
/斜杠如果被游览器解析,得到的地址是http://ip:port/
/斜杠如果被服务器解析,得到的地址是http://ip:port/工程路径
五、关于XML
作用
- 能够保存数据,并且这些数据具有自我描述性
- 还可以做为项目或者模块的配置文件
- 还可以做为网络传输数据的格式(JSON为主)
XML命名规则
- 名称不能以数字或标点符号开始
- 名称不能包含空格
XML标签
//单标签
<hello />
//双标签
<hello></hello>
XML属性
- 属性可以提供元素格外信息
- 一个标签可以有多个属性,每个属性的值必须使用双引号引起来
XML语法规则
所有XML元素都须有关闭标签,也就是闭合。可以看上面的单标签和双标签
XML文档必须有根元素
根元素就是顶级元素
没有父标签的元素
XML中的特殊字符
> 特殊字符 >
< 特殊字符 <
不让XML解析(文本区域):<![CDATA[内容]]>
例如:
<![CDATA[
<<<<<您好
]]>
输出结果为:<<<<<您好
结语
关于JSP、EL表达式和数据库连接的内容不讲解,如果想看具体项目中怎么使用,请参考我的专栏:JavaWeb
最后:祝国庆愉快