Java Web笔记-by戏言

1.servlet技术

1.什么是servlet

  • javaEE规范,规范即接口,就像jdbc
  • 运行在服务器上小程序,接收请求,并响应
    servlet技术

web.xml配置servlet

<servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.xiyan.servlet.HelloServlet</servlet-class>
        <!--定义返回的消息-->
        <init-param>
            <param-name>msg</param-name>
            <param-value>hello world</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

HelloServlet

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init.....");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service方法");

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy.....");

    }
}

2.servlet生命周期

  • 构造方法
  • init初始化方法,利用web.xml配置的参数初始化
  • service方法
  • destroy方法

3.servlet通过继承HttpServlet实现

public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

4.servlet继承体系

在这里插入图片描述

5.ServletConfig类

  • 获取servlet别名
  • 初始化参数init-param
  • 获取ServletContext对象

HelloServlet.java

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init.....");
        msg=servletConfig.getInitParameter("msg");
    }

6.ServletContext类

  • 表示Servlet上下文对象
  • 一个web工程只有一个ServletContext对象实例
  • 它是一个域对象
  • 随着web工程部署时启动,web工程停止时销毁

作用

  • 获取web.xml配置的context-param
  • 获取当前工程路径
  • 获取工程部署在服务器的绝对路径
  • 存取数据

7.HttpServletRequest类

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息

req.setCharacterEncoding("UTF-8");
//如果是post请求需要设置编码
String username = req.getParameter("username");
String password = req.getParameter("password")

8.请求的转发

在这里插入图片描述

  • 转发是服务器行为,地址也是服务器解析的
  • 一个request,一次请求
  • 不能访问工程外的资源
req.getRequestDispatcher("/").forward(req,resp);

9.web中的路径

  • /如果是浏览器解析的http://ip:port/
    • 链接跳转
    • 重定向,将地址交给浏览器解析
    • location.href
  • 如果是服务器解析的http://ip:port/工程路径
    • <url-pattern>/servlet1</url-pattern>
    • servletContext.getRealPath(“/”);
    • 转发request.getRequestDispatcher(“/”);

10.HttpServletResponse

响应信息

  • getOutputStream()字节流,用于下载
  • getWriter()字符流,回传字符串

注意:两个流只能用一个

resp.setContentType("text/html; charset=UTF-8");
//设置响应头类型一定要在获取流之前
PrintWriter writer = resp.getWriter();
writer.println("欢迎"+username);

11.重定向

  • 两次请求
  • 可以访问工程外数据
  • 浏览器解析地址

在这里插入图片描述

resp.sendRedirect("http://localhost:8080");

12.监听器

监听器就是实时监视一些事物状态的程序,我们称为监听器。

ServletContextListener

public class ServletContextListenerImpl implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("工程启动............");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("工程结束.............");
    }
}

配置监听器web.xml

   <!--配置监听器-->
    <listener>
        <listener-class>com.xiyan.listener.ServletContextListenerImpl</listener-class>
    </listener>

2.cookie

服务器通知客户端保存数据

  • cookie保存在客户端里

在这里插入图片描述

1.cookie创建

//创建cookie
Cookie cookie = new Cookie("username",username);
resp.addCookie(cookie);

2.cookie查找

//cookie查找
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    if("username".equals(cookie.getName())){
        System.out.println("cookievalue:"+cookie.getValue());
    }
}

3.cookie修改

cookie.setValue("newValue");
// 调用response.addCookie()通知客户端保存修改
resp.addCookie(cookie);

4.cookie生命周期控制

setMaxAge()

  • 正数,表示在指定的秒数后过期

  • 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)

  • 零,表示马上删除Cookie

cookie.setMaxAge(60 * 60); // 设置Cookie 一小时之后被删除。无效
resp.addCookie(cookie);

3.session

session是客户端和服务器之间的会话,存储在服务器

1.session的存取

2.session的生命周期

session超时:客户端两次请求最大间隔时长

设置所有session超时时长,默认是30min

<session-config>
    <session-timeout>20</session-timeout>
