1.Servlet的工作流程?
Servlet是运行在Servlet容器中的,由Servlet容器来负责Servlet实例的查找、创建以及整个生命周期的管理,Servlet整个生命周期可以分为四个阶段:类装载及实例创建阶段、实例初始化阶段、服务阶段以及实例销毁阶段。
1)类装载及实例创建阶段:默认情况下,Servlet实例是在接受到第—个请求时进行创建并且以后的请求进行复用,如果有Servlet实例需要进行一些复杂的操作,需要在初始化时就完成,比如打开文件、初始化网络连接等,可以配置在服务器启动时就创建实例,具体配置方法为在声明servlet标签中添加<load-on-sta rtup >l</load-on-startup>标签。
2)初始化init(ServletConfig config):一旦Servlet实例被创建,将会调用Servlet的init方法,同时传入ServletConfig实例,传入Servlet的相关配置信息,init方法在整个Servlet生命周期中只会调用一次。
3)服务service():为了提高效率,Servlet规范要求—个Servlet实例必须能够同时服务于多个客户端请求,即service()方法运行在多线程的环境下,Servlet开发者必须保证该方法的线程安全性。
4)销毁destory0:当Servlet容器将决定结束某个Servlet时,将会调用destory0方法,在destory方法中进行资源释放,—旦destory方法被调用,Servlet容器将不会再发送任何请求给这个实例,若Servlet容器需再次使用该Servlet,需重新再实例化该Servlet实例。
2.简述如何处理表单提交的中文
处理表单提交的中文,分为两种情况,—是post方式提交表单、—是get方式提交表单。
1.处理post方式提交表单时的中文,步骤如下:
确保表单所在的页面按照指定的字符集打开,在HTML中设置如下:
<meta http-equiv = "content-tlrLoe" content = "text/html;charset=utf-8">
另外,在HTML中,将表单form的提交方式设置为POST。
在服务器端按照上述设置的编码格式进行解码,代码如下:
request.setCharacterEncoding("UTF-8");
该行代码要在第一次使用raquest的时候进行设置。
2.处理GET方式提交表单时的中文,步骤如下:
使用meta确保表单所在页面按指定字符集打开,在HTML中设置如下:
<meta chaset="UTF-8">
另外,在HTML中,将表单form的提交方式设置为GET。
将从表单中获取的信息使用上述设置的字符集utf-8进行重新编码。
例如:将从表单获取的username进行重新编码,代码如下:
String username - request.getParameter("username");
username = new String(username.getBytes("iso-8859-1"),"utf-8");
3.简述GET和POST的区别
GET和POST的区别如下:
1.从提交的数据量上来说,get方式会将请求参数及参数值放在请求资源路径里面,携带的数据大小有限制,不适合提交大量的数据;post方式会将请求参数及参数值放在实体内容里面,理论上没有限制,适合大量数据的提交。
2.从安全上来讲,post方式相对安全(困为请求参数及值存放在实体内容里面,而get方式会将请求参数及值显示在浏览器地址栏)。但是要注意,post方式并没有将数据加密。
4.如何重form表单中获取checkbox的值?
可在页面把checkbox的name属性取同一个,value属性取每个条目的id,在Servlet中使用HttpServletRequest的getParamterValues(”name”)能取到checkbox的一组值。
5.Servlet的生命周期
Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init方法进行Servlet的初始化,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。