JavaWeb 是指,所有通过Java 语言编写可以通过浏览器访问的程序的总称,叫JavaWeb。
JavaWeb 是基于请求和响应来开发的。
什么是请求?
请求是指客户端给服务器发送数 据,叫请求Request。
什么是响应?
响应是指服务器给客户端回传数据,叫响应Response。
请求和响应是成对出现的,有请求就有响应。
Tomcat:由Apache 组织提供的一种Web 服务器,提供对jsp 和Servlet 的支持。它是一种轻量级的javaWeb 容器(服务器),也是当前应用最广的JavaWeb 服务器(免费)。
Jboss:是一个遵从JavaEE 规范的、开放源代码的、纯Java 的EJB 服务器,它支持所有的JavaEE 规范(免
费)。
GlassFish: 由Oracle 公司开发的一款JavaWeb 服务器,是一款强健的商业服务器,达到产品级质量(应用很
少)。
Resin:是CAUCHO 公司的产品,是一个非常流行的服务器,对servlet 和JSP 提供了良好的支持,
性能也比较优良,resin 自身采用JAVA 语言开发(收费,应用比较多)。
WebLogic:是Oracle 公司的产品,是目前应用最广泛的Web 服务器,支持JavaEE 规范,而且不断的完善以适应新的开发要求,适合大型项目(收费,用的不多,适合大公司)。
Tomcat版本 | Servlet/Jsp版本 | JavaEE版本 | 运行环境 |
---|---|---|---|
7.0 | 3.0 / 2.2 | 6.0 | JDK6.0 |
8.0 | 3.1/ 2.3 | 7.0 | JDK7.0 |
Servlet 程序从2.5 版本是现在世面使用最多的版本(xml 配置),Servlet3.0 之后。就是注解版本的Servlet 使用。
Servlet 是JavaEE 规范之一。规范就是接口
Servlet 就JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
Servlet 是运行在服务器上的一个java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端
1、编写一个类去实现Servlet 接口
2、实现service 方法,处理请求,并响应数据
3、到web.xml 中去配置servlet 程序的访问地址
Servlet 程序的示例代码:
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet 调用doGet()被执行了!!!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet 调用doPost()被执行了!!!");
}
}
web.xml 中的配置:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>HelloServletservlet-name>
<servlet-class>com.xiaobear.HelloServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>HelloServletservlet-name>
<url-pattern>/hellourl-pattern>
servlet-mapping>
web-app>
public interface ServletConfig {
String getServletName(); //可以获取Servlet 程序的别名servlet-name 的值
ServletContext getServletContext();//获取ServletContext 对象
String getInitParameter(String var1);//获取初始化参数init-param
Enumeration<String> getInitParameterNames();
}
ServletConfig 类从类名上来看,就知道是Servlet 程序的配置信息类。
Servlet 程序和ServletConfig 对象都是由Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个Servlet 程序创建时,就创建一个对应的
ServletConfig 对象。
web.xml
<servlet>
<servlet-name>HelloServletservlet-name>
<servlet-class>com.atguigu.servlet.HelloServletservlet-class>
<init-param>
<param-name>usernameparam-name>
<param-value>rootparam-value>
init-param>
<init-param>
<param-name>urlparam-name>
<param-value>jdbc:mysql://localhost:3306/testparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>HelloServletservlet-name>
<url-pattern>/hellourl-pattern>
servlet-mapping>
Servlet 中的代码
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init 初始化方法!!!");
//可以获取Servlet 程序的别名servlet-name 的值
System.out.println("HelloServlet 程序的别名是:" + config.getServletName());
//获取初始化参数init-param
System.out.println("初始化参数username 的值是;" + config.getInitParameter("username"));
System.out.println("初始化参数url 的值是;" + config.getInitParameter("url"));
//获取ServletContext 对象
System.out.println(config.getServletContext());
super.init(config); }
1、ServletContext 是一个接口,它表示Servlet 上下文对象
2、一个web 工程,只有一个ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在web 工程部署启动的时候创建。在web 工程停止的时候销毁。
什么是域对象?域对象,是可以像Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个web 工程。
存数据 | 取数据 | 删除数据 | |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
1、获取web.xml 中配置的上下文参数context-param
2、获取当前的工程路径,格式: /工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像Map 一样存取数据
ServletContext的代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet 调用doGet()被执行了!!!");
// 1、获取web.xml 中配置的上下文参数context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param 参数username 的值是:" + username);
System.out.println("context-param 参数password 的值是:" +
context.getInitParameter("password"));
// 2、获取当前的工程路径,格式: /工程路径
System.out.println( "当前工程路径:" + context.getContextPath() );
// 3、获取工程部署后在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA 代码的web 目录
*/
System.out.println("工程部署的路径是:" + context.getRealPath("/"));
System.out.println("工程下css 目录的绝对路径是:" + context.getRealPath("/css"));
System.out.println("工程下imgs 目录1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
}
<context-param>
<param-name>usernameparam-name>
<param-value>contextparam-value>
context-param>
<context-param>
<param-name>passwordparam-name>
<param-value>rootparam-value>
context-param>
ContextServlet1代码
public class ContextServlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// 获取ServletContext 对象
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前: Context1 获取key1 的值是:"+ context.getAttribute("key1"));
context.setAttribute("key1", "value1");
System.out.println("Context1 中获取域数据key1 的值是:"+ context.getAttribute("key1"));
}
}
//ContextServlet2
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("Context2 中获取域数据key1 的值是:"+ context.getAttribute("key1"));
}
什么是协议 ? 协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。
客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP 协议。HTTP 协议中的数据又叫报文
请求分为GET 请求,和POST 请求
哪些是GET 请求,哪些是POST 请求
GET 请求有哪些:
1、form 标签method=get
2、a 标签
3、link 标签引入css
4、Script 标签引入js 文件
5、img 标签引入图片
6、iframe 引入html 页面
7、在浏览器地址栏中输入地址后敲回车
POST 请求有哪些:
form 标签method=post