Java Web知识点总结

Servlet

Servlet 是运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。

servlet的实质就是java代码,通过java的API动态的向客户端输出内容,以后写的程序就不在是在本地执行了,而是编译成字节码,放到服务器上来去执行。

ServletContext

1、请求(通过request获取请求行, 请求头,请求体):

获取请求头、获取请求行:略
获取请求体:

1.获取一个值:
req.getParameter("名称")
在这里插入图片描述
2.获取多个值
req.getParameterValues("名称"),返回的是一个数组
在这里插入图片描述
2、响应(通过response设置响应行,响应头 ,响应体):
设置响应头、设置响应行:略
设置响应体:
通过write方法来写,response.getwrite().wirte(“要写的内容”)
在这里插入图片描述
重定向与请求转发

重定向:
浏览器找servlet1,通过设置响应,告诉浏览器, 再让浏览器发送请求到servlet2。整个过程会发两次请求并且地址栏会发生变化
response.sendRedirect("url");

转发:
请求转发只需要发送一次直接,找servlet1,在servlet1当中直接转发给servlet2,不要再告诉浏览器。整个过程只发送一次请求并且地址栏不会发生变化
request.getRequestDispatcher("url").forward(request,response);

JSP

定义:
JSP全名为Java Server Pages,中文名叫java服务器页面,它是在传统的网页HTML文件中插入Java程序段和JSP标记,本质是一个简化的Servlet设计。

作用:
直接使用Html文件是没有办法输出Java当中的信息,使用servlet来去输出一个网页非常的麻烦,于是就出现了jsp,又能写html,又能写Java代码

工作原理:
jsp本质就是一个servlet,jsp在第一次被访问时会被Web容器翻译成servlet,整个过程如下:index.jsp -> index_jsp.java -> index_jsp.class

EL

EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。

作用:
EL最主要的作用是获得四大域中的数据:EL从四个域中获得某个值${key}

四大域

pageContext:当前jsp有效
request域:一次servlet请求有效
session域:一次会话有效
servletContext:整个web应用均有效

JSTL

定义:
JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能,jstl出现的目的同el一样也是要代替jsp页面中的脚本代码

用法:
先引入标签库:<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

if标签:
<c:if test="${1==1 }">
满足条件时,中间的内容才会显示出来
</c:if>
在这里插入图片描述
for标签:

普通循环:
在这里插入图片描述
增强循环:
在这里插入图片描述

Cookie & Session

比如一个用户未登录,但是想往购物车里面加东西,此时我们该怎么存储他购买的商品呢?
使用数据库?不行,因为用户还没有登陆
使用request域?不行,因为request域只限于一次请求有效,如果用户还要再买另一个东西,那么他去请求另外的东西时,之前使用request存储的商品就失效了
使用servlet域?不行,如果此时又有一个用户要买东西,那么之前用户买的东西还存留在servlet域中,导致付款的时候多加了好多商品的价格
正解是我们应该使用会话技术

会话:
用户开一个浏览器,点击多个超链接,访问服务器多个web资源然后关闭浏览器,整个过程称之为一个会话。

作用:
保持各个客户端自己的数据,每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据

Cookie
为每个浏览器开辟缓存空间,里面存储信息

服务器怎样把Cookie写 给客户端:
1、创建Cookie:
Cookie cookie = new Cookie(String cookieName,String cookieValue);
2、向客户端发送cookie:
response.addCookie(cookie名称)

服务器如何获取客户端携带的cookie:
通过Request对象的getCookies()方法

Session

工作原理:
一个浏览器访问时,服务端会开辟出针对该浏览器的空间存储其数据,并且创建的存储空间有一个编号我们称为SessionID,第一次访问时, 会把对应的sessionID以Cookie的形式写给浏览器,下次再访问时, 会携带sessionID,找到当初创建的那个存储空间,在对应的存储空间当中取出数据

学习如何获取Session对象:
HttpSession session = request.getSession();

学习怎么样向session当中存取数据:(Session对象也是一个域对象)
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);

MVC三层架构案例

一、登录功能:

1、建表:

2、domain层:

package com.zhaochen.domain;

public class Admin {
    private Integer id;
    private String name;
    private String pwd;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

3、web层:AdminServlet

package com.zhaochen.controller;

import com.zhaochen.domain.Admin;
import com.zhaochen.service.AdminService;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class AdminServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收用户名和密码
        String name = req.getParameter("username");
        String pwd = req.getParameter("password");
        //调用登录业务层
        AdminService adminService = new AdminService();
        try {
            Admin admin = adminService.login(name, pwd);
            //把用户信息保存在session中
            HttpSession session = req.getSession();
            session.setAttribute("admin",admin);
            //跳转到后台的首页
            // (如果采用重定向,会让浏览器跳转到指定位置,地址栏会发生变化)
            //(如果采用转发,则在服务器内部完成,地址栏不会发生改变)
            resp.sendRedirect(req.getContextPath()+"admin/admin_index.jsp");

            System.out.println("登陆成功");
        } catch (Exception e) {
            if (e.getMessage().equals("用户名或者密码错误")){
                //真的是输入错误,则跳转回登录页,回显错误信息
                req.setAttribute("err",e.getMessage());
                //转发
                req.getRequestDispatcher("admin/admin_login.jsp").forward(req,resp);

            }
            System.out.println("登陆失败");
            e.printStackTrace();
        }

    }
}

