zoukankan      html  css  js  c++  java
  • JAVA框架-Servlet中()

    httpservlet其他api

    servletconfig 用法

    可以得到servlet标签中配置的信息
    第一步 在web.xml中书写配置数据,添加<init-param>字段

      <servlet>
        <servlet-name> serveletConfigDemon </servlet-name>
        <servlet-class> servlet.ServeletConfigDemon</servlet-class>
        <load-on-startup> 2 </load-on-startup>
          
        <init-param>
        	<param-name>name</param-name>
        	<param-value>Jeason</param-value>
        </init-param>
          
      </servlet>
    

    第二步 在当前的servlet中可以获取数据

      	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//得到servletconfig对象   开发中使用不多
    		ServletConfig servletConfig = getServletConfig();
    		//获取servlet标签中配置的参数
    		String name = servletConfig.getInitParameter("name");
    		System.out.println(name);
    	}
    

    servlet url配置方式

    ()
    首先我们配置url的时候前面必须写/ 如果不写tomcat启动不成功
    1》第一种 全路径配置方式 常用
    例如 /scd 访问 可以加目录
    例如

    2》第二种 路径匹配 对于前半段匹配 结合* 通配符 匹配的是任意文字
    以/开头 但是结束以接收 例如 /a/

    3》第三种 以扩展名匹配
    没有/ 以*开始 *.扩展名 例如 *.aa

    servletContext 上下文对象

    每一个web工程只有一个上下文对象,说白了就是在任何一个servlet下,都获取到这个上下文对象(一种全局变量)

    1》配置全局参数 后面讲框架的时候会用到

    	第一步  在web.xml中配置全局参数  (这个参数 整个项目都可以通过servletcontext对象进行获取)
    	 <context-param>
    	    <param-name>sex</param-name>
    	    <param-value>man</param-value>
    	  </context-param>
    	第二步 当前工程下任何一个servlet都可以获取此数据
    	得到上下文对象
    	ServletContext servletContext = getServletContext();
    	通过键取值
    	String initParameter = servletContext.getInitParameter("sex");
    

    2》获取web资源根据工程相对路径可以获取到他的绝对路径(tomcat服务器中的)

    绝对路径 :真实在硬盘中存储的路径
    相对路径:例如工程相对路径

    		//1.src下资源访问案例
    		String realPath = servletContext.getRealPath("WEB-INF/classes/file.txt");
    		//2.webcontent下资源案例
    		String indexhtml = servletContext.getRealPath("index.html");
    

    3》获取域对象数据 servletContext本身就是域对象 常用
    域对象 在web工程中帮助我们存储数据的一个对象 (今后会学习四个不同域对象,他们区别就是存储范围)
    我们可以向域对象中存数据 通过域对象取数据

    	第一步 获取上下文对象 域对象范围整个工程
    		ServletContext servletContext = getServletContext();
    	第二步 往域对象中放置数据
    		servletContext.setAttribute("name","张三");
    	第三步 获取数据 (如果是其他servlet中获取第一步先要获取到上下文对象 然后取值)
    		String name = (String) servletContext.getAttribute("name");
    

    4》servletcontext对象什么时候创建什么时候销毁

    服务器启动的时候 会为web工程创建一个上下文对象
    服务器关闭了  或者项目移除了就销毁了
    

    get和post的区别

    get 显式提交 不安全 传输数据有限制 低的浏览器长度有限制 默认网页都是get请求
    post 隐式提交 安全 传输数据理论没有大小 一般企业版的开发使用post发送请求 较多

    request和response对象的常用方法

    request对象中的方法:

    	 String getContextPath()   获取工程名
    	 getSession()  获取session对象
    	 getParamter(); 根据键获取请求参数
    	 request.setCharacterEncoding("UTF-8"); 解决post乱码
    

    response对象中的方法:

    	setStatus(int sc)  设置响应码
    	response.setContentType("text/html;charset=UTF-8");解决响应乱码
    

    这里写了一个小例子来使用上述方法:

    建立一个简单的页面:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    Hello world!
    
    
    <form action="test" method="get">
    姓名:<input name="name" ><br>
    性别:<input name= "sex"><br>
    爱好:抽烟<input name="hobby" type="checkbox" value="抽烟">
    	喝酒<input name="hobby" type="checkbox" value="喝酒">
    	烫头<input name="hobby" type="checkbox" value="烫头"><br>
    <input type="submit" value="请您提交">
    	
    </form>
    
    </body>
    </html>
    

    在java文件中:

    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		ServletConfig servletConfig= getServletConfig();
    		String name = servletConfig.getInitParameter("name"); 
    		System.out.println( "servelet配置参数name为:"+name );
    		
    		//获得ServletContext对象,可以让我们访问servlet的公共域(可以理解为一种全局变量)
    		ServletContext servletContext = getServletContext();
    		//通过ServletContext对象,获得我们在web.xml中设置的初始公共域参数
    		String sex = servletContext.getInitParameter("sex");
    		System.out.println("servlet的全局初始参数为:"+sex);
    		//通过ServletContext对象可以获得文件路径(相对路径和绝对路径,提交到tomcat后不准确)
    		String pass = servletContext.getRealPath("file.txt");
    		System.out.println("绝对路径:"+pass);
    		//获取全局参数
    		System.out.println( "全局参数name中的值:"+servletContext.getAttribute("name") );
    	
    		//request对象获取工程名
    		String path = request.getContextPath(); 
    		System.out.println("path: "+path);
    		
    		//获得单个参数
    		String parameter = request.getParameter("name");
    		System.out.println("get方法获得的name参数:"+parameter);
    		//获得成组的参数
    		String[] parameterValues = request.getParameterValues("hobby");
    		System.out.println( "get方法获得的hobby参数:");
    		for(String str:parameterValues) {
    			System.out.println(str);
    		}
    		//给页面相应的对象(response)
    		response.getWriter().println("received,thank you" );
    	}
    
    
    /*
    当我们提交表单后,服务器端输出如下:
    servlet的全局初始参数为:man
    绝对路径:E:Lib_Javaapache-tomcat-9.0.34-windows-x64apache-tomcat-9.0.34webappsday28file.txt
    全局参数name中的值:null
    path: /day28
    get方法获得的name参数:王建森
    get方法获得的hobby参数:
    抽烟
    喝酒
    烫头
    */
    
    

    请求乱码 和响应乱码解决问题

    get请求中文不会发生乱码问题 前提条件 你的tomcat版本必须是8以上 默认编码格式utf-8
    post请求参数中文会发生乱码 因为他默认编码格式不是utf-8 我们需要修改他的编码格式成utf-8这样问题就解决了

    request.setCharacterEncoding("UTF-8");
    当我们使用响应对象响应数据中文时会出现乱码 如下解决:
    response.setContentType("text/html;charset=UTF-8");
    

    转发和重定向

    作用就是跳转页面

    //转发的方法 request对象中的方法
    		request.getRequestDispatcher("success.html").forward(request, response);
    //重定向
    		response.sendRedirect("success.html");
    		//重定向注意 如果之前使用了getwriter方法 就不能跳转页面了  会报异常
    		//java.lang.IllegalStateException: getWriter() has already been called for this response
    
  • 相关阅读:
    leetcode-----16. 最接近的三数之和
    leetcode-----15. 三数之和
    leetcode-----14. 最长公共前缀
    leetcode-----13. 罗马数字转整数
    leetcode-----12. 整数转罗马数字
    leetcode-----11. 盛最多水的容器
    leetcode-----10. 正则表达式匹配
    leetcode-----9. 回文数
    leetcode-----8. 字符串转换整数 (atoi)
    leetcode-----7. 整数反转
  • 原文地址:https://www.cnblogs.com/JeasonIsCoding/p/13232614.html
Copyright © 2011-2022 走看看