servlet:doGet和doPost区别 request和response乱码 filter

1、servlet是什么?

servlet是一个连通前、后端的java类,只会在第一次加载时调用init()方法被初始化,后来不再初始化。第一次被调用后会进入休眠状态,等待再次被调用或被销毁(destroy()方法)。

2、访问doGet的四种方式?

  • 直接访问servlet
  • 地址栏带参数访问servlet
  • 表单提交方式设置为get
  • 网页中的跳转超链接

3、表单中action的两种写法?

假设有一个建好的项目名为Demo目录下有一个login(一个servlet)

 - 相对路径:<inform action="login"></inform> 表示访问项目路径下的login,与<inform action="/Demo/login"></inform>效果一致,即地址栏会显示http://localhost:8080/Demo/login
 - 绝对路径:<inform action="/login"></inform> 表示直接在本机tomcat直接访问login这个servlet,因为没有先找到项目Demo,所以自然找不到login这个类,会出现404异常。

4、访问doPost的方法?

  • 表单提交方式设置为post
  • ajax提交时指定用post

5、提交数据,返回数据时的乱码问题?

普通表单提交:

  • 对于servlet返回值
  • response.setCharacterEncoding(“UTF-8”);
    response.setContentType(“text/html;charset=UTF-8”);
  • 对于表单提交值
  • request.setCharacterEncoding(“UTF-8”);
  • 对于doGet方式提交:
  • 字节转码:先把中文字符串转换成字节,再把字符以制定编码组合,即
    -String name=request.getParameter(“username”);
    -String changeName=new String(name.getBytes(“iso-8859-1”),”UTF-8”);

     -  或者在server.xml配置文件中
     - <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding='UTF-8'/>加入URIEncoding='UTF-8'
    
  • filter
    见下

6、html5乱码问题?

在页面添加<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

7、过滤器:filter

  • 什么是filter?

    filter也称之为过滤器,开发人员通过Filter技术,对web服务器管理的所有web资源:例如JSP,Servlet,静态图片文件或静态html文件等进行过滤,从而实现一些特殊的功能。例如,实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
    通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行过滤。简单的说,就是可以实现web容器对某资源的访问之前截获进行处理,还可以在资源向web容器响应前进行截获处理。

  • filter作用?

    在这里就是对匹配的servlet进行一些信息的加工或者过滤。

  • 新建过滤器

    新建java类,实现Filter接口
    重写接口方法

     package com.wyz.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class FilterDemo implements Filter{
    
        private FilterConfig config;
        public void destroy() {
    
        }
    
    
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //获取filter初始化的参数值
        String encoding=config.getInitParameter("encoding");
        if(null!=encoding&&!encoding.equals("")){
            request.setCharacterEncoding(encoding);
            response.setCharacterEncoding(encoding);
            response.setContentType("text/html;charset="+encoding);
        }
        System.out.println("我们进入了字符编码转换的过滤器");
        //把请求和响应继续带给下一个filter,如果没有就执行servlet
        //通俗说,比如一个男人去相亲,他先满足第一个过滤器28岁以下,然后又满足第二个过滤器长得帅...当所有过滤器全部满足,才可以交往女方
        //执行filter顺序是按照web.xml上下文顺序,总是先执行filter后servlet
        chain.doFilter(request, response);
    }
    
    
    public void init(FilterConfig config) throws ServletException {
        this.config=config;
    }
    
    }
    

    在web.xml配置文件中注册过滤器

    <!--Filter配置格式 -->
    <filter>
        <filter-name>filter</filter-name>
        <filter-class>com.wyz.filter.FilterDemo</filter-class>
        <!-- 配置初始化参数 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
        <filter-mapping>
        <filter-name>filter</filter-name>
        <!-- 表示对所有的servlet有效果,/LoginServlet表示只对LoginServlet起作用 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

猜你喜欢

转载自blog.csdn.net/un_stoppable/article/details/80875822