JavaWeb核心四 Li.057

EL 表达式 EL (Expression Language): 表达式语言. 在JSP 2.0规范中加入的内容, 也是Servlet规范的一部分. 作用: 在JSP页面中获取数据. 让我们的JSP脱离java代码块和JSP表达式 <%--请求域中添加username数据--%> <% request.setAttribute("username","zhangsan"); %> <%--获取请求域的username 3种方式--%> <%--Java代码块--%> <% out.println(request.getAttribute("username")); %> <br/> <%--JSP表达式获取--%> <%= request.getAttribute("username")%> <br/> <%--EL表达式获取--%> ${username} EL 表达式获取数据类型 获取基本数据类型的数据 获取自定义对象类型的数据 获取数组类型的数据 获取List集合类型的数据 获取Map集合类型的数据 <%@ page import="com.lizicai.bean.Student" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.HashMap" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% pageContext.setAttribute("num",10); %> 基本数据类型 ${num} <br/> <% Student stu = new Student("李明", 23); pageContext.setAttribute("stu",stu); %> 自定义对象: ${stu} <br/> ${stu.name} ${stu.age} <br/> <% String[] arr = {"Haha", "go"}; pageContext.setAttribute("arr",arr); %> 数组: ${arr} <br/> ${arr[0]} ${arr[1]} ${arr[2]} <br/> <% ArrayList<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); pageContext.setAttribute( "list",list); %> List集合 ${list} ${list[0]} <br/> <% HashMap<String, Student> map = new HashMap<>(); map.put("s01",new Student("李明",20)); map.put("s02",new Student("张三",20)); pageContext.setAttribute( "map",map); %> Map 集合: ${map} <br/> 第一个学生 ${map.s01} <br> 第一个学生的姓名 ${map.s01.name} <br> </body> </html> EL 表达式注意事项 EL 表达式没有空指针异常 EL 表达式没有索引越界异常 EL 表达式没有字符串的拼接 <% Student s = null; String [] arr2 = {"Hello", "World"}; pageContext.setAttribute( "s",s); pageContext.setAttribute( "arr2",arr2); %> ${s} ${arr2[10]} ${arr2[0]}+${arr2[1]} EL 表达式运算符 关系运算符 关系运算符 作用 示例 结果 ==或eq 等于 略 略 !=或ne 不等于 略 略 <或lt 小于 略 略 >或gt 大于 略 略 <=或le 小于等于 略 略 >=或ge 大于等于 略 略 逻辑运算符 运算符 作用 示例 结果 &&或and 并且 略 略 ||或or 或者 略 略 !或not 取反 略 略 其他运算符 运算符 作用 empty 1判断对象是否为null.2判断字符串是否为空字符串.3判断窗口元素是否为0 条件?表达式1:表达式2 三元运算符 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL 表达式运算符</title> </head> <body> <% String ss = null; String ss2 = ""; int[] arr = {}; %> ${empty ss} <br/> ${empty ss2} <br/> ${empty arr} <br/> <% pageContext.setAttribute("gender", "man"); %> <input type="radio" name="gender" value="man" ${gender == "man" ? "checked" : ""}> 男 <input type="radio" name="gender" value="woman" ${gender == "woman" ? "checked" : ""}> 女 </body> </html> EL 表达式使用细节 EL 表达式能够获取四大域对象的数据, 根据名称从小到大在域对象中查找. 还可以获取JSP其他八个隐式对象, 并调用对象中的方法. <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% pageContext.setAttribute("username", "zhangsan1"); request.setAttribute("username", "zhangsan2"); session.setAttribute("username", "zhangsan3"); application.setAttribute("username", "zhangsan4"); %> ${username} <br> <%= request.getContextPath() %> ${pageContext.request.contextPath} </body> </html> EL 表达式隐式对象 隐式对象名称 对应JSP隐式对象 说明 pageContext pageContext 功能完全相同 applicationScope 没有 操作应用域对象数据 sessionScope 没有 操作会话域对象数据 requestScop 没有 操作请求域对象数据 pageScope 没有 操作页面域对象数据 header 没有 操作请求头数据 headerValues 没有 获取请求头数据(多个值) param 没有 获取请求参数数据 paramValues 没有 获取请求参数数据(多个值) initParam 没有 获取全局配置参数数据 cookie 没有 获取Cookie 对象 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%-- pageContext 对象, 可以获取其他3个域对象和JSP中八个隐式对象--%> ${pageContext.request.contextPath} <br/> <%--applicationScope sessionScope requestScop pageScope--%> <% request.setAttribute("username", "zhangsan1"); %> <% pageContext.setAttribute("username", "zhangsan2"); %> ${username} <br/> ${requestScope.username} <br/> ${pageScope.username} <br/> <%--header headerValues 获取的数组--%> ${header["connection"]} <br> ${headerValues["connection"][0]} <br> <%--param paramValues 获取请求参数--%> ${param.username} <br/> ${paramValues.hobby[0]} <br/> ${paramValues.hobby[1]} <br/> <%--initParam 获取全局配置参数--%> ${initParam.pname} <br> <%--cookie--%> ${cookie} <br> ${cookie.JSESSIONID} <br> <%-- 获取集合元素--%> ${cookie.JSESSIONID.name} <br> <%-- 获取cookie对象的名称 --%> ${cookie.JSESSIONID.value} <br> <%-- 获取cookie对象的数据值 --%> </body> </html> JSTL 介绍 JSTL (Java Servler Pages Standarded Tag Library): JSP标准标签库 主要提供给开发人员一个标准通用的标签库 开发人员可以利用这些标签取代JSP页面上的Java代码, 从而提高程序的可读性, 降低程序的维护难度. 组成 作用 说明 core 核心标签库 通用的逻辑处理 fmt 国际化 不同地域显示不同语言 functions EL函数 EL表达式可以使用的方法 sql 操作数据库 了解 xml 操作XML 了解 JSTL 核心标签库 标签名称 功能分类 属性 作用 <标签名:if> 流程控制 核心标签库 用于条件判断 <标签名:choose> ifelseif流程控制 核心标签库 用于多条件判断 <标签名:when> ifelseif流程控制 核心标签库 用于多条件判断 <标签名:otherwise> ifelseif流程控制 核心标签库 用于多条件判断 <标签名:forEach> 迭代遍历 核心标签库 用于循环遍历 http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/解压lib的包导入tomcatlib中 ...

