zoukankan      html  css  js  c++  java
  • java web--JSP(3)

                                                                                     JSP (3)

                11. 和属性相关的方法:

                         1). 方法

                                 void setAttribute(String name, Object o): 设置属性
                                 Object getAttribute(String name): 获取指定的属性

                                 Enumeration getAttributeNames(): 获取所有的属性的名字组成的 Enumeration 对象
                                 removeAttribute(String name): 移除指定的属性

                        2). pageContext, request, session, application 对象都有这些方法!
                                 这四个对象也称之为域对象.

                                    pageContext: 属性的作用范围仅限于当前 JSP 页面
                                   request: 属性的作用范围仅限于同一个请求.
                                   session: 属性的作用范围限于一次会话: 浏览器打开直到关闭称之为一次会话(在此期间会话不失效)
                                  application: 属性的作用范围限于当前 WEB 应用. 是范围最大的属性作用范围, 只要在一处设置属性, 在其他各处的 JSP 或 Servlet 中
                                     都可以获取到.

                12. JSP:

                         1). WHY:

                                     JSP 是简 Servlet 编写的一种技术, 它将 Java 代码和 HTML 语句混合在同一个文件中编写,
                                    只对网页中的要动态产生的内容采用 Java 代码来编写,而对固定不变的静态内容采用普通静态 HTML 页面的方式编写。

                         2). Java Server Page: Java 服务器端网页. 在 HTML 页面中编写 Java 代码的页面.

                         3). helloworld:

                                   新建一个 JSP 页面, 在 body 节点内的 <% %> 即可编写 Java 代码.

                                <body>

                                                   <%
                                                              Date date = new Date();
                                                             System.out.print(date);
                                                 %>

                              </body>

                        4). JSP 可以放置在 WEB 应用程序中的除了 WEB-INF 及其子目录外的其他任何目录中,
                                 JSP 页面的访问路径与普通 HTML 页面的访问路径形式也完全一样。

                        5). JSP的运行原理: JSP 本质上是一个 Servlet.

                               每个JSP 页面在第一次被访问时, JSP 引擎将它翻译成一个 Servlet 源程序, 接着再把这个 Servlet 源程序编译成 Servlet 的 class 类文件.
                              然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。

                        6). JSP 页面的隐含变量: 没有声明就可以使用的对象. JSP页面一共有 9 个隐含对象.

                          public void _jspService(HttpServletRequest request, HttpServletResponse response)
                                  throws java.io.IOException, ServletException {

                                     PageContext pageContext = null;
                                     HttpSession session = null;
                                     ServletContext application = null;
                                     ServletConfig config = null;
                                    JspWriter out = null;
                                    Object page = this;

                        //使用 <% %> 编写的代码在此位置. 可以用到 request, response, pageContext, session
                          //application, config, out, page 这 8 个隐含对象. (实际上还可以使用一个叫 exception 的隐含对象
                            }

                                      ①. request:  HttpServletRequest 的一个对象. *
                                      ②. response:  HttpServletResponse 的一个对象(在 JSP 页面中几乎不会调用 response 的任何方法.)

                                      ③. pageContext: 页面的上下文, 是 PageContext 的一个对象. 可以从该对象中获取到其他 8 个隐含对象. 也可以从中获取到当前
                                                 页面的其他信息. (学习自定义标签时使用它) *
                                      ④. session: 代表浏览器和服务器的一次会话, 是 HttpSession 的一个对象. 后面详细学习. *

                                      ⑤. application: 代表当前 WEB 应用. 是 ServletContext 对象. *
                                      ⑥. config: 当前 JSP 对应的 Servlet 的 ServletConfig 对象(几乎不使用). 若需要访问当前 JSP 配置的初始化参数,
                                                      需要通过映射的地址才可以.

                                                       映射 JSP:

                                                               <servlet>
                                                                        <servlet-name>hellojsp</servlet-name>
                                                                        <jsp-file>/hello.jsp</jsp-file>
                                                                       <init-param>
                                                                             <param-name>test</param-name>
                                                                             <param-value>testValue</param-value>
                                                                        </init-param>
                                                               </servlet>
                                                               <servlet-mapping>
                                                                       <servlet-name>hellojsp</servlet-name>
                                                                       <url-pattern>/hellojsp</url-pattern>
                                                                 </servlet-mapping>

                                             ⑦. out: JspWriter 对象. 调用 out.println() 可以直接把字符串打印到浏览器上. *
                                             ⑧. page: 指向当前 JSP 对应的 Servlet 对象的引用, 但为 Object 类型, 只能调用 Object 类的方法(几乎不使用)

                                             ⑨. exception: 在声明了 page 指令的 isErrorPage="true" 时, 才可以使用. *

                                         <%@ page isErrorPage="true" %>

                                                              pageContext, request, session, application(对属性的作用域的范围从小到大)
                                                              out, response, config, page 、 exception
                          6). JSP模版元素: JSP页面中的静态HTML内容称

                          7). JSP表达式(expression)提供了将一个 java 变量或表达式的计算结果输出到客户端的简化方式,
                                      它将要输出的变量或表达式直接封装在<%= 和 %>之中。

                                            <%
                                                 Date date = new Date();
                                                 out.print(date);
                                          %>

                                        <%= date %>

                          8). JSP脚本片断(scriptlet)是指嵌套在<% 和 %>之中的一条或多条Java程序代码。
                                     多个脚本片断中的代码可以相互访问

                                                  <%
                                                       String ageStr = request.getParameter("age");
                                                       Integer age = Integer.parseInt(ageStr);
                                                       if(age >= 18){
                                                %>
                                                        成人...
                                               <%
                                                         }else{
                                               %>
                                                        未成人...
                                               <%
                                                                 }
                                                 %>

                              9). JSP 声明: JSP 声明将 Java 代码封装在<%!和 %>之中,它里面的代码将被插入进 Servle t的 _jspService 方法的外面
                                          (在 JSP 页面中几乎从不这样使用)

                            10). JSP注释的格式:<%-- JSP 注释 --%> <!-- HTML 注释 -->
                                   区别: JSP 注释可以阻止 Java 代码的执行.

                      13 请求的转发和重定向:

                             1). 本质 区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求.

                                   具体:

                                        ①.  请求的转发: 地址栏是初次发出请求的地址.
                                              请求的重定向: 地址栏不再是初次发出的请求地址. 地址栏为最后响应的那个地址
                                        ②. 请求转发: 在最终的 Servlet 中, request 对象和中转的那个 request 是同一个对象.
                                              请求的重定向: 在最终的 Servlet 中, request 对象和中转的那个 request 不是同一个对象.
                                        ③. 请求的转发: 只能转发给当前 WEB 应用的的资源
                                              请求的重定向: 可以重定向到任何资源.
                                        ④. 请求的转发: / 代表的是当前 WEB 应用的根目录
                                              请求的重定向: / 代表的是当前 WEB 站点的根目录.

                    14. HttpServlet:

                                      1). 是一个 Servlet, 继承自 GenericServlet. 针对于 HTTP 协议所定制.

                                      2). 在 service() 方法中直接把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse.
                                           并调用了重载的 service(HttpServletRequest, HttpServletResponse)

                                           在 service(HttpServletRequest, HttpServletResponse) 获取了请求方式: request.getMethod(). 根据请求方式有创建了
                                                      doXxx() 方法(xxx 为具体的请求方式, 比如 doGet, doPost)

                                                   @Override
                                 public void service(ServletRequest req, ServletResponse res)
                                                                         throws ServletException, IOException {

                                              HttpServletRequest request;
                                              HttpServletResponse response;

                                       try {
                                                  request = (HttpServletRequest) req;
                                                  response = (HttpServletResponse) res;
                                        } catch (ClassCastException e) {
                                                throw new ServletException("non-HTTP request or response");
                                         }
                                             service(request, response);
                                         }

                                   public void service(HttpServletRequest request, HttpServletResponse response)
                                                throws ServletException, IOException {
                                        //1. 获取请求方式.
                                    String method = request.getMethod();
                                      //2. 根据请求方式再调用对应的处理方法
                                       if("GET".equalsIgnoreCase(method)){
                                            doGet(request, response);
                                        }else if("POST".equalsIgnoreCase(method)){
                                           doPost(request, response);
                                         }
                                     }

                                    public void doPost(HttpServletRequest request, HttpServletResponse response)
                                                                                                      throws ServletException, IOException{
                                  // TODO Auto-generated method stub
                                     }

                               public void doGet(HttpServletRequest request, HttpServletResponse response)
                                                                                                   throws ServletException, IOException {
                                 // TODO Auto-generated method stub
                                   }

                          3). 实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可.

                          4). 好处: 直接由针对性的覆盖 doXxx() 方法; 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转.

                  15. GenericServlet:

                          1). 是一个 Serlvet. 是 Servlet 接口和 ServletConfig 接口的实现类. 但是一个抽象类. 其中的 service 方法为抽象方法

                          2). 如果新建的 Servlet 程序直接继承 GenericSerlvet 会使开发更简洁.

                          3). 具体实现:

                                   ①. 在 GenericServlet 中声明了一个 SerlvetConfig 类型的成员变量, 在 init(ServletConfig) 方法中对其进行了初始化
                                   ②. 利用 servletConfig 成员变量的方法实现了 ServletConfig 接口的方法
                                   ③. 还定义了一个 init() 方法, 在 init(SerlvetConfig) 方法中对其进行调用, 子类可以直接覆盖 init() 在其中实现对 Servlet 的初始化.
                                   ④. 不建议直接覆盖 init(ServletConfig), 因为如果忘记编写 super.init(config); 而还是用了 SerlvetConfig 接口的方法,
                                         则会出现空指针异常.
                                  ⑤. 新建的 init(){} 并非 Serlvet 的生命周期方法. 而 init(ServletConfig) 是生命周期相关的方法.

                                       public abstract class GenericServlet implements Servlet, ServletConfig {

                                         /** 以下方法为 Servlet 接口的方法 **/

                                        @Override
                                        public void destroy() {}

                                       @Override
                                        public ServletConfig getServletConfig() {
                                                      return servletConfig;
                                         }

                                       @Override
                                       public String getServletInfo() {
                                                      return null;
                                        }

                                       private ServletConfig servletConfig;
                                       @Override
                                       public void init(ServletConfig arg0) throws ServletException {
                                                    this.servletConfig = arg0;
                                                     init();
                                         }

                                        public void init() throws ServletException{}

                                      @Override
                                        public abstract void service(ServletRequest arg0, ServletResponse arg1)
                                           throws ServletException, IOException;

                                            /** 以下方法为 ServletConfig 接口的方法 **/
                                      @Override
                                          public String getInitParameter(String arg0) {
                                              return servletConfig.getInitParameter(arg0);
                                           }

                                     @Override
                                           public Enumeration getInitParameterNames() {
                                             return servletConfig.getInitParameterNames();
                                          }

                                     @Override
                                          public ServletContext getServletContext() {
                                              return servletConfig.getServletContext();
                                          }

                                      @Override

                                        public String getServletName() {
                                          return servletConfig.getServletName();
                                          } 

                                         }

     16.代码区

    package com.atguigu.javaweb;
    
    import java.io.IOException;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ForwardServlet extends HttpServlet {
        
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("ForwardServlet's doGet");
            
            request.setAttribute("name", "abcde");
            System.out.println("ForwardServlet's name: " + request.getAttribute("name"));
            
            //请求的转发.
            //1. 调用 HttpServletRequest 的 getRequestDispatcher() 方法获取  RequestDispatcher 对象
            //调用 getRequestDispatcher() 需要传入要转发的地址
            String path = "testServlet";
            RequestDispatcher requestDispatcher = request.getRequestDispatcher("/" + path);
            
            //2. 调用 HttpServletRequest 的 forward(request, response) 进行请求的转发. 
            requestDispatcher.forward(request, response); 
        }
    
    }
    ForwardServlet
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.GenericServlet;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    
    public class LoginServlet extends GenericServlet {
    
        //对当前的 Servlet 进行初始化: 覆盖 init 方法
        @Override
        public void init(javax.servlet.ServletConfig config) throws ServletException {
            super.init(config);
        }
        
        @Override
        public void service(ServletRequest request, ServletResponse response)
                throws ServletException, IOException {
            
            //获取请求方式是 GET 还是 POST
            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            String method = httpServletRequest.getMethod();
            System.out.println(method); 
            
            //1. 获取请求参数: username, password
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            
            //2. 获取当前 WEB 应用的初始化参数: user, password.
            //需要使用 ServletContext 对象. 
            String initUser = getServletContext().getInitParameter("user");
            String initPassword = getServletContext().getInitParameter("password");
    
            PrintWriter out = response.getWriter();
            
            //3. 比对
            //4. 打印响应字符串. 
            if(initUser.equals(username) && initPassword.equals(password)){
                out.print("Hello: " + username);
            }else{
                out.print("Sorry: " + username);
            }
            
            
        }
    
    }
    LoginServlet
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LoginServlet2 extends HttpServlet {
        /**
         * 
         */
        private static final long serialVersionUID = 1L; 
    
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response) 
                throws IOException {
    
            // 获取请求方式是 GET 还是 POST
            String method = request.getMethod();
            System.out.println(method);
    
            // 1. 获取请求参数: username, password
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            // 2. 获取当前 WEB 应用的初始化参数: user, password.
            // 需要使用 ServletContext 对象.
            String initUser = getServletContext().getInitParameter("user");
            String initPassword = getServletContext().getInitParameter("password");
    
            PrintWriter out = response.getWriter();
    
            // 3. 比对
            // 4. 打印响应字符串.
            if (initUser.equals(username) && initPassword.equals(password)) {
                out.print("Hello: " + username);
            } else {
                out.print("Sorry: " + username);
            }
    
        }
    
    }
    LoginServlet2
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LoginServlet3 extends HttpServlet{
        
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            
            Connection connection = null;
            PreparedStatement statement = null;
            ResultSet resultSet = null;
            
            PrintWriter out = resp.getWriter();
            
            try {
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql:///atguigu";
                String user = "root";
                String password2 = "1230";
                connection = DriverManager.getConnection(url, user, password2);
                
                String sql = "SELECT count(id) FROM users WHERE username = ? " +
                        "AND password = ?";
                
                statement = connection.prepareStatement(sql);
                statement.setString(1, username);
                statement.setString(2, password);
                
                resultSet = statement.executeQuery();
    
                StringBuilder result = new StringBuilder();
                result.append("<html>")
                      .append(" <head>")
                      .append(" </head>") 
                      .append("</html>");
                
                if(resultSet.next()){
                    int count = resultSet.getInt(1);
                    
                    if(count > 0){
                        out.print(result.toString());
                        
                    }else{
                        out.print("Sorry: " + username);
                    }
                }
                
                
            } catch (Exception e) {
                e.printStackTrace();
            } finally{
                try {
                    if(resultSet != null){
                        resultSet.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
    
                try {
                    if(statement != null){
                        statement.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                try {
                    if(connection != null){
                        connection.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
            }
            
            
            
        }
    
    }
    LoginServlet3
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import java.util.Enumeration;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    /**
     * 自定义的一个 Servlet 接口的实现类: 让开发的任何 Servlet 都继承该类. 以简化开发
     */
    public abstract class MyGenericServlet implements Servlet, ServletConfig {
    
        /** 以下方法为 Servlet 接口的方法 **/
        @Override
        public void destroy() {}
    
        @Override
        public ServletConfig getServletConfig() {
            return servletConfig;
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        private ServletConfig servletConfig;
        
        @Override
        public void init(ServletConfig arg0) throws ServletException {
            this.servletConfig = arg0;
            init();
        }
    
        public void init() throws ServletException{}
    
        @Override
        public abstract void service(ServletRequest arg0, ServletResponse arg1)
                throws ServletException, IOException;
    
        /** 以下方法为 ServletConfig 接口的方法 **/
        @Override
        public String getInitParameter(String arg0) {
            return servletConfig.getInitParameter(arg0);
        }
    
        @Override
        public Enumeration getInitParameterNames() {
            return servletConfig.getInitParameterNames();
        }
    
        @Override
        public ServletContext getServletContext() {
            return servletConfig.getServletContext();
        }
    
        @Override
        public String getServletName() {
            return servletConfig.getServletName();
        }
    
    }
    MyGenericServlet
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 针对于 HTTP 协议定义的一个 Servlet 基类
     */
    public class MyHttpServlet extends MyGenericServlet {
    
        @Override
        public void service(ServletRequest arg0, ServletResponse arg1)
                throws ServletException, IOException {
            
            if(arg0 instanceof HttpServletRequest){
                HttpServletRequest request = (HttpServletRequest)arg0;
                
                if(arg1 instanceof HttpServletResponse){
                    HttpServletResponse response = (HttpServletResponse)arg1;
                    
                    service(request, response);
                }
            }
            
        }
        
        public void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //1. 获取请求方式.
            String method = request.getMethod();
            
            //2. 根据请求方式再调用对应的处理方法
            if("GET".equalsIgnoreCase(method)){
                doGet(request, response);
            }else if("POST".equalsIgnoreCase(method)){
                doPost(request, response);
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException{
            // TODO Auto-generated method stub
            
        }
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            
        }
    
    
    }
    MyHttpServlet
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class RedirectServlet extends HttpServlet {
        
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("RedirectServlet's doGet");
            
            request.setAttribute("name", "xyzmn");
            System.out.println("RedirectServlet's name: " + request.getAttribute("name"));
            
            
            //执行请求的重定向, 直接调用 response.sendRedirect(path) 方法,
            //path 为要重定向的地址
            String path = "testServlet";
            response.sendRedirect(path);
        }
    
    }
    RedirectServlet
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class TestAttr
     */
    public class TestAttr extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            PrintWriter out = response.getWriter();
            
            //1. 在 Servlet 中无法得到 pageContext 对象
            
            //2. request
            Object requestAttr = request.getAttribute("requestAttr");
            out.print("requestAttr: " + requestAttr);
            out.print("<br><br>");
            
            //3. session
            Object sessionAttr = request.getSession().getAttribute("sessionAttr");
            out.print("sessionAttr: " + sessionAttr);
            out.print("<br><br>");
            
            //4. application
            Object applicationAttr = getServletContext().getAttribute("applicationAttr");
            out.print("applicationAttr: " + applicationAttr);
            out.print("<br><br>");
                    
        }
    
    }
    TestAttr
    package com.atguigu.javaweb;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class TestServlet extends HttpServlet {
        
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("TestServlet's doGet 方法. ");
            
            System.out.println("TestServlet's name: " + request.getAttribute("name"));
            
        }
    
    }
    TestServlet
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      
      <context-param>
        <param-name>user</param-name>
        <param-value>atguigu</param-value>
      </context-param>
      <context-param>
        <param-name>password</param-name>
        <param-value>123567</param-value>
      </context-param>
      
      <servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>com.atguigu.javaweb.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
      </servlet-mapping>
      
      <servlet>
        <description></description>
        <display-name>ForwardServlet</display-name>
        <servlet-name>ForwardServlet</servlet-name>
        <servlet-class>com.atguigu.javaweb.ForwardServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>ForwardServlet</servlet-name>
        <url-pattern>/forwardServlet</url-pattern>
      </servlet-mapping>
      
      <servlet>
        <description></description>
        <display-name>TestServlet</display-name>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.atguigu.javaweb.TestServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/testServlet</url-pattern>
      </servlet-mapping>
      
      <servlet>
        <description></description>
        <display-name>RedirectServlet</display-name>
        <servlet-name>RedirectServlet</servlet-name>
        <servlet-class>com.atguigu.javaweb.RedirectServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>RedirectServlet</servlet-name>
        <url-pattern>/redirectServlet</url-pattern>
      </servlet-mapping>
      
      <servlet>
        <servlet-name>hellojsp</servlet-name>
        <jsp-file>/hello.jsp</jsp-file>
        <init-param>
          <param-name>test</param-name>
          <param-value>testValue</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>hellojsp</servlet-name>
        <url-pattern>/hellojsp</url-pattern>
      </servlet-mapping>
        
      <servlet>
        <description></description>
        <display-name>TestAttr</display-name>
        <servlet-name>TestAttr</servlet-name>
        <servlet-class>com.atguigu.javaweb.TestAttr</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>TestAttr</servlet-name>
        <url-pattern>/testAttr</url-pattern>
      </servlet-mapping>
      
    </web-app>
    web.xml
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>    
        <h4>AAA PAGE</h4>    
        <a href="b.jsp">TO B PAGE</a>    
    </body>
    </html>
    a.jsp
    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        
        <% 
            pageContext.setAttribute("pageContextAttr", "pageContextValue");
            request.setAttribute("requestAttr", "requestValue");
            session.setAttribute("sessionAttr", "sessionValue");
            application.setAttribute("applicationAttr", "applicationValue");
        %>
        
        <h2>Attr 111 Page: <%= new Date() %></h2>
        
        <br><br>
        pageContextAttr: <%= pageContext.getAttribute("pageContextAttr") %>
        
        <br><br>
        requestAttr: <%= request.getAttribute("requestAttr") %>
    
        <br><br>
        sessionAttr: <%= session.getAttribute("sessionAttr") %>    
        
        <br><br>
        applicationAttr: <%= application.getAttribute("applicationAttr") %>
        
        <br><br>
        <a href="attr_2.jsp">To Attr2 Page</a>
    
        <br><br>
        <a href="testAttr">To Attr Servlet</a>
        
        <% 
            request.getRequestDispatcher("/attr_2.jsp").forward(request, response);
        %>
            
        
    </body>
    </html>
    attr_1.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.Date"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        
        <h2>Attr 222 Page: <%= new Date() %></h2>
        
        <br><br>
        pageContextAttr: <%= pageContext.getAttribute("pageContextAttr") %>
        
        <br><br>
        requestAttr: <%= request.getAttribute("requestAttr") %>
    
        <br><br>
        sessionAttr: <%= session.getAttribute("sessionAttr") %>    
        
        <br><br>
        applicationAttr: <%= application.getAttribute("applicationAttr") %>
        
    </body>
    </html>
    attr_2.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <h4>BBB PAGE</h4>
        
        <% 
            //1. 请求转发的代码:
            //request.getRequestDispatcher("/c.jsp").forward(request, response);
            //request.getRequestDispatcher("http://www.atguigu.com").forward(request, response);
        
            //2. 请求的重定向
            response.sendRedirect(request.getContextPath()+"/c.jsp");
            //response.sendRedirect("http://www.atguigu.com");
        %>
        
    </body>
    </html>
    b.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <h4>CCC PAGE</h4>
    
    </body>
    </html>
    c.jsp
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ page isErrorPage="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        
        
        
    </body>
    </html>
    error.jsp
    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    
        <% 
            Date date = new Date();
            //System.out.print("-->" + date); 
        %>
        
        <% 
            String str = date.toString();    
            //没有声明就可以使用的对象
            String name = request.getParameter("name");
            System.out.println(name);
            
            //
            System.out.println(response instanceof HttpServletResponse);
            
            ServletRequest req = pageContext.getRequest();
            System.out.print(req == request); 
            
            System.out.println(session.getId());
            
            System.out.println(application.getInitParameter("password"));
            
            System.out.println(config.getInitParameter("test"));
            
            out.println(request.getParameter("name")); 
            out.println("<br><br>");
            out.println(application.getInitParameter("password"));
            out.println("<br><br>");
            out.println(this);
            out.println("<br><br>");
            out.println(page);
            
        /*null
    true
    true50F1C99C85D6821D43A1CA2DC23787E4
    123567
    null
    */    
        %>
    
    </body>
    </html>
    hello.jsp
    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        
        <% 
            Date date = new Date();
            out.print(date);
        %>
        
        <br><br>
        
        <!-- JSP 表达式 -->
        <%= date %>
        
        <% 
            String ageStr = request.getParameter("age");
            Integer age = Integer.parseInt(ageStr);
            
            if(age >= 18){
        %>
                成人...
        <%
            }else{
        %>
                未成人...
        <%
            }
        %>
        
        <%! 
            void test(){}
        %>
        
        <%-- JSP 注释 --%><!-- HTML 注释 -->
        
        <!-- 
        <% 
            System.out.println("打印信息...");
        %>
        -->
        
    </body>
    </html>
    hello2.jsp
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        
        <form action="loginServlet" method="post">
            
            user: <input type="text" name="username"/>
            password: <input type="password" name="password"/>
            
            <input type="submit" value="Submit"/>
        
        </form>
        
    </body>
    </html>
    login.html
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        
        <a href="loginServlet">Test</a>
        
        <br><br>
        
        <a href="forwardServlet">Forward</a>
        
        <br><br>
        
        <a href="redirectServlet">Redirect</a>
    </body>
    </html>
    test.html
  • 相关阅读:
    UML系列图--用例图
    扩展方法
    POJ3254 Corn Fields(状压DP)
    POJ2836 Rectangular Covering(状压DP)
    POJ2817 WordStack(状压DP)
    POJ2441 Arrange the Bulls(状压DP)
    HDU2167 Pebbles(状压DP)
    HDU1561 The more, The Better(树形DP)
    POJ3659 Cell Phone Network(树上最小支配集:树型DP)
    UVa10917 A Walk Through the Forest(SPFA+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/ou-pc/p/8150687.html
Copyright © 2011-2022 走看看