Java Web学习(4)

内容概要:

1、Web容器做了什么?

2、处理请求参数与标头有哪些常用方法?


1、Web容器做了什么

当请求来到HTTP服务器,而HTTP服务器转交请求给容器时,容器会创建一个代表当次请求的HttpServletRequest对象,并将请求信息设置给该对象。同时,容器会创建一个HttpServletResponse对象,作为稍后要对客户端进行响应的Java对象。

接着,容器会根据读取的@WebServlet标注或web.xml的设置,找出处理该请求的Servlet,调用它的service()方法,将创建的HttpServletRequest对象、HttpServletResponse对象传入作为参数,service()方法中会根据HTTP请求的方式,调用对应的doXXX()方法。例如,若为GET,则调用doGet()方法。

接着在doGet()方法中,可以使用HttpServletRequest对象、HttpServletResponse对象。例如,使用getParameter()取得请求参数,使用getWriter()取得输出用的PrintWriter对象,并进行各项相应处理。对PrintWriter做的输出操作,最后由容器转换为HTTP响应,再由HTTP服务器对浏览器进行响应。之后容器将HttpServletRequest对象、HttpServletResponse对象销毁回收,该次请求响应结束。

每一次请求/响应后,服务器端就不会记得任何客户端信息了。容器每次都会创建新的HttpServletRequest、HttpServletResponse对象,响应后销毁该次的HttpServletRequest、HttpServletResponse。


2、处理请求参数与标头

请求来到服务器时,Web容器会创建HttpServletRequest实例来包装请求中的相关信息,HttpServletRequest定义了取得一些通用请求信息的方法。取得请求参数的方法:

1)getParameter():指定请求参数名称来取得对应的值。例如:

String username = request.getParameter("name");

getParameter()返回的是String对象,若传来的是"123"这样的字符串值,而需要的是基本数据类型,则必须使用Integer.parseInt()这类的方法将之剖析为基本类型。若请求中没有所指定的请求参数名称,则会返回null。

2)getParameterValues():如果窗体上有可复选的元件,如复选框(Checkbox)、列表(List)等,则同一个请求参数名称会有多个值(此时的HTTP查询字符串其实就是想param=10&param=20&param=30),此时可以用getParameterValues()方法取得一个String数组,数组元素代表所有被选取选项的值。例如:

String[] values = request.getParameterValues("param");

如果想要直到请求中有多少请求参数,则可以使用getParameterNames()方法,这时就会返回一个Enumeration对象,其中包括所有的请求参数名称。例如:

Enumeration<String> e = req.getParameterNames();

while(e.hasMoreElements()) {
    String param = e.nextElement();
    ...

}

3)getParameterMap():将请求参数以Map对象返回,Map中的键(Key)是请求参数名称,值(Value)是请求参数值,以字符串数组类型String[]返回。

取得HTTP标头(Header)信息的方法:

1)getHeader()

2)getHeaders()

3)getHeaderNames()

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页