一. 从客户端传送到Web服务器的数据有两种:显式(即HTTP表单的数据)和隐式(即HTTP请求的报头).
二. 从Web服务器到客户浏览器的数据也有两种:HTTP响应报头和文档.
三. 服务器每次接收到对Servlet的请求,都会产生一个新的线程,调用service方法.service方法检查HTTP请求的类型(get,post,put,delete等)并相应调用doGet,doPost,doPut,doDelete等方法.
四. GET用来请求页面,包括:用户在地址栏中输入URL;点击Web页面内的链接;提交没有指定method或指定method=”get”的表单时,浏览器都会生成该请求,调用doGet方法.
POST:提交method=”post”表单时,会生成post请求,调用doPost方法.
五. 如果您需要在servlet中等同的处理post和get请求,只需让doGet调用doPost(或相反)即可.
六. doGet和doPost方法有两个参数:HttpServletRequest和HttpServletResponse
HttpServletRequest: 即与客户请求有关,通过此可以得到所有的输入数据.包括:表单(查询)数据,HTTP请求报头和客户的主机名等.
HttpServletResponse: 即与服务器的相应有关,通过此可以指定相应信息.包括:HTTP状态代码(200,404等),响应报头,最重要等是通过getWriter方法获得PrintWriter,用它可以将文档内容发送给客户.
七.init方法在servlet首次载入时调用,所以一些初始化任务可以放在该方法里,该方法在servlet里只调用一次.servlet一般在用户首次调用对应servlet等URL时创建,但也可以指定servlet在服务器启动时载入.
八.在web.xml的<servlet>元素中有:
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
l 通过向web.xml的<servlet>元素添加<init-param>子元素,可以指定初始化参数的名称和值.
l 在servlet的init方法中,调用getServletConfig.得到ServletConfig对象.
l 以init参数的名称为参数,调用ServletConfig的getInitParameter方法,返回值就是init参数的值或null(没有该参数).
l HttpServlet extends GenericServlet
重写的init方法即重写GenericServlet中的init方法,在此接口中有两种形式:
public void init()throws ServletException{}
public void init(ServletConfig config)throws ServletException {
this.config = config;
this.init;
log(“init”);
}
九.中文乱码解决:
在doGet或doPost方法开头加入下两句:
request.setCharacterEncoding(“GBK”);
response.setContentType(“text/html; charset=GBK”);
十:对用户提交的表单数据验证一般为:
String param = request.getParameter(“someName”);
If((param == null) || (param.trim.equals(“ “))) {
……
} else {
……
}
其中trim方法用来移除用户可能输入的任何空格,防止用户只输入空格.
十一:检查数组长度用length,检查String长度用length(),String的charAt(int i)方法用来返回位于第i位置上的字符.
例: String s = “Vincent”;
char c;
c = s.charAt(2);
显然字符c为’n’
十二.StringBuffer与String区别:
StringBuffer为可变长的字符串,用append(String s)方法拼接字符串,String为不可变的,拼接字符串要用+来加上另一个String,这样就增加了额外的内存消耗.
十三.Enumeration e = request.getParameterNames();
getParameterNames方法用来得到表单中的所有参数名,并将他们全部放入Enumeration对象中(顺序不定),Enumeration有hasMoreElements和nextElement(返回Object类型)方法.
例: Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String name = (String)paramNames.nextElement();
String value = request.getParameter(name);
}
得到表单参数的另种形式为: Map map = request.getParameterMap();
其中,参数名(字符串)是表的键,参数值(字符串数组,与getParameterNames返回值相同)是表的值.
十四.用户提交的表单值是如何封装到JavaBean呢?是通过:
BeanUtils到populate(Object bean, Map properties)
bean即为JavaBean对象,properties即为request.getParameterMap()所得的Map对象,从上面知道表单值已经封装到Map对象中.
通过该方法即可把表单值封装到JavaBean里.
例: User user = new User();
Map map = request.getParameterMap();
BeanUtils.populate(user,map);
十五.报头Referer存放引用web页面的URL
例:如果您在web页面A单击指向web页面B的链接,那么,在浏览器请求web页面B时,就会将web页面A的URL引入Referer报头.
得到报头信息用:request.getHeader(“报头名”);
即:String referrer = request.getHeader(“referer”);
十六.得到所有报头: Enumeration e = request.getHeaderNames();
得到客户IP: request.getRemoteAddr();
得到客户端名: request.getRemoteHost();
得到URI的实际路径: request.getServletPath();即为URL在主机和端口后的那部分.
十七.response.sendRedirect(String url); 将用户重定向到另一个URL
十八.”状态代码”是用来标明失败或重定向的.
response.sendError(int code, String message);
用来返回状态代码与错误信息.
十九.response.setHeader(“refresh”, “5; URL=http://laz.blog.edu.cn”);
客户在原页面停留5秒后将自动跳转到http://laz.blog.edu.cn
在JSP页面中等同的设置为:
在<head>元素中设置 <meta http-equic = ”refresh”
Content = “5; URL=http://laz.blog.edu.cn” />
Refresh为报头.记住,服务器对客户浏览器的响应数据为两种:HTTP报头和文档.在发送报头前可对报头内容进行设置.客户浏览器收到设置后到报头,
response.setHeader(“refresh”, 5); 表每隔5秒刷新一次页面
对某报头设值: response.setHeader(“报头名”, “值”);
二十.HTTP允许相同报头名多次出现
setHeader, setIntHeader, setDateHeader 为替换同名已有报头
addHeader, addIntHeader, addDateHeader 添加报头
二十一.application即为ServletContext对象.
ServletContext application = getServletContext();
getServletContext方法为GenericServlet类方法,所以可直接用.
ServletContext类中有:setAttribute,getAttribute,removeAttribute方法.
二十二.Cookie
设置Cookie,并保存客户机内存:Cookie cookie = new Cookie(“名”, “值”);
response.addCookie(cookie);
此时客户机内存中将存有该cookie.若客户关闭浏览器,则cookie将消失.
若要将cookie保存于客户硬盘,并设定保存时间,可以设置为:
Cookie cookie = new Cookie(“名”, “值”);