servlet2见解

来源:互联网 发布:离散数学 考研 知乎 编辑:程序博客网 时间:2024/06/06 00:46
一.如何解决编码问题 (相当于过滤器)第一个hashMap//解决因提交方式不同的参数编码问题resp.setContentType("text/html;charset=GBK");PrintWriter out=resp.getWriter();String method=req.getMethod();if("post".equalsIgnoreCase(method)){req.setCharacterEncoding("GBK");}else if("get".equalsIgnoreCase(method)){Map map=req.getParameterMap();//得到一个参数的hashMap集合Set setmap=map.keySet();  //得到集合中的键,返回一个set集合Iterator it=setmap.iterator();//再进行迭代while(it.hasNext()){          //将迭代循环String key=(String)it.next(); //取得迭代中的键String[] values=(String[])map.get(key); //通过键取值for(int i=0;i<values.length;i++){byte[] buff=values[i].getBytes("iso8859-1");//反编码values[i]=new String(buff,"GBk");//编码后转码}} String name=req.getParameter("uname");out.println("欢迎您:"+name);二、通过request得到请求头的方法,第二个hashMap//得到Request的一些常用请求头的方法//resp.setContentType("application/vnd.ms-excel;charset=GBK");//application/vnd.ms-excel是excel表单的方式打开,还可以设置为其他客户端浏览器所支持的            格式resp.setContentType("text/html;charset=GBK");req.setCharacterEncoding("GBK");PrintWriter out=resp.getWriter();         //只有HttpServletRequest在可以得到头信息HttpServletRequest request=(HttpServletRequest)req;         Enumeration enums=request.getHeaderNames();//得到请求头的一个枚举out.print("<table border='1'>");//以表格的方式打印出来    while(enums.hasMoreElements()){//是否有更多的元素out.print("<tr>");String key=(String)enums.nextElement();//从枚举中取得键String value=request.getHeader(key); //通过键取值out.print("<td>"+key+"</td>");out.print("<td>"+value+"</td>");out.print("</tr>");}out.print("</table>");}三、通过request得到所有属性的方法,第三个hashMapPrintWriter out=resp.getWriter();//将请求转为 Http的请求HttpServletRequest request=(HttpServletRequest)req;//得到Request中所有的属性 返回一个枚举类型Enumeration enums=request.getAttributeNames();//看枚举中是否有元素while(enums.hasMoreElements()){//从枚举中把键取出来String key=(String)enums.nextElement();//通过键取的值Object value=request.getAttribute(key);out.print(key+":"+value+"<br>");}         注意:会有tomcat已经设好的三个值javax.servlet.forward.request_uri/WebTest/page1.jspjavax.servlet.forward.context_path/WebTestjavax.servlet.forward.servlet_path/page1.jsp                四、得到session,application      HttpServletRequest request = (HttpServletRequest)req;String n1 = (String)request.getAttribute("name");System.out.println("request:"+n1);//得到sessionHttpSession session = request.getSession();String n2 = (String)session.getAttribute("name");System.out.println("session:"+n2);//得到application//ServletContext application = session.getServletContext();//用此方法只有再继承了httpservlet类或 GenericServlet类才有//ServletContext application = this.getServletContext();ServletContext application=this.getServletConfig().getServletContext();String n3 = (String)application.getAttribute("name");System.out.println("application:"+n3); 五.  ServletConfig和ServletContext的区别        ServletConfig记录着单个服务员的信息,比如说年龄,性别等        ServletConfig只能获得自己的servlet信息配置信息        比如:以前获取编码参数的问题等     <servlet>       <servlet-name>hello7</servlet-name>       <servlet-class>com.accp.servlet.Hello7</servlet-class>       <init-param>           <param-name>encoding</param-name>           <param-value>text/html;charset=GB18030</param-value>       </init-param>       <init-param>           <param-name>sex</param-name>           <param-value>男</param-value>       </init-param>       <init-param>           <param-name>age</param-name>           <param-value>女</param-value>       </init-param>   </servlet>   <servlet-mapping>        <servlet-name>hello7</servlet-name>        <url-pattern>/hello7</url-pattern>   </servlet-mapping>  Service()方法中       //ServletConfig使用,拿到Hello7这个servlet单独的信息       //拿到所有servlet所有参数名Enumeration configs = this.getServletConfig().getInitParameterNames();while(configs.hasMoreElements()){String key=(String)configs.nextElement();             //根据参数名拿参数值String value = this.getServletConfig().getInitParameter(key);System.out.println(key+"--"+value);}        但是我们发现以前每个servlet都要有编码问题的设置,那我们能不能配置一个公有的,让每一个        Servlet都享有                 其实可以配置一个公有信息        <context-param>           <param-name>encoding</param-name>           <param-value>text/html;charset=GB18030</param-value>       </context-param>       问题是在servlet中怎么获取这些公共的信息?        ServletContext记录着整个这个门店的信息,也就是服务员工作坏境的信息。比如墙壁是刷成什么颜        色等        ServletContext保存着整个公共的配置信息                      //ServletContext使用,拿到整个公共的配置信息Enumeration contexts =this.getServletContext().getInitParameterNames();while(contexts.hasMoreElements()){String key=(String)contexts.nextElement();String value = this.getServletContext().getInitParameter(key);System.out.println(key+"--"+value);}六.利用ServletContext,读取WEB-INF目录下的客户端不可读文件    resp.setContentType("text/html;charset=GBk");PrintWriter out=resp.getWriter();ServletContext sct=this.getServletContext();//获取到文件资源,并将它转为文件流(相对路径)InputStream in=sct.getResourceAsStream("/WEB-INF/abc.html");Reader read=new InputStreamReader(in);//转为字符流BufferedReader reader=new BufferedReader(read);//改为包装流String str=reader.readLine();//读取while(str!=null){out.print(str);//打印str=reader.readLine();}reader.close();read.close();  in.close();       //jsp转发Servlet     // pageContext.forward("Test7");     //jsp重定向到Servlet     //response.sendRedirect("Test7");//servet转发到jsp//request.getRequestDispatcher("/page3.jsp").forward(request, response);//servet重定向到jspString path = request.getContextPath();System.out.println(path);response.sendRedirect(path+"/page3.jsp");        

原创粉丝点击