October 13, 2021&nbsp;·&nbsp;7 分钟&nbsp;·&nbsp;Lizicai

JavaWeb核心三 Li.056

Cookie 属性 属性名 作用 是否重要 name Cookie的名称 必须属性 value Cookie的值(不支持中文) 必须属性 path Cookie的路径 重要 domain Cookie的域名 重要 maxAge Cookie的存活时间 重要 version Cookie的版本号 不重要 comment Cookie的描述 不重要 Cookie 方法 方法名 作用 Cookie(String.name,String.Value) 构造方法创建对象 属性对应的set和get就去 赋值和获取值 Cooke 添加和获取 添加 HttpServletResponse 返回值 方法名 说明 void addCookie(Cookie.cookie) 向客户端添加Cookie 获取 HttpServletRequest 返回值 方法名 说明 Cookie[] getCookies() 获取所有的Cookie Cookie 细节 数量限制 每个网站最多只能有20个Cookie, 且大小不能超过4KB. 所有网站的Cookie总数不能超过300个 名称限制 Cookie的名称只能包含ASCCI码表中字母,数字字符. 不能包含逗号,分号,空格, 不能以$开头 Cookie的值不支持中文 存活时间限制setMaxAge()方法接收数字 负整数: 当前会放有效, 浏览器关闭则清除 0: 立即清除 正整数: 以秒为单位设置存活时间 访问路径限制 默认路径: 取自第1次访问的资源路径前缀. 只要以这个路径开头就能访问到 设置路径: setPath()方法设置指定路径 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.text.SimpleDateFormat; import java.util.Date; @WebServlet ( value = "/demo1Cookie") public class Demo1Cookie extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=UTF-8"); PrintWriter pw = resp.getWriter(); pw.write("欢迎访问本网站, 你的最后访问时间为:"); Cookie cookie = new Cookie("time", System.currentTimeMillis()+""); cookie.setMaxAge(10); resp.addCookie(cookie); Cookie[] arr = req.getCookies(); for(Cookie c : arr){ if("time".equals(c.getName())){ String value = c.getValue(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); pw.write(sdf.format(new Date(Long.parseLong(value)))); } } } } HttpSession 介绍 HttpSession: 服务器端会话管理技术 本质也采用客户端会话管理技术 只不过在客户保存一个特殊标识, 而共享的数据保存到了服务端的内存对象中. 第次请求时, 会将特殊标识带到服务器端, 根据这个标识来找到对应的内存空间, 从而实现数据共享. 是Servlet规范中四大域对象之一的会话域对象 作用: 可以实现数据共享 域对象 功能 作用 ServletContext 应用域 在整个应用之间实现共享数据 ServletRequest 请求域 在当前的请求或请求转发之间实现数据共享 HttpSession 会话域 在当前会话范围之间实现数据共享 HttpSession 常用方法 返回值 方法名 说明 void setAttribute(String.name,Object.value) 设置共享数据 Object getAttribute(String.name) 获取共享数据 void removeAttribute(String.name) 移除共享数据 String getId() 获取唯一标识名称 void involidate() 让session立即失效 HttpSession 获取 返回值 方法名 说明 HttpSession getSession() 获取HttpSession对象 HttpSession getSession(boolean.create) 获取HttpSession,未获取到是否自动创建 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; @WebServlet( value = "/demo1Session") public class Demo1Session extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); HttpSession session = req.getSession(); System.out.println(session); System.out.println(session.getId()); session.setAttribute("username",username); } } 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; @WebServlet( value = "/demo2Session") public class Demo2Session extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); System.out.println(session); System.out.println(session.getId()); Object username = session.getAttribute("username"); resp.getWriter().write(username+""); } } 禁用Cookie 就获取不到了 可以使用手动拼接链接 resp.getWriter().write("<a href='"+resp.encodeURL("http://localhost:8080/demo3Session")+"'>go to servlet</a>"); HttpSession 的细节 浏览器禁用Cookie, 禁止访问 ...

