Lombok使用及JavaWeb知识点小结

一、JavaWeb

1、什么是Javaweb

就是使用 java语言写Web网站

静态网站和动态网站的区别

  • 静态网站:HTML、CSS、JS
  • 动态网站:Servlet/JSP,等和数据库连接

项目中导入依赖的方式

  • 手动导入需要的jar包,然后将jar包添加到项目的依赖中
  • 使用Maven,在https://mvnrepository.com/ 上查找相关的依赖,然后配置到在pom.xml中,项目会自动导入所需要的jar包

HTTP:请求和响应

  • 请求

    客户端通过请求获得服务器上的一定资源

    任何一个请求都会在服务器上找到对应的资源

  • 响应

    服务器针对客户端的请求,给客户端返回一定的资源

    常见响应状态码

    200:正常响应

    404:没有找到资源,资源路径报错

    500:后台代码有问题

    3XX:转发或者重定向

    502:网关问题

Web项目的结构

- WEB-INF
	- web.xml
	- lib依赖
	- class,Java编译过后的class文件
- index.jsp
- ...

2、如何创建一个Web项目

1、创建一个Maven项目

定位一个Maven项目的三要素:GAV(分组、项目名、版本)

Maven项目中的文件夹含义:

  1. pom.xml:依赖管理
  2. java:写Java代码的
  3. resource:存放资源的
  4. test:测试

如何将普通的Maven项目变成Web项目

在项目名称上右键,选择Add Framework Support,然后选择web框架,然后项目中会多一个Web目录,这样子项目就成了Web项目

在开始页面使用Maven模板创建的项目和创建Maven项目再导入Web支持的项目的区别

  1. 使用Maven模板创建的项目默认导入junit包
  2. 使用Maven模板创建的不是标准的Maven项目,没有Java包、resource包,需要手动去导入
  3. 使用Maven模板创建的项目的项目wed.xml版本太旧了,需要将版本换成新的

3、Servlet

1、导入依赖的方式

  1. 将lib包导入,然后手动导入

  2. 使用Maven仓库,在pom.xml中导入依赖。scope是依赖的使用范围

2、IDEA中创建Servlet的方式

  1. 创建Java类,继承HttpServlet类

  2. 右键选择直接创建Servlet

    两种方法都间接的实现了Servlet接口,本质上是一样的

3、运行Servlet

在web.xml配置文档中注册Servlet标签和Servlet-mapping标签,Tomcat服务器会根据配置的路径找到对应的Servlet来处理请求

4、使用Servlet在浏览器输出HTML网页

package org.westos.servlet;

import javax.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;


public class HelloServlet extends HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.print("<html>");
        out.print("  <head>");
        out.print("     <title>HelloServlet</title>");
        out.print("  </head>");
        out.print("<body>");
        out.print(" <h1>Hello,Servlet</h1>");
        out.print("</body>");
        out.print("</html>");
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doPost(request, response);
    }
}

4、request和response对象

request:通过请求对象request,可以获得请求的一些信息

response:通过响应对象response,可以给前端响应一些信息

Servlet中的信息的传递都是使用流来实现的,流使用完毕以后要关闭资源

5、cookie和session(含例题)

从请求中获得cookie和session对象

cookie:客户端拿着

session:服务器拿着,服务器资源比较宝贵

1、获得session和cookie

package org.westos.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;


public class HelloServlet2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //得到session
        HttpSession session = request.getSession();
        //查看sessionId
        System.out.println(session.getId());
        //获得请求中的所有的cookie
        Cookie[] cookies = request.getCookies();
        //遍历打印
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName() + ":" +
                    cookie.getValue());
        }

        //给客户端响应一个cookie
        Cookie cookie = new Cookie("key1", "value1");
        response.addCookie(cookie);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

2、使用cookie判断用户第几次来

package org.westos.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;


@WebServlet(name = "CookieDemo")
public class CookieDemo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //乱码解决
        response.setContentType("text/html;charset=utf-8");
        //获得响应流
        PrintWriter out = response.getWriter();
        //获得cookies
        Cookie[] cookies = request.getCookies();
        //判断
        if (cookies != null) {
            out.write("上次访问的时间");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals("lastTime")) {
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    out.write(date.toLocaleString());
                }
            }
        } else {
            out.write("first coming");
        }

        //设置cookie
        Cookie lastTime = new Cookie("lastTime", System.currentTimeMillis() + "");
        //设置Cookie的过期时间
        lastTime.setMaxAge(24 * 60 * 60);
        //添加Cookie
        response.addCookie(lastTime);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

6、JSP

JSP:Java Servlet Page

  1. Servlet本质

    本质上其实就是一个Java类,间接实现了Servlet接口。其实就是Servlet,只是在Servlet中一些代码我们要自己写,而在JSP中已经封装好了,比较方便。

    在电脑C盘用户目录下,有一个IntelliJIdea2018.2\system\tomcat目录,点开目录下的项目,便可以看到IDEA里面的***.jsp文件都变成了***_jsp.java文件,使用记事本打开看到里面的源码就是Java类

    JSP中默认调用了_jspService()方法,jsp文件中的代码会被转换为out.write("");代码进行执行

  2. jsp为什么过时

    jsp是视图层的,视图层用来控制视图、编写页面,进行HTML/CSS/取值之类的操作,但是JSP本是又是Servlet,能够进行控制层的操作,在JSP中使用Servlet的操作不利于网页结构的分层,会增加程序的耦合度,不利于解耦

    所有的业务逻辑都应该使用Servlet进行编写,所以JSP很少使用了,为了程序的解耦,MVC分层思想

