JavaWeb笔记,黑马课程,期末速成复习

##JavaWeb笔记
###一 response和request
request 可以实现请求转发,具体过程如下

请求转发的语句是

request.getRequestDispatcher("路径").forward(request,response);
请求转发是指在对一个资源执行了一些操作之后转到另一个类去执行另外的操作
请求转发虽然转到了另外一个类,但是实际上他的url还是初始的那个类的url,url并不会发生变化
request.setAttribute("","")

类似于key,value的形式,是在类与类跳转的时候传递值的,类似于map
在第二个类中通过

request.getAttribute("key")

可以得到一个返回值类型为object

请求转发的特点:
  1. 浏览器地址栏路径不发生变化

  2. 只能转发到当前服务器的内部资源

  3. 一次请求,可以在转发的资源间使用request共享数据


**response可以实现重定向 **

大概意思就是浏览器向服务器请求完成,但是这个服务器无法完成,然后返回一个状态码302,并且设置一个响应头,格式为reponse.setHeader(“Location”,“路径”)。返回给浏览器之后浏览器去找这个能完成他要求的服务器。

也有一种简化的方式去设置重定向,格式为

response.sendRedirect("路径");

重定向的特点:
  1. 浏览器地址栏路径发生变化
  2. 可以重定向到任意位置的资源(服务器内部和外部均可)
  3. 两次请求,不能在多个资源使用request共享数据
  • response设置数据格式和字符集解决响应到浏览器里的中文乱码问题:
    response.setContentType("text/html;charset=utf-8");

二 登陆注册页面的实现总结

登录

  1. 首先在项目中导入黑马给的html和css文件
  2. 创建db1数据库,创建tb-user表,创建User实体类
  3. 导入myBatis坐标,Mysql驱动坐标
  4. 创建mybatis-config.xml核心配置文件,UserMapper.xml映射文件,UserMapper接口
  5. 在核心配置文件中设置数据库的链接环境,如果是配置文件开发还要设置sql映射文件或者包扫描
  6. 在UserMapper接口中编写方法,如果是注解方式开发,就用不同的注解完成sql语句,如果是配置文件开发,写好函数后,在UserMapper.xml中设置sql语句,注意名称空间和sql语句。最后在核心配置文件之中设置sql文件映射。

注册

  1. 用户填写用户名,密码,点击注册按钮提交数据到registerServlet
  2. 在registerServlet中用mybatis保存数据
  3. 保存之前需要判断用户名是否存在,如果存在就不能添加,根据用户名查询数据库
  4. 首先在usermapper接口中用注解开发的方式添加方法,一个是通过用户名查询,一个是添加。
  5. 如果通过用户名查询出来的结果为空,则可以进行添加操作
  6. 按照登录servlet编写注册,因为对数据库进行了变动所以在执行完方法之后需要对事务提交。
  7. sqlsession.commit();

对sqlSessionFactory代码的优化

每次用mybatis都得复制三行代码,直接创建一个工具类。

三 jsp

注意事项:

  1. 如果sout无法再控制台输出,将jdk换为1.8版本即可。
  2. jsp实质上就是一个servlet
  3. jsp = HTML + Java ,用于简化开发

jsp脚本分类:

  1. <%…%>: 内容会直接放到_jspService() 方法之中
  2. <%=…%>: 内容会放到out.println()中,作为out.println()的参数
  3. <%!..%>: 内容会放到_jspService()方法之外,被类直接包含

EL表达式:

  • 表达式语言,用于简化JSP页面的Java代码
  • 主要功能:获取数据
  • 语法 : ${key} : 获取域中存储的key的数据

四大域对象:

  • page:当前页面有效
  • request:当前请求有效
  • session: 当前会话有效
  • application:当前应用有效

JSTL标签

JSP标准标签库,使用标签取代JSP页面上的Java代码

  1. 导入坐标

    jstl
    jstl
    1.2


    taglibs
    request
    1.0.1
  2. 在JSP页面上引入JSTL标签库
    <%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
  3. 使用

JSTL要和EL表达式一起使用,在Servlet中向域中传递参数后,使用请求转发转发到jsp页面,代码如下:

//2.存储到request域中
request.setAttribute("brands",brands);
request.setAttribute("status",1);
//3.转发到el-demo.jsp
request.getRequestDispatcher("/jstl-if.jsp").forward(request,response);
//request.getRequestDispatcher("/el-demo.jsp").forward(request,response);

