美文网首页
后端框架学习--servlet (2)

后端框架学习--servlet (2)

作者: Big_Monster | 来源:发表于2019-01-27 22:27 被阅读13次

    前言

    在上一部分,已经学习到了有关cookie和session的处理,request,response对象的处理。
    这一部分主要关注对于response的处理。
    之前对于返回的数据都是一个一个字符串的往PrintWriter里面写入,这样实在是很麻烦,每次都要重新写一堆的Html标签语句,这不符合编程的重用性的思想。
    于是便有了很多模版引擎之类的工具。
    比如JSP

    JSP

    JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计。
    之前在第一次启动的时候,服务器会返回index.jsp给前端页面展示。


    index.jsp
    项目目录

    JSP 和 servlet 进行通信传值

    • JSP向Servlet传值:
      1.URL后面跟参数
      http://localhost:8080/Hello?name=monster
      2.form表单提交
    <form action="Send" method="post">
      <input type="text" name="account" />
      <button type="submit" >提交</button>
    </form>
    

    3.在JSP内置对象Session设置值
    JSP文件:

    <%
      session.setAttribute("school", "dgut");
      request.setAttribute("name", "xiao");  //servlet无法获取该参数
    %>
    

    Servlet文件:

    String school=(String) request.getSession().getAttribute("school");  
    

    说明:servlet只能接受到到session.setAttribute("school", "dgut")传来的值,无法接收到request.setAttribute("name", "xiao")传来的值,在servlet通过request.getSession().getAttribute("school")获取参数值。

    • Servlet向JSP传值
      1.重定向
      2.URL转发

    --- 重定向
    servlet文件:

    response.sendRedirect("https://www.baidu.com");//重定向到web应用外部
    response.sendRedirect("Receive");//重定向到web应用内部,URL前面没有“/”,默认在应用根目录下面
    response.sendRedirect("/Monitor/Receive");//重定向到web应用内部,URL以根开头的,前面必须以应用开始
    

    说明:重定向是路径的跳转,重定向完成后,浏览器会重新发起新的请求,上一次的参数无法转发。
    -- url转发
    servlet文件:

    String url="/JspGetServlet.jsp";//URL必须以“/”开头
    //ServletContext sc=getServletContext();
    //RequestDispatcher requestDispatcher=sc.getRequestDispatcher(url); //通过ServletContext 获取转发器
    RequestDispatcher requestDispatcher=request.getRequestDispatcher(url);//通过request获取转发器
    requestDispatcher.forward(request, response);
    

    JSP文件:

    <%=request.getParameter("account") %>   //通过内置对象request获取
    ${param.account}   //通过EL表达式获取
    

    示例完整代码

    servlet:

    import javax.servlet.RequestDispatcher;
    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 = "MyJsp",urlPatterns = "/red")
    public class MyJsp extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //response.sendRedirect();
            request.getSession().setAttribute("name","lin");
            request.setAttribute("info","feng");
            request.getSession().setAttribute("hello","world");
            RequestDispatcher red = request.getRequestDispatcher("/redic.jsp");
            red.forward(request,response);
            //System.out.println("hello world!");
            //response.sendRedirect("haha.html");
        }
    }
    

    jsp

    <%--
      Created by IntelliJ IDEA.
      User: monster
      Date: 2019/1/27
      Time: 22:01
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <p>ww</p>
        <p><%= session.getAttribute("hello") %></p>
        <p><%= request.getAttribute("info") %></p>
        <h2>session属性:<%=session.getAttribute("name")%></h2>
        <h2>session属性:<%=session.getAttribute("info")%></h2>
    </body>
    </html>
    

    注意:
    getRequestDispatcher() 并不会实现url地址栏的变化 只是实现的请求的转发

    相关文章

      网友评论

          本文标题:后端框架学习--servlet (2)

          本文链接:https://www.haomeiwen.com/subject/ilinjqtx.html