7、JSP九大内置对象

是jsp内部写好的,可以直接拿来使用

  1. pageContext

    页面上下文,只是页面的范围。可以从中获取session信息,输出对象out,application等

    pageContext.forward()

    pageContext.getRequest()

    pageContext.getResponse()

  2. session

    一次会话

  3. application

    整个Web应用中

  4. config

    配置

  5. out

    写出内容

  6. page

    当前页面

  7. Exception

    异常

  8. request(继承自HttpServlet)

  9. response(继承自HttpServlet)

8、JSP语法

  1. 注释

    jsp注释

    JSP注释在加载为类的时候不会被加载进去,所以不会在前端网页看到,只会给后台程序员看到
    <%--jsp注释--%>
    

    HTML注释

    前端页面可以看到
    <-- 注释 -->
    
  2. JSP脚本表达式

    会直接在网页上显示表达式或变量的值

    会直接在页面上输出脚本或表达式的值
    <%= 
        表达式或值
        %>
    
  3. EL表达式

    和JSP脚本表达式的作用一样,不过一般使用EL表达式,更简单

    ${变量或表达式}

  4. jsp脚本片段

    在里面写Java代码,定义的变量是局部变量

    <%
    	//任意Java代码,定义的变量是局部变量,在_jspService()方法中
    	int a = 0;
    %>
    
  5. JSP代码拼接

    可以循环显示HTML代码等

    <%
    for(int j=0;j<10.j++){	
    %>
    
    要执行的html代码等
    
    <%
    	}
    %>
    
  6. JSP脚本片段

    在里面写Java代码,定义的变量是全局变量

    <%!
        //任意Java代码,定义的变量是全局变量,在类中
        int a = 0;
    %>
    

9、EL表达式

  1. 格式

    ${表达式或变量}

    将变量或表达式的值直接显示在网页上,可以取出后台的值

    EL表达式的取值是有范围的

  2. EL表达式的范围

    pageContext:在当前页面中,出了页面就不能用了

    request(常用):一次请求中的

    session(常用):一次会话中的,一般放用户信息

    application:在整个Web服务器中

    作用域:就近原则,假设有多个变量在不同的作用域中重复,采用就近原则

10、Lombok配置及使用

  1. 在IDEA中安装Lombok插件

    在setting中的plugins中搜索Lombok,安装后重启IDEA

  2. 配置Lombok依赖

    <!-- lombok依赖 -->
        <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <version>1.18.12</version>
        </dependency>
    
  3. 在实体类上加@Data注解

  4. 这样子就不用每次手动去重写类的get/set/toString/…等方法,会自动帮我们写上

  5. 测试

    package org.westos.pojo;
    
    import lombok.Data;
    
    //注解,加上后就不用重写那么多方法了
    @Data
    public class Users {
        private String name;
        private String password;
        private int age;
    
        //此处并没有加公开的get/set方法,但是仍然可以被使用
        public static void main(String[] args) {
            Users user = new Users();
            user.setPassword("123456");
            user.setName("张三");
            user.setAge(23);
            System.out.println(user);
        }
    }
    

11、模拟登录页面,EL表达式取值

  1. 模拟前端页面传来的参数

    http://localhost:8080/javaweb/login?username=admin&password=12345

  2. 编写Servlet

    package org.westos.servlet;
    
    import org.westos.pojo.Users;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    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 LoginServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            //完整的前端的请求URL
            //http://localhost:8080/javaweb/login?username=zhangsan&password=123456
            //1.先得到Session
            HttpSession session = request.getSession();
            //2.得到前端传递的参数
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            //3.业务代码,判断用户是否登录成功,这里将数据写死,没有使用数据库,真实场景应从数据库中查询
            if (username.equals("admin") && password.equals("123456")) {
                //创建初始化对象
                Users user = new Users();
                user.setName(username);
                user.setPassword(password);
                user.setAge(23);
                //登陆成功,将对象放在session中
                session.setAttribute("loginUser", user);
                //登陆成功就将错误信息移除
                session.removeAttribute("error");
            } else {
                //登陆失败
                //显示错误信息
                session.setAttribute("error","用户名或密码错误");
            }
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //调用doPost()方法
            doPost(request, response);
        }
    }
    
  3. 在web.xml文档中配置

        <servlet>
            <servlet-name>LoginServlet</servlet-name>
            <servlet-class>org.westos.servlet.LoginServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>LoginServlet</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>
    
  4. 创建前端jsp页面,显示登录信息

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>用户信息</title>
    </head>
    <body>
    
    <%--从session中得到用户的登录信息--%>
    用户名: ${loginUser.getName()}
    年龄:   ${loginUser.getAge()}
    
    <%--报错信息,如果登录成功,就会移除--%>
    ${error}
    
    </body>
    </html>
    
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值