4、service层:AdminService

package com.zhaochen.service;

import com.zhaochen.dao.AdminDao;
import com.zhaochen.domain.Admin;

public class AdminService {
    public Admin login(String name,String pwd){
        //调用dao层到数据库中查询
        AdminDao adminDao = new AdminDao();
        Admin admin = adminDao.checkAdmin(name, pwd);
        if(admin != null){
            return admin;
        }else{
            throw new RuntimeException("用户名或者密码错误");
        }
    }


}

5、Dao层:AdminDao

package com.zhaochen.dao;

import com.zhaochen.domain.Admin;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.SQLException;

public class AdminDao {

    public Admin checkAdmin(String name,String pwd) throws SQLException {

        //到数据库中查询
        //1.连接
        QueryRunner qr = new QueryRunner(JdbcUtil.getDataSource());
        //2.查询
        String sql = "select * from admin where username = ? and password = ?";
        //3.执行查询
        Admin admin = null;
        admin = qr.query(sql,new BeanHandler<Admin>(Admin.class),name,pwd);
        //返回查询结果
        return admin;

    }


}

二、商品的添加、删除、修改、查询功能:

Servlet层:
1.GoodsListServlet(查询所有)

package com.zhaochen.controller;

import com.zhaochen.domain.Goods;
import com.zhaochen.service.GoodsService;
import org.springframework.stereotype.Controller;

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.sql.SQLException;
import java.util.List;

@WebServlet("/GoodsListServlet")
public class GoodsListServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //调用服务层
        GoodsService goodsService = new GoodsService();
        try {
            List<Goods> allGoods = goodsService.getAllGoods();
            //把数据写入到request域中
            req.setAttribute("allGoods",allGoods);
            //转发到jsp
            req.getRequestDispatcher("admin/main.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

2.添加商品:GoodsAddServlet

package com.zhaochen.controller;

import com.zhaochen.domain.Goods;
import org.springframework.beans.BeanUtils;

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.Map;
@WebServlet("/GoodsAddServlet")
public class GoodsAddServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        //获取所有参数
        Map<String,String[]> parameterMap = req.getParameterMap();
        //把参数封装成对象
        Goods goods = new Goods();

    }
}

3.删除商品:GoodsDelServlet

package com.zhaochen.controller;

import com.zhaochen.service.GoodsService;

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.sql.SQLException;

@WebServlet("/GoodsDelServlet")
public class GoodsDelServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("GoodsDelServlet");
        //接收id
        String id = req.getParameter("id");
        //调用服务层让其删除
        GoodsService goodsService = new GoodsService();
        try {
            goodsService.deleteGoods(id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //转发到商品列表
        req.getRequestDispatcher("/GoodsListServlet").forward(req,resp);
    }
}

Service层:
GoodsService

package com.zhaochen.service;

import com.zhaochen.dao.GoodsDao;
import com.zhaochen.domain.Goods;

import java.sql.SQLException;
import java.util.List;

public class GoodsService {
    GoodsDao goodsDao = new GoodsDao();
    //查询所有商品
    public List<Goods> getAllGoods() throws SQLException {
        //从数据库中取数据

        List<Goods> allGoods = goodsDao.getAllGoods();
        return  allGoods;


    }
    //删除商品
    public void deleteGoods(String id) throws SQLException {

        goodsDao.deleteGoods(Integer.parseInt(id));
    }
    //添加商品
    public void addGoods(Goods goods) throws SQLException {
        goodsDao.addGoods(goods);
    }
    //修改商品
    public void updateGoods(Goods goods) throws SQLException {
        goodsDao.updateGoods(goods);
    }
}


Dao层:
GoodsDao

package com.zhaochen.dao;

import com.zhaochen.domain.Goods;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import javax.management.Query;
import java.sql.SQLException;
import java.util.List;

public class GoodsDao {
    private QueryRunner qr = new QueryRunner(JdbcUtil.getDataSource());

    //从数据库中查询所有商品
    public List<Goods> getAllGoods() throws SQLException {
        //查询操作
        String sql = "select * from goods";
        //执行sql
        List<Goods> allGoods = null;
        allGoods = qr.query(sql,new BeanListHandler<Goods>(Goods.class));
        return allGoods;
    }
    //添加商品
    public void addGoods(Goods goods) throws SQLException {
        String sql = "insert into goods(name,price,image) values(?,?,?) ";
        qr.update(sql,goods.getName(),goods.getPrice(),goods.getImage());
    }
    //删除商品
    public void deleteGoods(Integer id) throws SQLException {
        String sql = "delete from goods where id = ? ";
        qr.update(sql,id);

    }
    //更新商品
    public void updateGoods(Goods goods) throws SQLException {
        String sql = "update goods set name = ?,price = ?,image = ? where id = ? ";
        qr.update(sql,goods.getName(),goods.getPrice(),goods.getImage(),goods.getId());


    }
}

domain:
Goods

package com.zhaochen.domain;

import java.io.Serializable;

public class Goods implements Serializable {
    private Integer id;
    private String name;
    private Double price;
    private String image;

    @Override
    public String toString() {
        return "Goods{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", image='" + image + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值