Java后端02(jsp)

打印 上一主题 下一主题

主题 933|帖子 933|积分 2799

jsp

​        servlet 是无法将后端获取的数据传递给html 页面的,无法再servlet 中通过转发或者是重定向的方式,给html 页面传递响应的后端数据,servlet 中由于拼接过于繁琐,是不适合写html 的因此引入了 jsp ,既可以编写 html标签,也可以写 Java 代码,
  1. <dependency>
  2.       <groupId>javax.servlet.jsp</groupId>
  3.       <artifactId>javax.servlet.jsp-api</artifactId>
  4.       <version>2.3.3</version>
  5. </dependency>
复制代码
jsp的本质是Servlet


  • 静态资源 html css js 图片
  • html标签
  • 指令
  • 可以在这个标签中书写Java代码
  • 用于输出一段内容呈现在html中
  • jsp中的注释,这个注释和html的注释不一样,这个注释相当于是生成在jsp专业的servlet中,最终的页面是看不到这个注释的
  • 用于做页面引用和包含,类似于html 的iframe 标签
页面包含
  1. [/code][size=4]cookie 和 session[/size]
  2. [list=1]
  3. [*]cookie 由服务器创建由浏览器保存,服务器通过响应给客户端发送 cookie(一般不会以明文形式出现)
  4. [/list][code]// 通过servlet实现cookie
  5. @WebServlet("/testCookie")
  6. public class TestCookieServlet extends HttpServlet {
  7.     @Override
  8.     protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  9.         // 实例化一个 cookie 对象
  10.         Cookie c = new Cookie("jerk","wyf");
  11.         // 设置 cookie 的有效期(单位秒)
  12.         c.setMaxAge(60*24*60);
  13.         // 设置 cookie 的触发路径,当设置为 / 的时候,浏览器向服务器发送的所有请求都会携带这个 cookie
  14.         c.setPath("/");
  15.         // 将 cookie 数据添加到响应中
  16.         resp.addCookie(c);
  17.     }
  18. }
  19. // 通过servlet读取cookie
  20. @WebServlet("/getCookie")
  21. public class GetCookieServlet extends HttpServlet {
  22.     @Override
  23.     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  24.         // 读 cookie
  25.         Cookie[] cookies = req.getCookies();
  26.         if(null != cookies){
  27.             for (Cookie cookie : cookies) {
  28.                 System.out.println(cookie.getName() + " : " + cookie.getValue());
  29.             }
  30.         }
  31.     }
  32. }
复制代码

  • 由于cookie 的安全性不高,因此引入了 session
⭐session 代表着单服务器会话,从用户打开一个网页开始,无论在这个网页中访问了多少页面,点击了多少链接,都属于同一个会话,知道用户关闭浏览器为止,session 是由 tomcat 自己创建,开发者只是获取了 tomcat 创建的 session,在jsp中,session 是内置对象,并不需要定义,就可以直接使用,如果是在 servlet 中 需要使用 HttpSession session = req.getSession() 来获取,但是 jsp 并不需要 session 对象本身可以用俩存储数据,用于跨页面的信息传递
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" isELIgnored="false" %>
  2. <html>
  3.         <head>
  4.             <title>Title</title>
  5.         </head>
  6.     <body>
  7.     <%
  8.         session.setAttribute("session01","robot01");
  9.     %>
  10.     <a target="_blank" href="https://www.cnblogs.com/getSession.jsp">点击跳转到获取信息的jsp</a>
  11.     </body>
  12. </html>
复制代码
四个作用域对象


  • pageContext 页面对象,用于在当前页面进行传值
  • request 请求对象,用于在一次请求中传值
  • session 会话对象,用于在同一个会话中做数据传递
  • application 全局对象,所有用户共享的对象
  1. pageContext 传参:
  2.     <%pageContext.setAttribute("direct","robot01");%>
  3.     <%=pageContext.getAttribute("direct")%>
  4. request 传参:
  5.         <%request.setAttribute("student",student);%>
  6.         <%Student student = (Student) request.getAttribute("student");%>
  7. session 传参:
  8.         <%session.setAttribute("robotName","robot01");%>
  9.         <%=session.getAttribute("robotName")%>
  10. application 传参:
复制代码
九大内置对象

