当前位置: 首页 > news >正文

JavaWeb学习笔记

Maven:自动导入配置jar包。

Maven项目架构管理工具:核心思想:约定大于配置

Maven:环境优化

1.修改web.xml为最新的

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"metadata-complete="true"></web-app>

2.将Maven的结构搭建完整–java-- resources

重写方法快捷键Ctrl+O;

ServletContext:

package com.jun.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();String username="tiantian";context.setAttribute("username",username);System.out.println("小满");}
}
package com.jun.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class GetServlet extends HelloServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();String username = (String) context.getAttribute("username");resp.setContentType("text/html");resp.setCharacterEncoding("utf-8");resp.getWriter().print("名字"+username);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"metadata-complete="true">
<servlet><servlet-name>hello</servlet-name><servlet-class>com.jun.servlet.HelloServlet</servlet-class>
</servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet><servlet-name>getc</servlet-name><servlet-class>com.jun.servlet.GetServlet</servlet-class></servlet><servlet-mapping><servlet-name>getc</servlet-name><url-pattern>/getc</url-pattern></servlet-mapping>
</web-app>

测试访问

获取初始化参数:

<context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost:3306/mybatis</param-value></context-param><servlet><servlet-name>gp</servlet-name><servlet-class>com.jun.servlet.ServletDemo03</servlet-class></servlet><servlet-mapping><servlet-name>gp</servlet-name><url-pattern>/gp</url-pattern></servlet-mapping>
package com.jun.servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class ServletDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();String url=context.getInitParameter("url");resp.getWriter().print(url);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

请求转发

HttpServletResponse

web服务器接收到客户端的Http请求,针对这个请求,分别会创建一个代表请求的HttpServletRequest对象和代表响应的一个HttpServletResponse

如果获取客户端请求过来的参数:找HttpServletRequest

如果要给客户端响应一些信息:找HttpServletResponse

生成验证码:

package com.jun.servlet;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;public class ImageServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//如何让浏览器三秒自动刷新一次resp.setHeader("refresh","3");//在内存中创建一个图片BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);//得到图片Graphics2D g = (Graphics2D)image.getGraphics();//设置图片背景颜色g.setColor(Color.white);g.fillRect(0,0,80,20);//给图片写数据g.setColor(Color.blue);g.setFont(new Font(null,Font.BOLD,20));g.drawString(makeNum(),0,20);//告诉浏览器,这个请求用图片的方式打开resp.setContentType("image/jpeg");//网站存在缓存,不让浏览器缓存resp.setDateHeader("expires",-1);resp.setHeader("Cache-Control","no-cache");resp.setHeader("Pragma","no-cache");//把图片写给浏览器ImageIO.write(image,"jpg",resp.getOutputStream());}
//生成随机数private String makeNum() {Random random=new Random();String num=random.nextInt(999999)+"";StringBuffer sb=new StringBuffer();for (int i = 0; i < 6-num.length(); i++) {sb.append("0");}num=sb.toString()+num;return num;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

乱码问题解决

URLEncoder.encode("天意""utf-8")//编码
URLDecoder.decode(cookie.getValue(),"utf-8")//解码

Cookies测试

package com.jun.servlet;import javax.servlet.ServletException;
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;public class CookieDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");PrintWriter out= resp.getWriter();Cookie[] cookies = req.getCookies();//服务器从客户端获取Cookieif(cookies!=null){out.write("您上次访问的时间是:");for (int i = 0; i <cookies.length; i++) {Cookie cookie=cookies[i];if (cookie.getName().equals("lastlogintime")){long last=Long.parseLong(cookie.getValue());Date date=new Date(last);out.write(date.toLocaleString());}}}Cookie cookie = new Cookie("lastlogintime",System.currentTimeMillis()+"");//服务器给客户端响应一个Cookiecookie.setMaxAge(24*60*60);//设置cookie有效期resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

session和cookie的区别

cookie是把用户的数据写给用户的浏览器,浏览器保存

session是把用户的数据写到用户独占session中,服务器保存

session对象由服务器创建

使用场景:

保存一个登录用户的个人信息

购物车信息

在整个网站中经常使用的数据,我们将它保存在session中

使用session