October 8, 2021&nbsp;·&nbsp;6 分钟&nbsp;·&nbsp;Lizicai

JavaWeb核心二 Li.055

请求对象 返回值 方法名 说明 String getContextPath() 获取虚拟目录名称 String getServletPath() 获取Servlet映射路径 String getRemoteAddr() 获取访问者ip地址 String getQueryString() 获取请求的消息数据 String getRequestURI() 获取统一资源标识符 String getRequestURL() 获取统一资源定位符 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 java.io.IOException; @WebServlet(name = "demo1GetPath", value = "/demo1GetPath") public class Demo1GetPath extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String contextPath = req.getContextPath(); System.out.println(contextPath); String servletPath = req.getServletPath(); System.out.println(servletPath); String remoteAddr = req.getRemoteAddr(); System.out.println(remoteAddr); String queryString = req.getQueryString(); System.out.println(queryString); String requestURI = req.getRequestURI(); System.out.println(requestURI); StringBuffer requestURL = req.getRequestURL(); System.out.println(requestURL); } } 请求头信息 返回值 方法名 说明 String getHeader(String.name) 根据请求头名获取一个值 Enumeration<String> getHeaders(String.name) 根据请求头名获取多个值 Enumeration<String> getHeaderNames() 获取所有请求头名称 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 java.io.IOException; import java.util.Enumeration; @WebServlet(name = "demo2GetPath", value = "/demo2GetPath") public class Demo2GetPath extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String host = req.getHeader("Host"); System.out.println(host); Enumeration<String> headers = req.getHeaders("Accept-Encoding"); System.out.println("----------------------------------------------"); while (headers.hasMoreElements()){ String header = headers.nextElement(); System.out.println(header); } Enumeration<String> headerNames = req.getHeaderNames(); System.out.println("================================"); while (headerNames.hasMoreElements()){ String headerName = headerNames.nextElement(); System.out.println(headerName+"...."+ req.getHeader(headerName)); } } } 获取请求参数信息 返回值 方法名 说明 String getParameter(String.name) 根据名称获取数据 String[] getParameterValues(String.name) 根据名称获取所有数据 Enumeration<String> getParameterNames() 获取所有名称 Map<String,String[]> getParameterMap() 获取所有参数的键值对 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 java.io.IOException; import java.util.Enumeration; import java.util.Map; @WebServlet(name = "Demo3GetRequestParamter", value = "/demo3GetRequestParamter") public class Demo3GetRequestParamter extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(name+"..."+password); System.out.println("----------------"); String[] hobbies = req.getParameterValues("hobby"); for(String hobby:hobbies){ System.out.println(hobby); } System.out.println("===================="); Enumeration<String> parameterNames = req.getParameterNames(); while (parameterNames.hasMoreElements()){ String pname = parameterNames.nextElement(); System.out.println(pname); } System.out.println("==================="); Map<String, String[]> parameterMap = req.getParameterMap(); for(Map.Entry<String,String[]> parameter : parameterMap.entrySet()){ System.out.print(parameter.getKey()); for(String s:parameter.getValue()){ System.out.print(","+s); } System.out.println(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req,resp); } } 获取请求参数并封装对象 手动封装方式 反射封装方式 工具类封装方式 手动封装的方式 ...

September 29, 2021&nbsp;·&nbsp;10 分钟&nbsp;·&nbsp;Lizicai

JavaWeb核心一 Li.054

1. IDEA 创建 JavaWeb 项目 1.1 选择JavaEE 项目 1.2 Project tempate中选择 Web Application 1.3 一路创建 1.4 在Edit Configurations 设置tomcat, 下面为brew 安装的tomcat地址 /usr/local/Cellar/tomcat@9/9.0.53/libexec 1.5 设置On update action: update resources, On frame deactivation: update resources 1.6 设置第二栏Deployment: Application text: /web_demo 1.7 启动tomcat 即可自动在浏览器上预览 2. 打包JavaWeb 项目 2.1 在本地wepapp文件夹内, 使用jar -cvf myweb.war .打包 jar -cvf myweb.war . 2.2 上传到tomcat服务器中的webapps中, 重启tomcat即可看到发布结果 scp myweb.war webserver:tomcat9.0/webapps/ ./shutdown.sh ./startup.sh 3. 更改Tomcat 端口 conf中server.xml 8080更改为80端口 4. 在server.xml中添加其它目录做为tomcat项目 **在Host中间添加 <Context path="/myweb" docBase="/Users/lizicai/IdeaProjects/web_demo/src/main/webapp" /> 访问ip:8080/myweb 即可 ...

September 26, 2021&nbsp;·&nbsp;7 分钟&nbsp;·&nbsp;Lizicai