</session-config>
//设置超时时长
setMaxInactiveInterval(int interval);
//让当前session超时
invalidate();

3.session技术内幕

session底层其实是基于cookie实现的
在这里插入图片描述

4.Filter过滤器

对请求和响应进行过滤

  • 登陆过滤器
  • 编码过滤器

过滤器

1.过滤器使用

web.xml

<!--配置过滤器-->
<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.xiyan.filter.LoginFilter</filter-class>

</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>
</filter-mapping>

LoginFilter.java

public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpSession session = request.getSession();
        String username= (String) session.getAttribute("username");
        String password = (String)session.getAttribute("password");
        //如果没有登陆则跳转
        if("admin".equals(username)&&"123456".equals(password)){
            System.out.println("没有登陆");
            servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
        }else{
            filterChain.doFilter(servletRequest,servletResponse);
        }



    }
}

2.Filter的生命周期

  1. 构造方法

  2. init初始化方法

前两步在web工程启动时执行

  1. doFilter()方法
  2. destroy销毁

停止工程时候会执行

3.过滤器链

在这里插入图片描述

4.filter的路径匹配

  • 精准匹配
  • 目录匹配
  • 后缀名匹配
<url-pattern>/target.jsp</url-pattern>
<!--目录-->
<url-pattern>/admin/*</url-pattern>
<url-pattern>*.html</url-pattern>

filter只关心请求地址是否匹配不关心请求资源是否存在

5.JSON和AJAX

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。用于前后端数据交互。

var obj={
    "username":"xiyan",
    "password":"123456",
    "age":17
}

josn本身是个对象

常用方法

JSON.stringify();//将json对象转换成json字符串
var jsonObjString = JSON.stringify(obj);
JSON.parse();//将json字符串转换成json对象

通过jackson可以实现javabean和json互转

AJAX是是指一种创建交互式网页应用的网页开发技术。

  • 异步刷新
  • 地址栏不会变化
  • AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

1.原生AJAX

步骤:

  1. 创建XMLHttpRequest对象,即创建一个异步调用对象.

  2. 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.

  3. 设置响应HTTP请求状态变化的函数.

  4. 发送HTTP请求.

  5. 获取异步调用返回的数据.

  6. 使用JavaScript和DOM实现局部刷新.

1.创建对象
var xmlHttpRequest;  //定义一个变量,用于存放XMLHttpRequest对象
createXMLHttpRequst();   //调用创建对象的方法
//创建XMLHttpRequest对象的方法 
function createXMLHttpRequest(){                                                 
    if(window.ActiveXObject) {//判断是否是IE浏览器
        xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");//创建IE的XMLHttpRequest对象
    }else if(window.XMLHttpRequest){//判断是否是Netscape等其他支持XMLHttpRequest组件的浏览器
        xmlHttpRequest = new XMLHttpRequest();//创建其他浏览器上的XMLHttpRequest对象
    }
}
2.创建http请求
XMLHttpRequest.open(method,URL,flag,name,password);
  • method:该参数用于指定HTTP的请求方法,一共有get、post、head、put、delete五种方法,常用的方法为get和post。
  • URL:该参数用于指定HTTP请求的URL地址,可以是绝对URL,也可以是相对URL。
  • flag:该参数为可选,参数值为布尔型。该参数用于指定是否使用异步方式。true表示异步、false表示同步,默认为true。
  • name:该参数为可选参数,用于输入用户名。如果服务器需要验证,则必须使用该参数。
  • password:该参数为可选,用于输入密码。若服务器需要验证,则必须使用该参数。
3.设置响应HTTP请求状态变化的函数
  1. 未初始化状态。在创建完XMLHttpRequest对象时,该对象处于未初始化状态,此时XMLHttpRequest对象的readyState属性值为0。
  2. 初始化状态。在创建完XMLHttpRequest对象后使用open()方法创建了HTTP请求时,该对象处于初始化状态。此时XMLHttpRequest对象的readyState属性值为1。
  3. 发送数据状态。在初始化XMLHttpRequest对象后,使用send()方法发送数据时,该对象处于发送数据状态,此时XMLHttpRequest对象的readyState属性值为2。
  4. 接收数据状态。Web服务器接收完数据并进行处理完毕之后,向客户端传送返回的结果。此时,XMLHttpRequest对象处于接收数据状态,XMLHttpRequest对象的readyState属性值为3。
  5. 完成状态。XMLHttpRequest对象接收数据完毕后,进入完成状态,此时XMLHttpRequest对象的readyState属性值为4。此时接收完毕后的数据存入在客户端计算机的内存中,可以使用responseText属性或responseXml属性来获取数据。
//设置当XMLHttpRequest对象状态改变时调用的函数
xmlHttpRequest.onreadystatechange = function (){
    //判断XMLHttpRequest对象的readyState属性值是否为4,如果为4表示异步调用完成
    if(xmlHttpRequest.readyState == 4) {
        //设置获取数据的语句
    }
}
4.获取数据并刷新
 if(xmlHttpRequst.status == 200) {
    document.write(xmlHttpRequest.responseText);//将返回结果以字符串形式输出
    //document.write(xmlHttpRequest.responseXML);//或者将返回结果以XML形式输出
 }
5.发送请求
   // 3、调用send 方法发送请求
    xmlhttprequest.send();
总体流程
function ajaxRequest() {
    // 1、我们首先要创建XMLHttpRequest
    var xmlhttprequest = new XMLHttpRequest();
    // 2、调用open 方法设置请求参数
    //XMLHttpRequest.open(method,URL,flag,name,password);
    xmlhttprequest.open("GET","http://localhost:8080/16_json_ajax_i18n/ajaxServlet?action=javaScriptAjax",true)
    // 4、在send 方法前绑定onreadystatechange 事件,处理请求完成后的操作。
    xmlhttprequest.onreadystatechange = function(){
        if (xmlhttprequest.readyState == 4 && xmlhttprequest.status == 200) {
            var jsonObj = JSON.parse(xmlhttprequest.responseText);
            // 把响应的数据显示在页面上
            document.getElementById("div01").innerHTML = "编号:" + jsonObj.id + " , 姓名:" +
                jsonObj.name;
        }
    }
    // 3、调用send 方法发送请求
    xmlhttprequest.send();
}

2.Jquery

  • url 表示请求的地址

  • type 表示请求的类型GET 或POST 请求

  • data 表示发送给服务器的数据

  • 格式有两种:
    一:name=value&name=value
    二:{key:value}

  • success 请求成功,响应的回调函数

  • dataType 响应的数据类型
    常用的数据类型有:
    text 表示纯文本
    xml 表示xml 数据
    json 表示json 对象

$("#ajaxBtn").click(function(){
    $.ajax({
        url:"http://localhost:8080/16_json_ajax_i18n/ajaxServlet",
        // data:"action=jQueryAjax",
        data:{action:"jQueryAjax"},
        type:"GET",
        success:function (data) {
            // alert("服务器返回的数据是:" + data);
            // var jsonObj = JSON.parse(data);
            $("#msg").html("编号:" + data.id + " , 姓名:" + data.name);
        },
        dataType : "json"
    });
});
$("#getBtn").click(function () {
    $.get("http://localhost:8080/16_json_ajax_i18n/ajaxServlet", "action=jQueryGet", function (data) {
        $("#msg").html(" get 编号:" + data.id + " , 姓名:" + data.name);
    }, "json");
});
// ajax--post 请求
$("#postBtn").click(function () {
    $.post("http://localhost:8080/16_json_ajax_i18n/ajaxServlet", "action=jQueryPost", function (data) {
        $("#msg").html(" post 编号:" + data.id + " , 姓名:" + data.name);
    }, "json");
});
$("#getJSONBtn").click(function () {
    $.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet", "action=jQueryGetJSON", function (data) {
        $("#msg").html(" getJSON 编号:" + data.id + " , 姓名:" + data.name);
    });
});

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值