package com.jun.servlet;import com.jun.servlet.com.jun.pojo.Person;
//import com.jun.servlet.com.jun.pojo.person;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 SessionDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给session中存东西session.setAttribute("name",new Person("jack",18));//获取Session的IDString sessionId = session.getId();//判断Session是不是新创建的if (session.isNew()){resp.getWriter().write("创建成功,ID:"+sessionId);}else{resp.getWriter().write("已创建"+sessionId);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
package com.jun.servlet.com.jun.pojo;public class Person {private String name;private int age;public Person(){}public Person(String name,int age){this.name=name;this.age=age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
package com.jun.servlet;import com.jun.servlet.com.jun.pojo.Person;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 SessionDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给session中存东西Person name = (Person) session.getAttribute("name");System.out.println(name.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
package com.jun.servlet;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 SessionDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.removeAttribute("name");session.invalidate();//手动关闭Session}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

什么是JSP

Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态Web技术

最大特点:写JSP就像在写HTML

区别:

HTML只给用户提供静态的数据

JSP页面中可以嵌入Java代码,用于给用户提供动态数据

JSP脚本片段

<%int sum=0;for (int i = 0; i <=100 ; i++) {sum+=i;}out.println("<h1>Sum="+sum+"<h1>");%>

JSP脚本再实现

<%for (int i = 0; i <5 ; i++) {%><h1>Hello,World! <%=i%></h1><%}%>

JSP声明

%!static{System.out.println("Loading");}private int globalVar=0;public void kuang(){System.out.println("你好");}%>

JSP注释不会在客户端显示,html注释会在客户端显示。

修改xml文件需要重启web服务器。

9大内置对象

PageContext:存东西

Request:存东西

Response

Session:存东西

Application:【ServletContext】存东西

config:【ServletConfig】

out

page:几乎不用

exception

pageContext.setAttribute("name1","jack1");//保存的数据只在一个页面中有效
request.setAttribute("name2","jack2");//保存的数据只在一次请求中有效
session.setAttribute("name3","jack3");//保存的数据只在一次会话中有效
application.setAttribute("name4","jack4");//保存的数据只在服务器中有效,从打开服务器到关闭服务器

EL表达式:${}

获取数据、执行运算、获取web开发的常用对象

JSP标签

<jsp:forward page="/jsptag2.jsp"><jsp:param name="name" value="tiantian"></jsp:param><jsp:param name="age" value="18"></jsp:param></jsp:forward>

JSTL表达式

JSTL标签库的使用就是为了弥补html标签的不足;它自定义许多标签,可以供我们使用,标签的功能和Java代码一样。

<%--Created by IntelliJ IDEA.User: 星辰Date: 2023/7/27Time: 18:42To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入JSTL核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head><title>Title</title>
</head>
<body>
<h4>测试</h4>
<hr>
<form action="coreif.jsp"method="post"><input type="text"name="username"value="${param.username}"><input type="submit"value="登录">
</form>
<%--判断如果提交的用户名是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin"><c:out value="管理员欢迎您!"/>
</c:if>
<%--自闭和标签--%>
<c:out value="${isAdmin}"/>
</body>
</html>

编写过滤器

package com.jun.filter;import javax.servlet.*;
import java.io.IOException;public class CharacterEncodingFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {System.out.println("chushihua");//初始化web服务器启动,就可以初始化}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");System.out.println("qian");filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走System.out.println("hou");}public void destroy() {System.out.println("xiaohui");//web服务器关闭的时候,过滤就会销毁}
}

在xml文件中配置

<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>com.jun.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/servlet/*</url-pattern></filter-mapping>

实现监听器

package com.jun.listener;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;public class OnlineCountListener implements HttpSessionListener {//一旦创建,就会触发一次这个事件public void sessionCreated(HttpSessionEvent httpSessionEvent) {ServletContext ctx = httpSessionEvent.getSession().getServletContext();Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");if(onlineCount==null){onlineCount=new Integer(1);}else{int count=onlineCount.intValue();onlineCount=new Integer(count+1);}ctx.setAttribute("OnlineCount",onlineCount);}public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {}
}

在xml中配置

<listener><listener-class>com.jun.listener.OnlineCountListener</listener-class></listener>

导入数据库依赖

<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency>
http://www.lryc.cn/news/114482.html

相关文章:

  • ad+硬件每日学习十个知识点(24)23.8.4(时序约束,SignalTap Ⅱ)
  • FortiGate防火墙日志审计运维
  • 基于yolo v5与Deep Sort进行车辆以及速度检测与目标跟踪实战
  • 以指标驱动,保险、零售、制造企业开启精益敏捷运营的新范式
  • MyBatis-动态SQL-foreach
  • VUE框架:vue2转vue3全面细节总结(3)路由组件传参
  • 音视频技术开发周刊 | 305
  • vue 图片base64转化
  • TS学习03-类
  • FastAPI(七)应用配置
  • eclipse Java Code_Style Code_Templates
  • 01《Detecting Software Attacks on Embedded IoT Devices》随笔
  • APP外包开发的学习流程
  • 第0章 环境搭建汇总
  • 大数据培训课程-《机器学习从入门到精通》上新啦
  • 暗黑版GPT流窜暗网 降低犯罪门槛
  • 数电与Verilog基础知识之同步和异步、同步复位与异步复位
  • JAVA Android 正则表达式
  • 【MFC】07.MFC第三大机制:消息映射-笔记
  • 【jvm】jvm的生命周期
  • 激光雷达测距和摄像头联合棋盘格反射率标定板
  • 【Docker】docker镜像+nginx部署vue项目:
  • 文件编辑(vi/vim)
  • 1007 Maximum Subsequence Sum (PAT甲级)
  • 虚拟机centos7配置网络
  • ChatGPT实战:创业咨询,少走弯路,少踩坑
  • LangChain手记 Overview
  • Vue_02:详细语法以及代码示例 + 知识点练习 + 综合案例(第二期)
  • [腾讯云 Cloud studio 实战训练营] 制作Scrapy Demo爬取起点网月票榜小说数据
  • 使用paddle进行酒店评论的情感分类5——batch准备