Lombok使用及JavaWeb知识点小结
文章目录
- 一、JavaWeb
- 1、什么是Javaweb
- 2、如何创建一个Web项目
- 1、创建一个Maven项目
- 3、Servlet
- 4、request和response对象
- 5、cookie和session(含例题)
- 6、JSP
- 7、JSP九大内置对象
- 8、JSP语法
- 9、EL表达式
- 10、Lombok配置及使用
- 11、模拟登录页面,EL表达式取值
一、JavaWeb
1、什么是Javaweb
就是使用 java语言写Web网站
静态网站和动态网站的区别
- 静态网站:HTML、CSS、JS
- 动态网站:Servlet/JSP,等和数据库连接
项目中导入依赖的方式
- 手动导入需要的jar包,然后将jar包添加到项目的依赖中
- 使用Maven,在/ 上查找相关的依赖,然后配置到在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项目中的文件夹含义:
- pom.xml:依赖管理
- java:写Java代码的
- resource:存放资源的
- test:测试
如何将普通的Maven项目变成Web项目
在项目名称上右键,选择Add Framework Support,然后选择web框架,然后项目中会多一个Web目录,这样子项目就成了Web项目
在开始页面使用Maven模板创建的项目和创建Maven项目再导入Web支持的项目的区别
- 使用Maven模板创建的项目默认导入junit包
- 使用Maven模板创建的不是标准的Maven项目,没有Java包、resource包,需要手动去导入
- 使用Maven模板创建的项目的项目wed.xml版本太旧了,需要将版本换成新的
3、Servlet
1、导入依赖的方式
-
将lib包导入,然后手动导入
-
使用Maven仓库,在pom.xml中导入依赖。scope是依赖的使用范围
2、IDEA中创建Servlet的方式
-
创建Java类,继承HttpServlet类
-
右键选择直接创建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 {//得到sessionHttpSession session = request.getSession();//查看sessionIdSystem.out.println(session.getId());//获得请求中的所有的cookieCookie[] cookies = request.getCookies();//遍历打印for (Cookie cookie : cookies) {System.out.println(cookie.getName() + ":" +cookie.getValue());}//给客户端响应一个cookieCookie 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();//获得cookiesCookie[] 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");}//设置cookieCookie lastTime = new Cookie("lastTime", System.currentTimeMillis() + "");//设置Cookie的过期时间lastTime.setMaxAge(24 * 60 * 60);//添加Cookieresponse.addCookie(lastTime);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}
6、JSP
JSP:Java Servlet Page
-
Servlet本质
本质上其实就是一个Java类,间接实现了Servlet接口。其实就是Servlet,只是在Servlet中一些代码我们要自己写,而在JSP中已经封装好了,比较方便。
在电脑C盘用户目录下,有一个IntelliJIdea2018.2\system\tomcat目录,点开目录下的项目,便可以看到IDEA里面的***.jsp文件都变成了***_jsp.java文件,使用记事本打开看到里面的源码就是Java类
JSP中默认调用了_jspService()方法,jsp文件中的代码会被转换为out.write("");代码进行执行
-
jsp为什么过时
jsp是视图层的,视图层用来控制视图、编写页面,进行HTML/CSS/取值之类的操作,但是JSP本是又是Servlet,能够进行控制层的操作,在JSP中使用Servlet的操作不利于网页结构的分层,会增加程序的耦合度,不利于解耦
所有的业务逻辑都应该使用Servlet进行编写,所以JSP很少使用了,为了程序的解耦,MVC分层思想
7、JSP九大内置对象
是jsp内部写好的,可以直接拿来使用
-
pageContext
页面上下文,只是页面的范围。可以从中获取session信息,输出对象out,application等
pageContext.forward()
pageContext.getRequest()
pageContext.getResponse()
-
session
一次会话
-
application
整个Web应用中
-
config
配置
-
out
写出内容
-
page
当前页面
-
Exception
异常
-
request(继承自HttpServlet)
-
response(继承自HttpServlet)
8、JSP语法
-
注释
jsp注释
JSP注释在加载为类的时候不会被加载进去,所以不会在前端网页看到,只会给后台程序员看到 <%--jsp注释--%>
HTML注释
前端页面可以看到 <-- 注释 -->
-
JSP脚本表达式
会直接在网页上显示表达式或变量的值
会直接在页面上输出脚本或表达式的值 <%= 表达式或值%>
-
EL表达式
和JSP脚本表达式的作用一样,不过一般使用EL表达式,更简单
${变量或表达式}
-
jsp脚本片段
在里面写Java代码,定义的变量是局部变量
<%//任意Java代码,定义的变量是局部变量,在_jspService()方法中int a = 0; %>
-
JSP代码拼接
可以循环显示HTML代码等
<% for(int j=0;j<10.j++){ %>要执行的html代码等<%} %>
-
JSP脚本片段
在里面写Java代码,定义的变量是全局变量
<%!//任意Java代码,定义的变量是全局变量,在类中int a = 0; %>
9、EL表达式
-
格式
${表达式或变量}
将变量或表达式的值直接显示在网页上,可以取出后台的值
EL表达式的取值是有范围的
-
EL表达式的范围
pageContext:在当前页面中,出了页面就不能用了
request(常用):一次请求中的
session(常用):一次会话中的,一般放用户信息
application:在整个Web服务器中
作用域:就近原则,假设有多个变量在不同的作用域中重复,采用就近原则
10、Lombok配置及使用
-
在IDEA中安装Lombok插件
在setting中的plugins中搜索Lombok,安装后重启IDEA
-
配置Lombok依赖
<!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency>
-
在实体类上加
@Data
注解 -
这样子就不用每次手动去重写类的get/set/toString/…等方法,会自动帮我们写上
-
测试
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表达式取值
-
模拟前端页面传来的参数
http://localhost:8080/javaweb/login?username=admin&password=12345
-
编写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.先得到SessionHttpSession 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);} }
-
在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>
-
创建前端jsp页面,显示登录信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>用户信息</title> </head> <body><%--从session中得到用户的登录信息--%> 用户名: ${loginUser.getName()} 年龄: ${loginUser.getAge()}<%--报错信息,如果登录成功,就会移除--%> ${error}</body> </html>
Lombok使用及JavaWeb知识点小结
文章目录
- 一、JavaWeb
- 1、什么是Javaweb
- 2、如何创建一个Web项目
- 1、创建一个Maven项目
- 3、Servlet
- 4、request和response对象
- 5、cookie和session(含例题)
- 6、JSP
- 7、JSP九大内置对象
- 8、JSP语法
- 9、EL表达式
- 10、Lombok配置及使用
- 11、模拟登录页面,EL表达式取值
一、JavaWeb
1、什么是Javaweb
就是使用 java语言写Web网站
静态网站和动态网站的区别
- 静态网站:HTML、CSS、JS
- 动态网站:Servlet/JSP,等和数据库连接
项目中导入依赖的方式
- 手动导入需要的jar包,然后将jar包添加到项目的依赖中
- 使用Maven,在/ 上查找相关的依赖,然后配置到在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项目中的文件夹含义:
- pom.xml:依赖管理
- java:写Java代码的
- resource:存放资源的
- test:测试
如何将普通的Maven项目变成Web项目
在项目名称上右键,选择Add Framework Support,然后选择web框架,然后项目中会多一个Web目录,这样子项目就成了Web项目
在开始页面使用Maven模板创建的项目和创建Maven项目再导入Web支持的项目的区别
- 使用Maven模板创建的项目默认导入junit包
- 使用Maven模板创建的不是标准的Maven项目,没有Java包、resource包,需要手动去导入
- 使用Maven模板创建的项目的项目wed.xml版本太旧了,需要将版本换成新的
3、Servlet
1、导入依赖的方式
-
将lib包导入,然后手动导入
-
使用Maven仓库,在pom.xml中导入依赖。scope是依赖的使用范围
2、IDEA中创建Servlet的方式
-
创建Java类,继承HttpServlet类
-
右键选择直接创建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 {//得到sessionHttpSession session = request.getSession();//查看sessionIdSystem.out.println(session.getId());//获得请求中的所有的cookieCookie[] cookies = request.getCookies();//遍历打印for (Cookie cookie : cookies) {System.out.println(cookie.getName() + ":" +cookie.getValue());}//给客户端响应一个cookieCookie 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();//获得cookiesCookie[] 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");}//设置cookieCookie lastTime = new Cookie("lastTime", System.currentTimeMillis() + "");//设置Cookie的过期时间lastTime.setMaxAge(24 * 60 * 60);//添加Cookieresponse.addCookie(lastTime);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}
6、JSP
JSP:Java Servlet Page
-
Servlet本质
本质上其实就是一个Java类,间接实现了Servlet接口。其实就是Servlet,只是在Servlet中一些代码我们要自己写,而在JSP中已经封装好了,比较方便。
在电脑C盘用户目录下,有一个IntelliJIdea2018.2\system\tomcat目录,点开目录下的项目,便可以看到IDEA里面的***.jsp文件都变成了***_jsp.java文件,使用记事本打开看到里面的源码就是Java类
JSP中默认调用了_jspService()方法,jsp文件中的代码会被转换为out.write("");代码进行执行
-
jsp为什么过时
jsp是视图层的,视图层用来控制视图、编写页面,进行HTML/CSS/取值之类的操作,但是JSP本是又是Servlet,能够进行控制层的操作,在JSP中使用Servlet的操作不利于网页结构的分层,会增加程序的耦合度,不利于解耦
所有的业务逻辑都应该使用Servlet进行编写,所以JSP很少使用了,为了程序的解耦,MVC分层思想
7、JSP九大内置对象
是jsp内部写好的,可以直接拿来使用
-
pageContext
页面上下文,只是页面的范围。可以从中获取session信息,输出对象out,application等
pageContext.forward()
pageContext.getRequest()
pageContext.getResponse()
-
session
一次会话
-
application
整个Web应用中
-
config
配置
-
out
写出内容
-
page
当前页面
-
Exception
异常
-
request(继承自HttpServlet)
-
response(继承自HttpServlet)
8、JSP语法
-
注释
jsp注释
JSP注释在加载为类的时候不会被加载进去,所以不会在前端网页看到,只会给后台程序员看到 <%--jsp注释--%>
HTML注释
前端页面可以看到 <-- 注释 -->
-
JSP脚本表达式
会直接在网页上显示表达式或变量的值
会直接在页面上输出脚本或表达式的值 <%= 表达式或值%>
-
EL表达式
和JSP脚本表达式的作用一样,不过一般使用EL表达式,更简单
${变量或表达式}
-
jsp脚本片段
在里面写Java代码,定义的变量是局部变量
<%//任意Java代码,定义的变量是局部变量,在_jspService()方法中int a = 0; %>
-
JSP代码拼接
可以循环显示HTML代码等
<% for(int j=0;j<10.j++){ %>要执行的html代码等<%} %>
-
JSP脚本片段
在里面写Java代码,定义的变量是全局变量
<%!//任意Java代码,定义的变量是全局变量,在类中int a = 0; %>
9、EL表达式
-
格式
${表达式或变量}
将变量或表达式的值直接显示在网页上,可以取出后台的值
EL表达式的取值是有范围的
-
EL表达式的范围
pageContext:在当前页面中,出了页面就不能用了
request(常用):一次请求中的
session(常用):一次会话中的,一般放用户信息
application:在整个Web服务器中
作用域:就近原则,假设有多个变量在不同的作用域中重复,采用就近原则
10、Lombok配置及使用
-
在IDEA中安装Lombok插件
在setting中的plugins中搜索Lombok,安装后重启IDEA
-
配置Lombok依赖
<!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency>
-
在实体类上加
@Data
注解 -
这样子就不用每次手动去重写类的get/set/toString/…等方法,会自动帮我们写上
-
测试
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表达式取值
-
模拟前端页面传来的参数
http://localhost:8080/javaweb/login?username=admin&password=12345
-
编写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.先得到SessionHttpSession 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);} }
-
在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>
-
创建前端jsp页面,显示登录信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>用户信息</title> </head> <body><%--从session中得到用户的登录信息--%> 用户名: ${loginUser.getName()} 年龄: ${loginUser.getAge()}<%--报错信息,如果登录成功,就会移除--%> ${error}</body> </html>
发布评论