JavaWeb
2023-04-04 16:28:44 0 举报
AI智能生成
学习笔记
作者其他创作
大纲/内容
Servlet
URL详解
http://localhost:8080/test/demo?username=zhangsan&password=123456
http // 表示协议
localhost // 表示ip地址
8080 // 表示端口
test/demo // 表示资源路径,test表示为项目在Tomcat中定义的虚拟目录(一般用项目名称作为虚拟目录),demo表示对应的servlet路径
username=zhangsan&password=123456 // 表示参数
localhost // 表示ip地址
8080 // 表示端口
test/demo // 表示资源路径,test表示为项目在Tomcat中定义的虚拟目录(一般用项目名称作为虚拟目录),demo表示对应的servlet路径
username=zhangsan&password=123456 // 表示参数
Request
请求行
String getMethod(); // 获取请求方式
String getContextPath(); // 获取虚拟目录(项目目录)
StringBuffer getRequestURL(); // 获取URL
String getRequestURI(); // 获取URI
String getQueryString(); // 获取请求参数(get方法获取参数)
请求头
String getHeader(String name); // 根据请求头名称,获取值
请求体
ServletInputStream getInputStream(); // 获取字节输入流
BufferReader getReader(); // 获取字符输入流(post方式获取参数)
通用方式获取请求参数
get方式是从请求头中获取请求参数,post方式是从请求体中获取请求参数,获取请求参数的方式不统一,所有出现了不考虑get或post方式就获取到请求参数的方法
Map<String, String[]> getParameterMap(); // 获取所有参数Map集合
String[] getParameterValues(String name); // 根据名称获取参数值(数组)
String getParameter(String name); // 根据名称获取参数值(单个值)
Response
响应行
void setStatus(int src); // 设置响应状态码
响应头
void setHeader(String name, String value); // 设置响应头键值对
response.setHeader("content-type", "text/html;charset=utf-8");
响应体
PrintWriter getWriter(); // 获取字符输出流
response.getWriter().write("<h1>aaa</h1>");
ServletOutputStream getOutputStream(); 获取字节输出流
中文乱码问题?
get请求
Tomcat7之前中文乱码需要手动进行处理;Tomcat8已经将字符集设置为utf-8,自动解决了中文乱码问题,无需再进行处理
post请求
request.setCharacterEncoding("utf-8");
response-重定向
定义
重定向是浏览器向服务器发送一个请求,服务器给浏览器响应一个地址,然后浏览器再根据这个地址再次向服务器发送一个请求(浏览器向服务器发送两次请求)
使用
response.sendRedirect("/a.jsp");
特点
浏览器地址栏路径发生变化
可以重定向到任意位置的资源(服务器内部,外部均可)
两次请求,不能在多个资源使用request共享数据
request-转发
定义
转发是浏览器向服务器发送一个请求,服务器根据地址在服务器内部查找,然后给浏览器一个响应(浏览器向服务器发送一次请求)
使用
request.getRequestDispatcher("/a.jsp").forward(request, response);
特点
浏览器的地址栏不发生变化
只能转发到当前服务器的内部资源
一次请求,可以在转发的资源间使用request共享域
方法
void request.setAttribute(String name, Object o); // 存储数据到request域对象中
Object request.getAttribute(String name); // 根据key,获取值
void removeAttribute(String name); // 根据key,删除该键值对
路径"/"问题?
配置规则
1.精确匹配
配置路径:@WebServlet("/user/select")
访问路径:localhost:8080/web-demo/user/select
访问路径:localhost:8080/web-demo/user/select
2.目录匹配
配置路径:@WebServlet("/user/*")
访问路径:localhost:8080/web-demo/user/aaa
访问路径:localhost:8080/web-demo/user/bbb
访问路径:localhost:8080/web-demo/user/aaa
访问路径:localhost:8080/web-demo/user/bbb
3.扩展名匹配
配置路径:@WebServlet("*.do")
访问路径:localhost:8080/web-demo/user/aaa.do
访问路径:localhost:8080/web-demo/user/bbb.do
访问路径:localhost:8080/web-demo/user/aaa.do
访问路径:localhost:8080/web-demo/user/bbb.do
4.任意匹配(不推荐使用)
配置路径:@WebServlet("/")
配置路径:@WebServlet("/*")
访问路径:localhost:8080/web-demo/user/haha
配置路径:@WebServlet("/*")
访问路径:localhost:8080/web-demo/user/haha
/ 和 /* 区别
当我们的项目中的Servlet配置了 "/",会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet
当我们的项目中配置了 "/*" ,意味着匹配任意访问路径
JSP,Html页面,重定向中的 "/" 表示Tomcat的根目录(http://localhost:8080/)
web.xml 文件映射或映射注解,转发中的 "/" 表示Tomcat中的项目的根目录(http://localhost:8080/虚拟目录(项目目录)/)
生命周期
1.加载和实例化
servlet默认在第一次访问时创建
servlet可以指定在服务器启动时创建
<load-on-startup>1<load-on-startup>(0或正整数都可以)
2.初始化:执行init方法,只执行一次
3.请求处理:执行service方法,执行多次
4.销毁:执行destroy方法,只执行一次
访问servlet的方式
1.使用web.xml配置文件
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.ywx.exam.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
<servlet-name>test</servlet-name>
<servlet-class>com.ywx.exam.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
2.使用@WebServlet注解
@WebServlet("/资源路径")
JSP
是什么?
JSP(Java Server Pages)是一种动态网页技术标准
基本页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
注释
<%-- 注释内容 --%>
干什么?
用于服务器端进行页面数据的动态渲染
怎么干?
- JSP页面和html页面一样可以被客户端浏览器直接请求,请求的地址如下: http://localhost:8080/first.jsp
- JSP的内容看起来像网页,但是它实际上不是一个简单的网页,JSP中是可以直接通过el表达式从request对象中获取动态的数据进行展示
request对象本身也是一个域对象,,所谓的域对象指的是该对象是一个容器,后端程序可以往request中存入一些额外的数据,只要是域对象就会有以下几个常用方法:
request.setAttribute(key, value); // key是String类型,value是Object类型
EL表达式
是什么?
EL(Expression Language),表达式语言
干什么?
el表达式就是一个专门提供给JSP页面从request对象中获取数据的一种表达式
语法
${key}
JSTL标签库
用于在JSP页面数据展示时进行逻辑判断和循环处理,让开发人员
Java Server Pages Standard Tag Library,
为什么要用Cookie?
Cookie
定义
方法
String getName(); // 获取Cookie的键
String getValue(); // 获取Cookie的值
缺点
因为Cookie保存在客户端
Session
定义
使用
获取session
HttpSession session = request.getSession();
向session中设置数据
session.setAttribute("currentUser", username);
获取session中设置的数据
session.getAttribute("currentUser");
Cookie和Session的区别
0 条评论
下一页