- Servlet(服务器)
- 一.web开发概述
- 1.web服务器
- 2.web服务器tomact
- 3.Web开发流程
- 二.开发环境搭建
- 三.创建发布web项目
- 四.Servlet
- 1.Servlet作用
- 2.Servlet创建和使用
- 3.Servlert配置
- 4.Servlet生命周期
- 五.http请求与响应
- 1.什么是http协议
- 2.http请求
- 3.http响应
- 六.HttpServletRequest 与HttpservletResponse
- 1.HttpServletRequest(请求)
- 2.HttpResponse(响应)
- 七.ServletContext对象
- 八.seesion对象
- 1.一个seesion会话
- 2.seesion对象
- 3.使用seesion实现会话机制的过程
- 4.session中的方法
- 5.seesion生命周期
- 6.设置会话时间
- 九.过滤器
- 1.概念
- 2.三个过滤器有关的接口
- (1)Filter 接口
- (2)FilterChain接口
- (3)FilterConfig接口
- 3.过滤器配置
- 十.监听器
- 1.概念
- 2.监听器分类
- 3.监听器接口
- 4.监听器配置
学习web开发,需要先安装一台web服务器,将开发好的web项目 部署在web服务器中供外界访问
所有的程序部署在服务器端,通过浏览器远程访问.
1.web服务器(1)Web服务器是指驻留于因特网上某种类型计算机的程序. 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览; 它是一个容器,是一个连接用户与程序之间的中间件。
(2)服务器: 提供服务 接受请求 响应
广义上的服务器:软件+硬件
狭义上的: 软件(程序) 放置文件(项目) 供英特网中的其它电脑访问.
服务器——>web容器——>中间件(连接用户 请求 与 进程)
WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、 WebLogic、Jboss等。
2.web服务器tomact在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器: Apache 的Tomcat(开源),该服务器支持全部JSP以及Servlet规范
Apache软件基金会(也就是Apache Software Foundation,),是专门为 运作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织
3.Web开发流程 二.开发环境搭建安装服务器 apache提供的一款开源的服务器 tomcat
(1)官网下载(http://tomcat.apache.org),解压
(2)配置JAVA_HOME环境变量 D:ProgramFilesJavajdk1.8.0_261 TOMCAT根据java_home去查找jdk(前提得有jdk)安装位置)
(3)(已近下载好了)在tomcat的bin目录 双击运行 startup.bat命令 启动tomcat
(4)tomcat目录解释:
(5)访问:
先启动服务器(双击 bin 目录下的 startup.bat 文件)然后才能访问
输入 http://localhost:端口号
或http:127.0.0.1:端口号
或局域网ip:端口号
(6)tomact配置
server.xml是Tomcat的主配置文件 提供Tomcat组件的初始配置,tomcat启动的时候执行这些初始化设置。 修改此文件后,需要重新启动tomcat。如果此文件修改错误,则tomcat不能正 常启动
(看自己的需要来修改或不变)修改服务的端口号: 什么是HTTP? 客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送 了一个http请求。 请求包括: 请求行,请求头(这两部分浏览器会自动发送),请求体 . (1)请求行: 包含http请求方式(get,post),请求地址,http版本 (例如post test.jsp HTTP/1.1) (2)请求头: 请求头包含主机地址,以及客户端的一些环境信息,以键值对的形 式传递 (3)请求体: 是指表单方式请求时向服务器端发送的数据请求体中参数以 键值形式传递, 多个用&链接,服务器接收到后再解析. username=admin&userpwd=123 两种http请求方式: Get方式: 从服务器端获取数据,在地址会显示发送的数据。1.不安全 2.大小限制(一般浏览器大小)2-5kb 也可以向服务 器发送数据如访问?后面的就是向服务器发送的参数超链接访问,默认是GET方式 form提交,不指定method,默认为GET方式 Post方式: 服务器端发送数据,发送的数据在请求体中 安全,大小不受限制。 一个http响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体。 响应行里包含了http协议版本,以及用于描述服务器对请求的处理结果。 响应行:http协议版本,以及用于描述服务器对请求的处理结果,如: 状态码(服务器浏览器用于确定状态的固定数字号码) 响应头:用于描述服务器的基本信息,以及数据描述 如: 响应体:代表服务器向客户端回送的正文 响应的内容就将原来发起请求的页面内容覆盖了 如何接收数据? HttpServletRequest是ServletRequest的子接口 HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。 请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest 来表示请求。 HttpServletRequest :封装了请求的信息,可以从中获取任何请求信息 HttpServletRequest的方法: (1)获取客户机/服务器信息 (2)获取请求参数 tomact8.0以后get请求数据的解码方式支持中文 代码: 响应的内容就将原来发起请求的页面内容覆盖了 怎么样来解决这个问题呢? 同步和异步的不同响应方式来解决这一个问题. 请转置ajax笔记查看相关内容 常用方法: 代码: ServletContext配置: 有一个问题: 登录后的所有操作,都是跟我们的账号关联,在前端向后端发送请求时,后端不知道是哪一个账号在进行操作 怎么在服务器获得当前操作的用户的信息并可以在客户端发来那么多请求的情况下区分它(id,账号)? 解决方案: 1.在向后端发送请求时,将用户的id向后端同时发送(不安全的)后期采用这种机制采用安全加密处理 2.在服务器使用seesion对象,储存用户信息 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开 这个服务器结束,被称为一个会话 在第一次向servlet中发起请求时在服务器端,由服务器端创建一个seesion对象去完成对整个会话期间的管理。 在服务器端储存用户信息java中使用对象存储 代码示例创建seesion对象并将java对象存入session对象中: 会话对象是容器创建的,并保存在容器中,如果客户端连接到服务器后,却置之不理,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器 都会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象。 除了根据有效时间使会话对象失效外,还可以调用HttpSession中的invalidate方法,使会话失效,立即销毁会话对象 创建: 第一次访问servlet时,在服务器端会创建。 销毁: 1.服务器关闭 2.长时间会话对象不使用(tomcat默认为30分钟)服务器会将seesion对象销毁 3.调用invalidate()方法销毁seesion 可以再web.xml中进行配置,修改默认时间。例如50分钟销毁。 可以使用HttpSession接口中的setMaxIntervalTime设置,以秒为单位,如果 参数是负数,表示永远不失效。 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求 在请求到达Servlet/JSP之前,过滤器截获请求。 作用: 在客户端的请求访问后端资源之前,拦截这些请求。 代码: 在web.xml文件中配置 代码及注释: 注:在filter配置中的url pattern指向的是sevlet的地址,*是代表过滤全部的请求 示例代码: 代码示例:package com.ffyc.firstweb.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class DemoServlet extends HttpServlet {
public DemoServlet(){
System.out.println("DemoServlet");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
System.out.println(config.getInitParameter("name"));//获得配置文件中的信息
System.out.println( config.getServletName());
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service");
}
}
五.http请求与响应
1.什么是http协议
2.http请求
)]package com.ffyc.twoWeb.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
public class Demo1Servlet extends HttpServlet {
//服务器端接收信息
//构造方法默认就有
//init()可以不重写,服务器调用父类的
// doget()处理用户请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求行数据
System.out.println(req.getMethod()); //请求方式(get/post)
System.out.println(req.getProtocol()); //协议信息
System.out.println(req.getServerName()); //服务器地址
System.out.println(req.getServerPort()); //服务器端口号
//请求头
System.out.println(req.getRemoteAddr()); //获得客户端ip
System.out.println(req.getRemotePort()); //客户端端口
System.out.println(req.getHeader("User-Agent"));
//请求头 getHeader(s)传入一个字符串类型的数据 获得以键值对的形式获得传入名字所对应的数据
//接收用户请求的数据 (重要) tomact8.0以后get请求数据的解码方式支持中文
String name=req.getParameter("name");
System.out.println(name); //张三
System.out.println(req.getParameter("age")); //18
//请求头
System.out.println("doGet");
System.out.println("doGet"+req); //org.apache.catalina.connector.RequestFacade
}
// dopost()处理用户请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
//接收用户请求的数据
req.setCharacterEncoding("utf-8"); //设置post请求数据的解码格式 不设置的话post不支持中文解码
System.out.println(req.getParameter("account"));
System.out.println(req.getParameter("password"));
System.out.println(req.getParameter("sex"));
System.out.println(req.getParameter("course")); //java 因为课程有多个这样只能接收一个
String[] courses=req.getParameterValues("course");
System.out.println(Arrays.toString(courses)); //这样把课程全部放入字符串数组中就可以全部接收了
}
}
2.HttpResponse(响应)
ServletContext servletContext = req.getServletContext();
System.out.println(servletContext.getInitParameter("name"));
ServletContext servletContext = req.getServletContext();
System.out.println(servletContext.getInitParameter("name"));
servletContext.setAttribute("name","lalal");
//注:这两段代码分别在两个不同的servlet中写着
八.seesion对象
//获取服务器生成的Session对象 若是有就获取没有就创建
HttpSession session = req.getSession();
//向session对象中设置一组键值,登录成功后将用户的信息存储到一个对应的session对象中
session.setAttribute("user", user);
4.session中的方法
5.seesion生命周期
session.setMaxInactiveInterval(10);
//将seesion设置为10秒不操作默认销毁 session为session对象
九.过滤器
1.概念
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFiler");
servletRequest.setCharacterEncoding("utf-8");
//设置编码格式 过滤器设置了对应的servlet编码格式就可以去掉或注释掉了
filterChain.doFilter(servletRequest,servletResponse);
//让filter之后的步骤进行下去
}
(3)FilterConfig接口
3.过滤器配置
package com.ffyc.javEE.threeWeb.Listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class ServletListener implements ServletContextListener, HttpSessionListener, ServletRequestListener {
long s;
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("context已创建");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("context已被销毁");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request已销毁");
System.out.println("从request创建到销毁一共用了:"+(System.currentTimeMillis()-s)+"毫秒");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request创建");
s=System.currentTimeMillis();
}
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("seesion创建");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("seesion销毁");
}
}
4.监听器配置



