?1.???? Servlet的功能:
?? ??????? ?Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的??Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
?
??????????????????????? Servlet担任的角色示意图
2.?Servlet的本质
?
??????? Servlet的本质是一个java类,只不过它继承了HttpServlet这个类,我们只要实现其中额一个或者几个方法就可以,它从父类继承的方法有几个:
?
3、Servlet的配置信息
由两部分组成,<servlet></servlet>部分和<servlet-mapping><servlet-mapping>部分 1)<servlet></servlet>部分 ??? <description>对sevlet的描述 </description> ??? <display-name>servelt显示的名字 </display-name> ??? <servlet-name>实现的servelt类</servlet-name> ??? <servlet-class>实现的servlet类路径 </servlet-class> ?</servlet> 2) <servlet-mapping><servlet-mapping>部分 ??? <servlet-mapping> <servlet-name>实现的servelt类名 </servlet-name> ??? <url-pattern>请求路径 </url-pattern> </servlet-mapping> 执行过程: ? ? ? 注意事项:两部分中的<servlet-name>中的名字要一致,请求路径有3种,/*表示所有请求都会调用该servlet,/.*表示所以以.*结尾的请求都调用它,如/.asp,则所以以.asp结尾的请求都调用该servlet,/+名字,比如,/loginServlet则请求为loginServlet时调用他。 ? 4??? Servlet接受客户端的请求参数 Servlet可以通过request.getParameter(String s)的方法从客户端,也就是浏览器页面得到相应的参数,其中的s必须是在form表单中某个输入框的name属性的值,其他的参数,不能用这个方法得到,这个方法返回的为一个String类型,如果需要得到int型,这调用Integer.parseInt(s)将字符转换为int 型 ,但是前提是s ?? 只能包含数字,否则会报错。 5???????? Servlet的转发方式 ? include 表将url中的内容包含到当前的servlet输出当中,在服务器端完成,称做包含 forward 将当前request和response交给指定的url处理,一般称做转发请求,在服务器端完成,客户端地址栏看到的路径还是当前servlet的路径。 sendRedirect 指示客户端重新发起一次请求,第二个请求指向其参数url。一般称做重定向,客户端的地址栏将改变为url值,是由客户端发起的第二次请求。
6???????? get和post处理乱码问题
GET和POST方法提交的信息,tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。
解决的方法有三个:
1.? 将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding(“GBK”)方法设置编码,并使用request.getParameter方法直接获得中文请求参数了。
2.? 不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");
3.为了保证get数据采用UTF8编码,在server.xml中进行了如下设置
<connector port="8080" maxthreads="150" minsparethreads="25" <br="">maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="99" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8"/>
7???????? 运行时参数的设置
Servlet中只要有三个运行时用来保存数据的对象,他们的作用范围如下:
??
?
对象 |
说明 |
ServletRequest |
保存的键值仅在下一个request对象中可以得到,常用做在转发请求时共享数据; |
Session |
做用域是一个用户会话范围,从session第一次创建直到Session因超时或客户端关闭之前,数据会一直存在;Session常用做存入某个用户相关的数据对象,常用来保存登录的用户名,以便用来欢迎用户的登陆 |
servletContext |
代表了servlet环境的,只要某个web应用在启动中,这个对象就一直有效,所以它是数据存活范围(时间)最大的一个;常用存放Web应用程序全局性的数据,例如登记服务器在线人数的数据,可以保存到这个对象中。 ? |
? ?? 一般设置公共信息时都是保存在servletContext中,通过调用setAttribute("键名", 键值),需要时调用,键值=getAttribute(“键值”),得到键值,不需要时,可以通过removeAttribute(“键值”),比如退出登陆时,就要把键值移除。
?