B站狂神说Javaweb笔记
一:maven包的导入
junit junit 4.11二:创建模块,然后再创建子模块(子模块继承父类模块)
三:Maven的使用:
父会生成:
servlet-01
servlet-02
子会生成:
javaweb-02servlet
cn.zafu
1.0-SNAPSHOT
四:编写servlet
1,//响应流
PrintWriter writer = resp.getWriter();
2,write.print(“hello,servlet”)
五:配置映射路径
hello cn.zafu.servlet.HelloServlet hello /hello六:一个servlet可以指定多个映射路径,可以指定通用路径
七:ServletContext
一个web容器启动时,会为创建一个对应的ServletContext对象,它代表了当前web应用;
1,数据的共享
我们在一个Servlet中通过servlerContext对象保存(set)的数据,可以在另一个servlet通过servlerContext对象get到
ServletContext servletContext = this.getServletContext();
String username = “旭”;
servletContext.setAttribute(“username”,username);//将一个数据保存到了ServletContext中
另一个Servlet获取数据
String username = (String)context.getAttribute(“username”);
//设置响应格式,否则中文默认GBK格式在浏览器上显示会乱码
resp.setContentType(“text/html”);
resp.setCharacterEncoding(“utf-8”);
resp.getWriter().print("名字"+username);
2,请求转发
区分:重定向与转发
RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp");//转发的请求路径
requestDispatcher.forward(req,resp);
八:验证码功能的实现:
package com.kuang.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 {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//如何让浏览器3秒自动刷新一次;
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(9999999) + "";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 7-num.length() ; i++) {
sb.append("0");
}
num = sb.toString() + num;
return num;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
九:Cookie.Session
会话的解析:打开浏览器点击了超链接,访问了web资源关闭浏览器这个过程称之为会话。
有状态的会话:一个同学进入了教室,下次再来教室我们知道这个同学
1,服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了; cookie
2,服务器登记你来过了,下次你来的时候我来匹配你; seesion
十:保存两种会话技术
1,cookie(客户端技术)
2,session(服务器技术)服务器技术,利用这个技术,可以保存用户的会话信息? 我们可以把信息或者数据放在Session中!
3,sessionID每一个用户只有一个
创建一个自定义列表
-
Markdown
- Text-to-HTML conversion tool Authors
- John
- Luke
十一:使用session
package com.kuang.servlet;
import com.kuang.pojo.Person;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//得到Session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("秦疆",1));
//获取Session的ID
String sessionId = session.getId();
//判断Session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功,ID:"+sessionId);
}else {
resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
}
//Session创建的时候做了什么事情;
// Cookie cookie = new Cookie(“JSESSIONID”,sessionId);
// resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
//得到Session
HttpSession session = req.getSession();
Person person = (Person) session.getAttribute(“name”);
System.out.println(person.toString());
HttpSession session = req.getSession();
session.removeAttribute(“name”);
//手动注销Session
session.invalidate();
十二:会话自动过期:web.xml
15十三:JSP
动态web技术
1,可以写入Java代码
2,类似于html
jsp原理:其实就是转化成一个Servlet类
3,
<%–JSP表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式%>
–%>
<%= new java.util.Date()%>
4, jsp表达式
<%–jsp脚本片段–%>
<%
int sum = 0;
for (int i = 1; i <=100 ; i++) {
sum+=i;
}
out.println(“
Sum=”+sum+"
");%>
5,脚本片段
<%
int x = 10;
out.println(x);
%>
这是一个JSP文档
<% int y = 2; out.println(y); %><%–在代码嵌入HTML元素–%>
<%
for (int i = 0; i < 5; i++) {
%>
Hello,World <%=i%>
<%
}
%>
6,jsp声明
<%!
static {
System.out.println(“Loading Servlet!”);
}
private int globalVar = 0;
public void kuang(){
System.out.println("进入了方法Kuang!");
}
%>
7,jsp指令
<%@page args… %>
<%@include file=""%>
<%–@include会将两个页面合二为一–%>
<%@include file=“common/header.jsp”%>
网页主体
<%@include file=“common/footer.jsp”%>
<%–jSP标签
jsp:include:拼接页面,本质还是三个
–%>
<jsp:include page="/common/header.jsp"/>
网页主体
8,9大内置对象 PageContext 存东西 Request 存东西 Response Session 存东西 Application 【SerlvetContext】 存东西 config 【SerlvetConfig】 out page ,不用了解 exception pageContext.setAttribute("name1","秦疆1号"); //保存的数据只在一个页面中有效 request.setAttribute("name2","秦疆2号"); //保存的数据只在一次请求中有效,请求转发会携带这个数据 session.setAttribute("name3","秦疆3号"); //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器 application.setAttribute("name4","秦疆4号"); //保存的数据只在服务器中有效,从打开服务器到关闭服务器 9,jsp标签,jstl标签,el表达式 导入: javax.servlet.jsp.jstl jstl-api 1.2 taglibs standard 1.1.2 EL表达式: ${ } 10,jsp标签 <%--jsp:include--%><%–
http://localhost:8080/jsptag.jsp?name=kuangshen&age=12
–%>
<jsp:forward page="/jsptag2.jsp">
<jsp:param name=“name” value=“kuangshen”></jsp:param>
<jsp:param name=“age” value=“12”></jsp:param>
</jsp:forward>
11,JavaBean实体类
实体类
JavaBean有特定的写法:
必须要有一个无参构造
属性必须私有化
必须有对应的get/set方法;
一般用来和数据库的字段做映射 ORM;
ORM :对象关系映射
表—>类
字段–>属性
行记录---->对象