然后在jsp中使用JSTL来进行if判断,代码如下:


    启用


    禁用

:相当于for循环

items:被遍历的容器

var:遍历产生的临时变量


    
        ${brand.id}
         ${brand.brandName}
        ${brand.companyName} 
         ${brand.ordered}
         ${brand.description}
         ${brand.status}
        修改 删除
    

MVC模式和三层架构

MVC是一种分层开发的模式,其中:

  • M : Model,业务模型,处理业务(JavaBean)
  • V : View,视图,界面展示(JSP)
  • C : Controller,控制器,处理请求,调用模型和视图(Servlet)

三层架构

表现层:接受请求,封装数据,调用业务逻辑层,响应数据(Controller)

业务逻辑层:对业务逻辑进行封装,组合数据访问层中基本功能,形成复杂的业务逻辑功能(service)

数据访问层:对数据库的CRUD基本操作(dao)

查询所有时有的数据不显示的解决办法

原因是由于实体的属性名称和数据库的字段名称不一致,在对应的mapper.xml映射文件中添加映射,然后在方法的注解下多加一行注解即可。代码如下:

<resultMap id="brandResultMap" type='brand'>
    <result column="brand_name" property="brandName">result>
	<result column="company_name" property="companyName">result>	
resultMap>
@ResultMap("brandResultMap")

给button绑定单击事件JavaScript



四 会话

会话:用户打开浏览器,访问web服务器的资源,会话建立,知道有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应

会话跟踪: 一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话中的多次请求间共享数据

实现方式:

  1. 客户端:cookie
  2. 服务端:session

Cookie基本使用

发送cookie:

  1. 创建Cookie对象,设置数据

    Cookie cookie = new Cookie("key","value");

  2. 发送Cookie到客户端:使用response对象

    response.addCookie(cookie);

获取Cookie:

  1. 获取客户端携带的所有Cookie,使用request对象

    Cookie[] cookies = request.getCookies();

  2. 遍历数组,获取每一个Cookie对象:for

  3. 使用Cookie对象方法获取数据

    cookie.getName();

    cookie.getvalue();

Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
    String name = cookie.getName();
    if("username".equals(name)){
    String value = cookie.getValue();
        System.out.println(value);
        break;
    }
} 	

Cookie存活时间

默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁

setMaxAge(int seconds) : 设置Cookie存活时间

  1. 正数: 将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除。
  2. 负数: 默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁。
  3. 零: 删除对应Cookie

Cookie 存储中文

Cookie不能直接存储中文

如需要存储,则需要进行转码,URL编码

 	    String value = "张三";
        String value1 = URLEncoder.encode(value,"UTF-8");
        Cookie cookie = new Cookie("username",value1);

        //设置Cookie存活时间
        cookie.setMaxAge(60*60*24*7);

        //2.发送cookie
        response.addCookie(cookie);

        //1.获取Cookie数组
        Cookie[] cookies = request.getCookies();
        for(Cookie cookie:cookies){
            String name = cookie.getName();
            if("username".equals(name)){
            String value = cookie.getValue();
            //url 解码
              String value1 = URLDecoder.decode(value, "UTF-8");
                System.out.println(value1);
                break;
            }
        }

Session基本使用

  • 服务端会话跟踪技术 :将数据保存到服务端

  • JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能

  • 使用:

    • 获取session对象

      HttpSession session = request.getSession();

    • session对象功能

      void setAttribute(String name,Object o): 存储数据到Session域中

      Object getAttribute(String name): 根据key,获取值

      void removeAttribute(String name): 根据key,删除该键值对

Cookie和Session的区别

  • Cookie和Session都是来完成一次会话内多次请求间数据共享的
  • 区别:
    • 存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端

    • 安全性:Cookie不安全,Session安全

    • 数据大小:Cookie最大3KB,Session大小无限制

    • 存储时间:Cookie可以长期存储,Session默认30分钟

      Object getAttribute(String name): 根据key,获取值

      void removeAttribute(String name): 根据key,删除该键值对

Cookie和Session的区别

  • Cookie和Session都是来完成一次会话内多次请求间数据共享的
  • 区别:
    • 存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
    • 安全性:Cookie不安全,Session安全
    • 数据大小:Cookie最大3KB,Session大小无限制
    • 存储时间:Cookie可以长期存储,Session默认30分钟
    • 服务器性能:Cookie不占用服务器资源,Session占用服务器资源

你可能感兴趣的:(javaweb,黑马,笔记,java,mybatis)