• servlet和jsp学习总结


    一、servletConfig部分
    作用:
    ServletConfig 对象是Servlet的专属配置对象,每个Servlet都单独拥有一个ServletConfig对象,用来获取web.xml中的配置信息
    使用:
    获取ServletConfig对象
    获取web.xml中的Servlet的配置信息
    二、servletContext部分

    package com.hpu.cn;
    
    import java.io.IOException;
    import java.io.InputStream;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class servletContext extends HttpServlet {
    
    	/* ServletContext学习:
    	 *    问题:
    	 *       不同的用户使用相同的数据
    	 *    解决:
    	 *       ServletContext对象
    	 *    特点:
    	 *       服务器创建
    	 *       用户共享
    	 *    作用域:
    	 *       整个项目以内
    	 *    生命周期:
    	 *       服务器启动到关闭
    	 *    使用:
    	 *       //获取ServletContext对象
    		          //第一种方式
    		          ServletContext sc=this.getServletContext();
    		          //第二种方式
    		          ServletContext sc2=this.getServletConfig().getServletContext();
    		          //第三种方式
    		          ServletContext  sc3=req.getSession().getServletContext();
    	 *       使用ServletContext对象完成数据共享
    	 *           //数据存储
    	 *           sc.setAttribute(String key, Object value);
    	 *           //数据共享
    	 *           sc.getAttribute("str")返回为Object类型
    	 *           注意:
    	 *              不同的用户可以给ServletContext数据存储
    	 *              获取的数据不存在则返回null
    	 *       获取项目中的web.xml的配置信息
    	 *            sc.getInitParameter(String name);根据键的名称获取在web.xml中全局数据的值,返回String类型
    	 *                                             如果不存在返回null
    	 *            sc.getInitParameterNames(); 返回键名称的枚举
    	 *          配置方式:注意一组<context-param>标签只能存储一组键值对数据,多组声明多个标签
    	 *               <context-param>
                              <param-name>name</param-name>
                               <param-value>zhangsan</param-value>
                         </context-param> 
                                                    作用:将静态数据与代码解耦
                 //获取项目webroot下的资源的绝对路径                             
                       String path=sc.getRealPath("/doc/1.txt");
                                                             获取的路径为项目根目录。参数为项目根目录中的路径
                 //获取webroot下的资源的流对象 
                        InputStream resourceAsStream = sc.getResourceAsStream("/doc/1.txt"); 
                                                                 参数为项目根目录中的路径                                     
                                                               注意:
                                                                     此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类的加载器获取                                      
    	 * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    	 */
    	@Override
    	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           //获取ServletContext对象
    		   //第一种方式
    		   ServletContext sc=this.getServletContext();
    		   //第二种方式
    		   ServletContext sc2=this.getServletConfig().getServletContext();
    		   //第三种方式
    		   ServletContext  sc3=req.getSession().getServletContext();
    	   //使用ServletContext对象完成数据共享
    		   //数据存储
    		   sc.setAttribute("str", "servletcontext学习");
    	   //获取项目中web.xml的全局配置数据
    		   String name = sc.getInitParameter("name");
    		   System.out.println(name);
    	   //获取项目根目录下的资源的绝对路径
    		   String path=sc.getRealPath("/doc/1.txt");
    		   System.out.println(path);
    	   //获取项目根目录下资源的流对象
    		   InputStream resourceAsStream = sc.getResourceAsStream("/doc/1.txt");
    	}
    }
    
    

    三、session部分

    package com.hpu.Servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class SessionServlet extends HttpServlet {
    		/* (non-Javadoc)
    		 * 一个用户的不同请求处理,数据共享怎么办
    		 *  解决:使用Session
    		 *  特点:
    		 *      存储在服务器
    		 *      服务器进行创建
    		 *      依赖Cookie技术
    		 *      一次会话
    		 *      默认存储时间30分钟
    		 *  作用:
    		 *     解决了一个用户不同请求处理数据共享的问题
    		 *  使用:创建Session对象/获取session对象
    		 *      HttpSession hs=req.getSession();
    		 *     
    		 *          如果请求中拥有session标识符也就是JSESSIONID,则返回其对应的session对象
    		 *          如果请求中没有session的标识符也就是JSEESIONID,则创建新的session对象,并将其JSESSIONID作为Cookie数据存储到浏览器运存中
    		 *          如果session对象失效了,也会创建一个session对象,则......
    		 *      //设置session存储时间
    		 *      hs.setMaxInactiveInterval(int seconds); 
    		 *        // 在指定的时间内session对象没有使用则被销毁,如果使用重新计时
    		 *      //设置强制失效
    		 *      hs.invalidate();
    		 *      存储:hs.setAttribute(String key, Object value);
    		 *      获取:hs.getAttribute(String name);
    		 *      注意:
    		 *         存储的动作和取出的动作发生在不同请求中,但是存储要先于取出执行
    		 *      使用场景:
    		 *           一般用户在登陆web项目时候 会将个人信息存储到Session中,供该用户的其他请求使用
    		 *      总结:
    		 *      session解决了一个用户的不同请求数据共享问题,只要JSESSIONID和Session对象失效的情况下,用户的任意请求都能获取到同一个session
    		 *      作用域:
    		 *          一次会话
    		 *          在JSESSIONID不失效和Session不失效,作用域是整个项目 
    		 *      session失效处理:
    		 *            将用户请求中的JSESSIONID和后台获取的session对象的JSESSIONID进行对比
    		 *            如果一致,则session没有失效,如果不一致则证明session失效。重定向登陆页面,让用户登录
    		 *  注意:JSESSIONID存储在Cookie的临时存储空间中,浏览器关闭即失效
    		 * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    		 */
    		@Override
    		protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
               //设置请求编码格式
    			req.setCharacterEncoding("utf-8");
    		   //设置相应编码格式
    			resp.setContentType("text/html;charset=utf-8");
    		   //获取请求信息
    			    //创建session对象
    			    HttpSession hs=req.getSession();
    			    //设置session时间
    			    //hs.setMaxInactiveInterval(5);
    			    //设置强制失效
    			    //hs.invalidate();
    			    hs.setAttribute("key", "namessss");
    			     System.out.println(hs.getId());
    		   //处理请求信息
    			resp.getWriter().write("Session学习");
    		}
    }
    
    

    四、请求转发
    req.getRequestDispatcher(“要转发的地址”).forward(req, resp);
    转发地址:相对路径,直接书写servlet的别名即可
    特点:一次请求,浏览器地址栏信息不变,
    注意;请求转发后直接return
    五、重定向

    问题:使用请求转发,造成表单数据重复提交
    
    解决: 使用重定向
    
    使用:
           resp.sendRedirect("路径");
           本地路径为;uri
           网络路径为:定向资源的URL信息
    
    特点:
           两次请求,浏览器地址栏信息改变,两个request对象
    request作用域:
                         解决了一次请求内的servlet共享的问题
            
    重定向:
              解决了表单重复提交的问题,以及当前servlet无法处理的请求问题
    
    使用场景:
                 如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。
                 如果请求被Servlet接收后,无法进行处理,建议使用重定向到可以处理的
    

    六、Cookie部分

    package com.hpu.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class cookieServlet extends HttpServlet {
    
    	/* Cookie学习
    	 * 作用:解决了发送不同请求的数据共享问题
    	 * 使用:
    	 *      //创建cookie对象
    	 *      Cookie c =new Cookie(key, value);
    	 *      //设置有效期
    	 *      c.setMaxAge(int seconds);
    	 *      //设置有效路径
    	 *      c.setPath(String uri);
    	 *      //响应cookie给客户端
    	 *      resp.addCookie(c);
    	 *      //Cookie获取
    	 *       //获取Cokkie数据
    	 *       Cookie[] cookies=req.getCookies();
    	 *       //遍历数组获取Cookie信息
    	 *        使用for循环遍历即可
    	 *       			for(Cookie c:cookies){
    				String name=c.getName();
    				String value = c.getValue();
    				System.out.println(name+":"+value);
    			}
    	 *      
    	 * 注意:
    	 *     一个cookie只能存储一条数据,多条数据,可以创建几个Cookie存储
    	 * 特点:
    	 *     浏览器端的数据存储技术
    	 *     存储的数据声明在服务器端
    	 *     临时存储:存储在浏览器的运行内存中
    	 *     定时存储:设置了Cookie的有效期,存储在客户端的硬盘里,在有效期内符合路径的要求的请求都会附带该信息
    	 *     默认Cookie信息存储好之后,每次请求都会附带信息。除非设置有效路径
    	 * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    	 */
    	@Override
    	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//设置请求编码格式
    		req.setCharacterEncoding("utf-8");
    		//设置响应编码格式
    		resp.setContentType("text/html;charset=utf-8");
    		//获取请求结果
    		//处理请求结果
    		   //使用cookie进行浏览器端的数据存储
    			  //创建cookie对象
    		    Cookie c1 =new Cookie("mouse", "thinkpad");
    		    Cookie c2 =new Cookie("key", "hpu");
    		     //设置cookie
    		    c2.setMaxAge(3*24*3600);
    		    //设置有效路径
    		     c2.setPath("/cookie/abc");
    		     //响应cookie信息
    		    resp.addCookie(c1);
    		    resp.addCookie(c2);
    		     //直接响应
    		    resp.getWriter().write("Cookie学习");
    		   
    	}
    }
    

    七、JSP语法部分

       1、Jsp的三种注释
    		  前端语言注释
    		              会被转译,也会被发送,但是不会被浏览器执行
    		   java语言注释
    		              会被转译,但是不会被servlet执行
    		   Jsp注释
    		              不会被转译
    2、Jsp的page指令(多个属性之间用空格隔开):
        	<%@page 属性名="属性值" 属性名="属性值" 属性名="属性值"...%>
        	language:声明要被转移的语言
        	import :声明转译的java文件要导入的包,不同包之间用逗号隔开
        	pageEncoding:设置jsp文件的数据编码格式
        	contentType:设置jsp数据响应给浏览器时解析编码格式
        	session:设置要转译的servlet中是否开启session支持,默认开启,属性值为boolean类型
        	errorPage:设置jsp运行错误跳转的页面
        	extends:设置jsp转译的java文件要继承的父类(包名+类名)
                 作用:
                           配置文件转译相关参数 
    3、 jsp局部代码块  
    		       特点:
    		       	局部代码块中声明java代码会被原样转译到jsp对应的servlet文件的_JspService方法中
    		       	代码块中声明的变量都是局部变量
    		        使用:<%   %>
    		        缺点:书写麻烦,阅读困难  
    		        开发: 
    		             使用servlet进行逻辑处理,使用jsp进行页面展示
    4、 jsp的全局代码块
        		    特点:
        		           声明的java 代码作为全局代码转译到对应的servlet中
        		    使用:<%! %>
        		    注意:
        		       全局代码块中声明的代码,需要使用局部代码块调用
    5、 jsp的脚本段语句	
                    特点:帮助我们快速获取变量或者方法的返回值作为数据响应给浏览器
                    使用:<%=变量名或者方法%>	     
                    注意:不要在 变量名或者方法名后使用分号
                    使用位置:除jsp语法要求以外的任何位置。
    6、 Jsp静态引入和动态引入
    			 静态引入:
    			     <%@include file="要引入的jsp的相对路径" %>
    		         特点:
    			           会将引入的jsp文件和当前jsp文件转译成一个java文件使用。
    			            在网页中也就显示合并后的显示效果
    			     注意:
    			         静态引入的jsp文件不会转译java(servlet)文件
    			         当前文件和静态引入的jsp文件,不能够使用java代码块声明同名变量
    		     动态引入:
    		          <jsp:include page="要引入的jsp的相对路径"></jsp:include>
    			    特点:
    			          会将引入的jsp文件单独转译,在当前文件转好的Java文件中调用引入的jsp文件的转译文件
    			          在网页中显示合并后的效果
    			    注意:
    			          动态引入允许文件中声明同名变量
    	      优点:
    	               减少代码冗余
    7、 jsp的转发标签 forward:
    	               使用:
    	                    <jsp:forward page="要引入的jsp的相对路径"></jsp:forward>
    	               特点:
    	                   一次请求
    	                   地址栏url不变
    	               注意:
    	                   在转发标签的两个标签中间除了写<jsp:param value="str" name="aaa"/>子标签不会报错,name为key,value为value
    	                   其他任意字符都会报错   
    8、 jsp的九大内置对象:
    	               内置对象:
    	               jsp文件在转译对应的servlet文件的时候自动生成的并声明的对象。我们jsp页面可以直接使用
    	                              注意:
    	                                  内置对象在jsp页面中通过使用,使用局部代码块或者脚本语句来使用,不能在全局在全局代码块中使用        
    	                              内容:  
    	              pageContext:页面上下文对象,封存了其他内置对象。封存了jsp运行信息
    	                          注意:每个jsp文件单独拥有一个pageContext对象
    	                          作用域:当前页面                                                 
    	              request:封存当前请求数据的对象。由tomcat服务器创建,一次请求
    	              session:此对象用来存储用户的不同请求的共享数据,一次会话
    	              application:也就是ServletContext对象,一个项目只有一个。存储用户共享数据的对象,以及完成其他操作。项目内
    	              response:响应对象,用来响应请求处理结果给浏览器对象。设置响应头,重定向。
    	              out:响应对象,Jsp内部使用,带有缓冲区的响应对象,效率高于response对象
    	              page:代表当前Jsp的对象,相当于Java中的this
    	              exception:异常对象,存储当前运行的异常信息
    	                                                                        注意:使用此对象需要在page指定中使用属性isErrorPage="true"开启。                                                                        	                                      
    	              config:也就是servletConfig,主要用来获取web.xml中的配置数据,完成初始化对象的读取
    9、 四个作用域对象:
    			      pageContext:当前页面,解决了当前页面内的数据共享。获取其他内置对象
    			      request: 一次请求。一次请求的servlet的数据共享。通过请求转发流转给下一个servlet
    			      session:一次会话。一个用户的不同请求的数据共享。将数据从一次请求流转给其他请求
    			      application:项目内,不同用户数据共享问题 。将数据流转流转给其他用户。
    			                  作用:
    					  数据流转     
    10、jsp文件路径:
    		     在jsp中的资源路径可以使用相对路径,完成跳转,但是:
    		              问题一:资源的位置不可以随意更改
    		              问题二:需要使用../进行文件夹的跳转,但是比较麻烦       
    		     使用绝对路径:
    		         /虚拟项目名/项目资源路径
    		               例如<a href="/jspDemo/a/a.jsp"></a>
    		                注意:
    		                       在jsp中资源的第一个/表示服务器的根目录,相当于:localhost:8080
    		 使用jsp全局路径声明:
    					 <%
    					 String path = request.getContextPath();
    					 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    					 %>
    		             <base href="<%=basePath%>">
    		               作用:
    		                     给资源前面加项目名称。http://127.0.0.1:8888/虚拟项目名/
    
  • 相关阅读:
    QT移植详解
    如何构建Qt4.7.0嵌入式开发环境
    Qt触摸屏、键盘的驱动[转]
    【详解】如何编写Linux下Nand Flash驱动
    QT安装 -->Error: register or shift expression expected -- `orr r3,r2,lsl#16'
    QT环境搭建常见的bug解决 -->ld: cannot find –lbootstrap 错误
    SDK支付流程
    IOS与Unity交互
    Android
    [转]个人对AutoResetEvent和ManualResetEvent的理解
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752279.html
Copyright © 2020-2023  润新知