在jsp中不需要定义就可以直接使用的对象

  • request 请求
  • response 响应
  • out 输出
  • pageContext 代表页面作用域对象
  • session 会话对象
  • application 全局对象
  • page 等价于当前 jsp 转译的 servlet类 的实例--this
  • config 用于获取web.xml中初始化参数的,一般不用
  • exception 用于做jsp页面的异常处理
jstl(jsp standard tag library)标准标签库

​        允许开发人员像使用 HTML 标签一样,在 jsp 中开发 Java 功能
  1. // 导入依赖
  2. <dependency>
  3.   <groupId>jstl</groupId>
  4.   <artifactId>jstl</artifactId>
  5.   <version>1.2</version>
  6. </dependency>
  7. <dependency>
  8.   <groupId>taglibs</groupId>
  9.   <artifactId>standard</artifactId>
  10.   <version>1.1.2</version>
  11. </dependency>
复制代码
  1. <c:set var="jerk" value="$('wyf')" scope="request"></c:set>
  2. <%--      c:if 会根据 test 中的判断结果决定其中的标签和内容是否显示在页面中         --%>
  3. <c:if test="${age>18}">
  4.     <p>这个人成年了</p>
  5. </c:if>
  6. <c:if test="${!(age>18)}">
  7.     <p>这个人没成年</p>
  8. </c:if>
  9. <%
  10.     pageContext.setAttribute("zhiNan","wjp");
  11.     pageContext.setAttribute("list",new ArrayList<>());
  12.     pageContext.setAttribute("jerk",null);
  13. %>
  14. <c:if test="${empty zhiNan}">
  15.     <p>没有直男</p>
  16. </c:if>
  17. <c:if test="${empty list}">
  18.     <p>集合的size为0</p>
  19. </c:if>
复制代码
el表达式

​        将复杂的代码进行简化,方便我门从四个不同的作用域对象中获得属性值
⭐如果在四个不同作用域对象下存了同一个属性的值,那么 EL 表达式遵循作用域越小,作用域越高的原则,类Java
  1. <%
  2.     request.setAttribute("jerk","zyy");
  3.     Student s = new Student(1,"wyf",20);
  4.     request.setAttribute("s",s);
  5. %>
  6. 传统方式获取对象:<%=request.getAttribute("jerk")%><br>
  7. EL表达式获取对象:${jerk}<br>
  8. 传统方式获取对象:<%=((Student)request.getAttribute("s")).getName()%><br>
  9. EL表达式获取对象:${s.name}<br>
复制代码
⭐el表达式结合c:foreach 实现集合的快速遍历
  1. <%
  2.     List<Student> studentList = new ArrayList<>();       
  3.     studentList.add(new Student(1,"robot01",20));
  4.     studentList.add(new Student(2,"robot02",20));
  5.     studentList.add(new Student(3,"robot01",20));
  6.     request.setAttribute("studentList",studentList);
  7. %>
  8. <table>
  9.     // 会自动根据list中的个数,自动分配表格的列
  10.     <c:forEach items="${studentList}" var="s" varStatus="st">
  11.         <tr>
  12.             <td>${s.id}</td>
  13.             <td>${s.name}</td>
  14.             <td>${s.age}</td>
  15.         </tr>
  16.     </c:forEach>
  17. </table>
复制代码
MVC 设计模式


  • M 模型层:实体类 + JDBC
  • V 视图层:jsp + html(尽可能不出现 java 代码)
  • C 控制器层:servlet(负责接受请求,调用业务逻辑,决定跳转的页面,绝对不会出现 html 代码)
过滤器(Servlet.filter)

​        对请求进行过滤,可以对所有请求进行中文处理,对 session 进行用户校验,如果存在多个过滤器,顺序根据过滤器首字母排序
  1. public class A_EncodingFilter implements Filter {
  2.     @Override
  3.     // 过滤器初始化
  4.     public void init(FilterConfig filterConfig) throws ServletException {
  5.     }
  6.     @Override
  7.     // 核心过滤方法
  8.     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  9.                 // 传参向下转型
  10.         HttpServletRequest req = (HttpServletRequest) servletRequest;
  11.         HttpServletResponse resp = (HttpServletResponse) servletResponse;
  12.         // 把所有请求拦截,并设置字符集编码
  13.         req.setCharacterEncoding("UTF-8");
  14.         // 放行请求
  15.         filterChain.doFilter(req,resp);
  16.     }
  17.     @Override
  18.     // 过滤器销毁
  19.     public void destroy() {
  20.     }
  21. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表