Servlet:Server applet,服务器端的小程序,用来动态的输出网页内容 狭义上就是Java中的一个接口 广义上就是实现了该接口的实现类,我们通常说的Servlet就是这种
Servlet的生命周期方法:Servlet在整个应用中只有一个对象,单例的
1.构造器在第一次请求的执行 2.初始化方法在第一次请求的时候执行 3.service方法在每次请求的时候都会执行 4.destroy方法在正常关闭服务器的时候执行,所以资源销毁的操作通常不会放在该方法中(可能执行不到) 5.为了服务器能够顺利的通过反射创建Servlet对象,在Servlet中必须保留一个公共的无参数的构造器Servlet的请求流程
1.解析请求: 协议:http 主机地址:localhost 端口:80 上下文路径:/pss 资源名称:/hello 2.通过/pss在server.xml文件中找到相关的配置,找到项目的根路径 <Context docBase=”项目的根路径” path=”/pss”/>如果没有:返回404 3.通过/hello去项目中的web.xml文件中找到<url-pattern>为/hello的节点 如果没有:返回404 4.通过资源名称找到Servlet的全限定名 5.在Tomcat中有一个Servlet的实例缓存池 Map<String,Servlet> cache = ...... 先从缓存池中获取对应全限定名的Servlet对象 Servlet obj = cache.get(“Servlet 的全限定名”); if(obj == null){ //第一次 //GOTO 6; }else{ //非第一次 //GOTO 8; } 6.创建Servlet对象 obj = Class.forName(“全限定名”).newInstance(); 将创建好的对象放到缓存池中 cache.put(“全限定名”, obj); 7.先创建ServletConfig对象,调用初始化方法 obj.init(config); 8.先创建ServletRequest,ServletResponse对象,调用service方法 obj.service(req,resp); 9.返回响应信息 servlet 请求的中文乱码处理 Tomcat中默认处理请求参数的编码方式是ISO-8859-1,不支持中文的处理 解决方案:
1.拆,将按照ISO-8859-1编码之后的数据按照同样的方式进行拆分 bytes = username.getBytes(“ISO-8859-1”); 装,将字节数组按照UTF-8的方式进行编码 username=new String(bytes, “UTF-8”);以上的方式可以解决乱码,但是如果需要解决的数据非常多,那么就变得非常麻烦 2.可以通过修改server.xml文件中的配置,只针对get方式生效 3.可以调用request对象中的setCharacterEncoding(String encoding);,只针对post方式生效
使用注解可以将metadata-complete设置为false,也可以删除这个属性,也可以将web,xml文件删除 注意:注解只是替代web.xml文件中的部分配置 也就是说web.xml那么在项目中建议保留