600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 尚硅谷最新版JavaWeb全套教程 java web零基础入门完整版(二)

尚硅谷最新版JavaWeb全套教程 java web零基础入门完整版(二)

时间:2022-09-23 02:54:41

相关推荐

尚硅谷最新版JavaWeb全套教程 java web零基础入门完整版(二)

书城项目

JavaEE三层架构介绍

搭建书城项目环境

IDEA工具Debug的使用

JSP

什么是jsp

jsp页面的本质

jsp的page指令

虽然/浏览器解析的时候是端口号,但是jsp本质最终还是被翻译成servlet程序,所以还是被 服务器 解析,那么/服务器解析得到的还是工程路径

声明脚本

<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%--1. 声明类属性--%><%!private Integer id;private String name;private static Map<String, Object> map;%><%--2.声明static静态代码块--%><%!static {map = new HashMap<String, Object>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");}%><%--3.声明类方法--%><%!public int abc() {return 12;}%><%--4.生成内部类--%><%!public static class A {private Integer id = 12;private String abc = "abc";}%></body></html>

jsp也会自动导包在声明了类的属性后,进入a.java即翻译后的程序后,发现我们定义的属性已经在源码中啦

表达式脚本

<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%--1. 声明类属性--%><%!private Integer id;private String name;private static Map<String, Object> map;%><%--2.声明static静态代码块--%><%!static {map = new HashMap<String, Object>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");}%><%--3.声明类方法--%><%!public int abc() {return 12;}%><%--4.生成内部类--%><%!public static class A {private Integer id = 12;private String abc = "abc";}%><%--表达式脚本可以在页面输出 整型、浮点型、字符串、对象--%><%=12 %> <br><%=12.12 %> <br><%="这是一个字符串" %> <br><%=map %> <br></body></html>

翻译后的程序中,在 _jspService 这个方法中 :

<%--表达式脚本可以在页面输出 整型、浮点型、字符串、对象--%><%=12 %> <br><%=12.12 %> <br><%="这是一个字符串" %> <br><%=map %> <br><%=request.getParameter("username")%></body></html>

代码脚本

_jspService方法中的现有对象都可以直接使用 : 由多个代码脚本块组合完成一个完整的java语句 :

代码脚本可以和表达式脚本一起使用,在jsp页面输出数据 :

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><table border="1" cellspacing="0"><%for (int j = 0; j < 10; j ++ ) {%><tr><td>第 <%=j + 1%>行</td></tr><%}%></table></body></html>

jsp中的三种注释

1.html注释

<!-- 这是html注释 -->

html注释会被翻译到java源代码中。在_jspService方法里,以out.write输出到客户端

jsp注释是jsp中真正的注释

jsp中的九大内置对象

jsp中的内置对象,是指tomcat在翻译jsp页面成为servlet源代码后,内部提供的九大对象,叫内置对象

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {final java.lang.String _jspx_method = request.getMethod();if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");return;}final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final java.lang.Object page = this;

request : 请求对象

response :响应对象

pageContext :jsp的上下文对象

session :会话对象

application :ServletContext对象(Servlet上下文对象)

config :ServletConfig对象

out :jsp输出流对象

page :指向当前jsp的对象

第九个对象需要isErrorPage为true才会出现,也就是 exception :异常对象

jsp四大域对象的演示

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><h1>scope.jsp页面</h1><%// 往四个域中都分别存了数据pageContext.setAttribute("key", "pageContext");request.setAttribute("key", "request");session.setAttribute("key", "session");application.setAttribute("key", "application");%>pageContext域是否有值 :<%=pageContext.getAttribute("key")%> <br>request域是否有值 :<%=request.getAttribute("key")%> <br>session域是否有值 :<%=session.getAttribute("key")%> <br>application域是否有值 :<%=application.getAttribute("key")%> <br><%request.getRequestDispatcher("/scope2.jsp").forward(request, response);%></body></html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><h1>scope2.jsp页面</h1>pageContext域是否有值 :<%=pageContext.getAttribute("key")%> <br>request域是否有值 :<%=request.getAttribute("key")%> <br>session域是否有值 :<%=session.getAttribute("key")%> <br>application域是否有值 :<%=application.getAttribute("key")%> <br></body></html>

整个请求转发还是 一次请求

关闭浏览器以后再打开scope2.jsp页面(没有关闭服务器) :

重新部署tomcat,再访问scope2 :

数据存储在域对象中需要占据空间,如果使用范围大的,可能已经被用过了,但是并没有释放空间,所以优先使用范围小的,使用完自动销毁

out和response.getWriter输出的区别

<%out.write("out 1");out.flush();out.write("out 2");response.getWriter().write("res 1");response.getWriter().write("res 2");%>

常用标签之 静态包含

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>main.jsp</title></head><body>头部信息 <br>主题内容 <br><%--<%@include file=""%> 就是静态包含file属性制定你要包含的jsp页面的路径地址中第一个斜杠 / 表示 http://ip:port/工程路径/映射到代码的web目录静态包含的特点 :1、静态包含不会翻译被包含的jsp页面2、静态包含其实是被被包含的jsp页面的代码拷贝到包含的位置执行输出--%><%@include file="/include/footer.jsp"%></body></html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>footer.jsp</title></head><body>页脚信息 <br></body></html>

常用标签之 动态包含

动态包含的底层原理 :

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>main.jsp</title></head><body>头部信息 <br>主题内容 <br><%--<jsp:include page=""></jsp:include> 这是动态包含动态包含也可以像静态包含一样把被包含的内容输出到包含位置动态包含的特点 :1、动态包含会把包含的jsp页面也翻译成为java代码2、动态包含底层代码使用如下去调用被包含的jsp页面执行输出JspRuntimeLibrary.include(request, response, "/include/footer.jsp", out, false);3、动态包含,还可以传递参数--%><jsp:include page="/include/footer.jsp"><jsp:param name="username" value="bbj"/><jsp:param name="password" value="root"/></jsp:include></body></html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>footer.jsp</title></head><body>页脚信息 <br><%=request.getParameter("password")%></body></html>

一般用jsp只是输出页面数据,不会有太复杂代码,因此一般使用的是静态包含

常用标签之 请求转发

练习一 :在jsp页面中输出九九乘法口诀表

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><table><% for (int i = 1; i <= 9; i ++ ) {%><tr><% for (int j = 1; j <= i; j ++ ) {%><td><%= j + "x" + i + "=" + (i * j)%></td><% } %></tr><% } %></table></body></html>

练习二 :遍历输出十个学生信息到表格中

package com.atguigu.pojo;public class Student {private Integer id;private String name;private Integer age;private String phone;// 构造器(无参 + 全参)+ Getter+Setter + toString@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", phone='" + phone + '\'' +'}';}public Student(Integer id, String name, Integer age, String phone) {this.id = id;this.name = name;this.age = age;this.phone = phone;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Student() {}}

<%@ page import="com.atguigu.pojo.Student" %><%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title><style>table {border: 1px pink solid;width: 600px;border-collapse: collapse;}td, th {border: 1px pink solid;}</style></head><body><%List<Student> studentList = new ArrayList<Student>();for (int i = 0; i < 10; i++) {int t = i + 1;studentList.add(new Student(t, "name" + t, 18 + t, "phone" + t));}%><table><tr><td>编号</td><td>姓名</td><td>年龄</td><td>电话</td><td>操作</td></tr><% for (Student student : studentList) {%><tr><td><%=student.getId() %></td><td><%=student.getName()%></td><td><%=student.getAge()%></td><td><%=student.getPhone()%></td><td>操作、修改</td></tr><% } %></table></body></html>

请求转发的使用说明

请求转发的使用 :

servlet程序其实是不太适合回传html数据给后端的,比较麻烦,而是jsp页面比较适合干这件事因此,我们把这件事交给jsp,专门用来显示学生信息那么,我们就需要serlet和jsp共同完成这件事情,因此,需要 请求转发,刚好请求转发共享request域数据

package com.atguigu.pojo;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class SearchStudentServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求的参数// 发sql语句查询学生的信息// 使用for循环生成查询到的数据做模拟List<Student> studentList = new ArrayList<Student>();for (int i = 0; i < 10; i++) {int t = i + 1;studentList.add(new Student(t, "name" + t, 18 + t, "phone" + t));}// 保存查询到的结果(学生信息)到request域中req.setAttribute("stuList", studentList);// 请求转发到 showStudent.jsp页面req.getRequestDispatcher("/test/showStudent.jsp").forward(req, resp);}}

<%@ page import="com.atguigu.pojo.Student" %><%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title><style>table {border: 1px pink solid;width: 600px;border-collapse: collapse;}td, th {border: 1px pink solid;}</style></head><body><%List<Student> studentList = (List<Student>) request.getAttribute("stuList");%><table><tr><td>编号</td><td>姓名</td><td>年龄</td><td>电话</td><td>操作</td></tr><% for (Student student : studentList) {%><tr><td><%=student.getId() %></td><td><%=student.getName()%></td><td><%=student.getAge()%></td><td><%=student.getPhone()%></td><td>操作、修改</td></tr><% } %></table></body></html>

注意,写完代码以后直接访问showStudent.jsp会 空指针异常因为,我们直接访问jsp页面,没有经过servlet程序,还没有数据所以,访问的时候一定要先访问这个servlet记得给这个servlet加上地址

什么是Listener监听器

ServletContextListener监听器

package com.atguigu.listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class MyServletContextListenerImpl implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("ServletContext对象被创建了");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("ServletContext对象被销毁了");}}

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>SearchStudentServlet</servlet-name><servlet-class>com.atguigu.pojo.SearchStudentServlet</servlet-class></servlet><servlet-mapping><servlet-name>SearchStudentServlet</servlet-name><url-pattern>/searchStudentServlet</url-pattern></servlet-mapping><!-- 配置监听器--><listener><listener-class>com.atguigu.listener.MyServletContextListenerImpl</listener-class></listener></web-app>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。