• Servlet 相关


    java语言编写动态资源的开发技术,普通的java类

    转发与重定向的区别

    • 转发Forward在服务器端完成的;重定向redirection是在客户端完成的
    • 转发的是同一次请求;重定向是两次不同请求
    • 重定向不能保存数据在request域中,转发可以
    • 转发地址栏没有变化;重定向地址栏有变化
    • 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

    加载资源文件路径

    "."代表tomcat/bin目录,不能再web项目中使用

    Servlet线程

    1. 单例多线程
      tomcat实例化一个servlet类,为每个用户开启一个线程处理请求
    2. 线程安全问题
      多个用户访问Servlet的共享数据(成员变量),可能会产生线程安全问题
      解决:使用共享数据时加锁
    3. 实现单线程模式
      <%@ page isThreadSafe=”false”%> 默认值为true
      https://blog.csdn.net/john2522/article/details/7467983

    Servlet开发步骤

    1. 编写Servlet类
      继承HttpServlet类,重写doGet() doPost()方法
    2. 编译servlet字节码
      存放在tomcat的一个web应用中的WEB-INF/classes目录下
    3. 配置一个servlet web.xml中
    	<servlet>
    		<!-- servlet的内部名称 ,可以自定义-->
    		<servlet-name>HelloServlet</servlet-name>
    		<!-- servlet类名: 包名+简单类名-->
    		<servlet-class>gz.itcast.d_servlet.HelloServlet</servlet-class>
    	</servlet>
    	<servlet-mapping>
    		<!-- servlet的内部名称,和上面的名称保持一致!!!-->
    		<servlet-name>HelloServlet</servlet-name>
    		<!-- servlet的访问名称: /名称 -->
    		<url-pattern>/hello</url-pattern>
    	</servlet-mapping>
    
    1. 访问
      启动tomcat,访问http://localhost:8080/myweb/hello

    servlet生命周期

    1. 加载Servlet
      当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例【构造器】
    2. 初始化
      当Servlet被实例化后,Tomcat会调用【init()】方法初始化这个对象
    3. 处理服务
      当浏览器访问Servlet的时候,Servlet 会调用【service()】方法处理请求
    4. 销毁
      当Tomcat关闭时或者检测到Servlet要从Tomcat删除的时候会自动调用【destroy()】方法,让该实例释放掉所占的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁

    简单总结
    只要访问Servlet,service()就会被调用。
    init()只有第一次访问Servlet的时候才会被调用。
    destroy()只有在Tomcat关闭的时候才会被调用。

    servlet的自动加载

    默认是第一次访问时加载,改变servlet的加载时机可以提前到加载web应用时创建
    配置servlet时添加<load-on-startup>1</load-on-startup>,tomcat启动时会加载此类,越小优先级越高

    HttpServletRequest

    请求行

    request.getMethod();   请求方式
    request.getRequetURI()   / request.getRequetURL()   请求资源
    request.getProtocol()   请求http协议版本
    

    请求头

    request.getHeader("名称")  	根据请求头获取请求值
    request.getHeaderNames()    	获取所有的请求头名称
    **实体内容**
    ```java
    request.getInputStream()   	获取实体内容数据
    

    获取请求参数

    request.getParamerter(参数名):	获取一个值的参数
    request.getParamerterValue(参数名):获取多个值的同名参数,如select元素值
    request.getParamerterNames():	获取所有参数名称列表
    

    设置请求参数的编码格式

    request.setCharacterEncoding("utf-8");	//只对POST方式提交的数据有效
    

    HttpServletResponse

    响应行

    response.setStatus(404)  设置状态码
    

    响应头

    response.setHeader("name","value")  设置响应头
    

    实体内容

    response.getWriter().writer();   响应二进制数据
    response.getOutputStream().writer()  响应字符数据
    

    设置响应类型和内容编码 如果未指定字符集,则将使用ISO-8859-1
    response.setContentType("text/html;charset=UTF-8")

    以流的方式响应

    response.setContentType("text/html; charset=UTF-8");
    PrintWriter pw = response.getWriter();
    pw.close();
    

    重定向
    response.sendRedirect("www.baidu.com");
    转发
    request.getRequestDispatcher("/student_list").forward(request, response);

    ServletConfig对象

    初始化参数配置

    <servlet>
    <servlet-name/>
    <servlet-class/>
    <init-param>
    	<param-name>name</param-name>
    	<param-value>xyg</param-value>
    </init-param>
    </servlet>
    

    创建
    tomcat启动web应用封装这些配置信息到servletconfig对象中,调用init()时传入servletconfig对象
    获取
    this.getServletConfig().getInitParameter("name");//获取配置信息

    ServletContext对象

    servlet的上下文对象,表示当前web应用环境,一个web应用中只有一个servletContext对象

    获取
    this.getServletConfig().getServletContext();//通过配置对象获取上下文对象
    方法

    servletContext.getContextPath();	//获取部署的项目名
    servletContext.getInitParameter("name");	//获取web应用初始化参数(全局)
    servletContext.getRequestDispatcher("/get").forward(request,response);	//转发
    

    Session

    session的主要信息存在于服务器,在客户端只存放一个sessionid(基于cookie的),每次请求,客户端都会自动把sessionid发送到服务端去,服务端根据sessionid去session里获取信息

    session获取和删除

    Person person =(Person)session.getAttribute("person");   // 获取登录的person
    session.removeAttribute("person");                       // 移出登录的person
    

    Cookie保存于客户端

    添加Cookie值

        public static void addCookie(HttpServletResponse response, String name,
                                     String value, int maxAge) {
            try {
                Cookie cookie = new Cookie(name, value);
                if (maxAge > 0)
                    cookie.setMaxAge(maxAge);
                cookie.setPath("/");
                response.addCookie(cookie);
            } catch (Exception ex) {
                ex.printStackTrace();
    
            }
        }
    

    获取Cookie值

        public static String findCookieByName(HttpServletRequest request,
                                              String name) {
            Cookie[] cookies = request.getCookies();
            if (null == cookies || cookies.length == 0) return null;
            String string = null;
            try {
                for (int i = 0; i < cookies.length; i++) {
                    Cookie cookie = cookies[i];
                    String cname = cookie.getName();
                    if (!StringUtils.isBlank(cname) && cname.equals(name)) {
                        string = cookie.getValue();
                    }
    
                }
            } catch (Exception ex) {
                ex.printStackTrace();
    
            }
            return string;
        }
    

    晴空指定Cookie

        public static boolean clearCookie(HttpServletRequest request,
                                          HttpServletResponse response, String name, String domain) {
            boolean bool = false;
            Cookie[] cookies = request.getCookies();
            if (null == cookies || cookies.length == 0) return bool;
            try {
                for (int i = 0; i < cookies.length; i++) {
                    Cookie cookie = new Cookie(name, null);
                    cookie.setMaxAge(0);
                    cookie.setPath("/");// 根据你创建cookie的路径进行填写
                    cookie.setDomain(domain);
                    response.addCookie(cookie);
                    bool = true;
                }
            } catch (Exception ex) {
                ex.printStackTrace();
    
            }
            return bool;
        }
    
  • 相关阅读:
    php网站请求返回结果被加入恶意代码片段
    php tp5 的index.php 被改成首页静态页面内容
    gitee https 方式每次都要输入密码的解决
    linux 下 php执行 exec 无反应 返回值为空
    layerconfirm 右上角关闭事件等于按钮2
    微信小程序公共方法创建与调用
    php curl 转为 x-www-form-urlencoded 方式
    php 加载 zip 文件
    小程序语音播报
    mysql命令行操作-将查询结果导出到文件
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/13934572.html
Copyright © 2020-2023  润新知