继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

servlet核心(二)

慕雪血影
关注TA
已关注
手记 9
粉丝 1
获赞 9

## servlet核心


目录:


# 1.如何读取请求参数值

# 2.表单包含中文参数值,如何处理

# 3.servlet输出包含中文,如何处理

# 4.容器如何处理请求资源路径

# 5.如何让一个servlet处理多种请求

# 6.转发与重定向

---------

**1.如何读取请求参数值**

使用请求对象的方法:

 (1)String  getParameter(String paramName)

 

a.请求参数名(paramName)要与实际传递过来的请求参数名一致

(就是表单页面某个标签的name属性值),否则会获得null值。

b.提交表单时,如果不填写任何数据,会获得""。


 (2)String[] getParamterValues(String paramName)

 

a.当有多个请求参数名相同时,使用此方法。

b.对于多选框,如果不选择任何选项,会获得null值。


**2.表单包含中文参数值,如何处理**


(1)为什么会产生乱码?

提交表单时,浏览器会对表单中的中文参数值进行编码,比如使用utf-8来编码,服务器端默认会使用iso-8859-1来解码,所以会产生乱码。

注:浏览器会按照打开该表单所在页面时的字符集来编码。

(2)如何解决?

1)post请求

request.setCharacterEncoding("utf-8");

注:此行代码要添加到所有的getParameter方法的最前面,并且只针对post请求有效。

 2)get请求

修改tomcat的配置文件(server.xml) <Connector URIEncoding="utf-8"/>

注:只针对get请求有效。

**3.servlet输出包含中文,如何处理**


(1)为什么会产生乱码?

因为out.println方法默认会使用"iso-8859-1"来编码。

(2)如何解决?

response.setContentType("text/html;charset=utf-8");


**4.容器如何处理请求资源路径**


比如,在浏览器地址栏输入http://ip:port/test/abc.html,

浏览器会将"/test/abc.html"作为请求资源路径发送给服务器(容器)。

step1.默认认为访问的是一个servlet,容器会去查找对应的servlet。

注:看web.xml文件中<url-pattern>的配置,有没有对应的servlet。

<url-pattern>有三种配置方式:

第一种:精确匹配

比如 <url-pattern>/abc.html</url-pattern>

第二种:通配符匹配

使用 "*"号匹配任意的零个或者多个字符,比如

<url-pattern>/*</url-pattern> <url-pattern>/demo/*</url-pattern>

第三种:后缀匹配

使用"*."开头,后接一个后缀,比如<url-pattern>*.do</url-pattern>

会匹配所有以.do结尾的请求。

step2 如果没有找到对应的servlet,容器会查找对应位置的文件。


**5.如何让一个servlet处理多种请求**

step1.采用后缀匹配,比如

<servlet-mapping>

    <servlet-name>SomeServlet</servlet-name>

    <url-pattern>*.com</url-pattern>

  </servlet-mapping>

step2.分析请求资源路径,进行相应的处理。//先获得请求资源路径

举例如下:

``` Java

String uri = request.getRequestURI();

//为了方便比较,截取请求资源路径的一部分

String path = uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));

if("/login".equals(path)) {

System.out.println("处理登录请求...");

}else if("/list".equals(path)) {

System.out.println("处理用户列表请求...");

}

```

**6.转发与重定向**

6.1什么是重定向

服务器通知浏览器向某个地址发送请求。

补充:服务器可以发送302状态码和Location消息头(该消息头的值是一个地址,一般称之为重定向地址)给浏览器,浏览器收到之后,会立即向重定向地址发送请求。

![图片描述](//img.mukewang.com/5d39788b000113fe08900520.png)

6.2如何重定向

通过相应对象response.sendRedirect(String url);

注:url是重定向地址。容器在重定向之前,会清空response对象上存放的所有数据。


6.3重定向的特点

a.重定向之后,浏览器地址栏的地址会发生改变。

b.重定向的地址是任意的。


6.4什么是转发

一个web组件将未完成的处理交给另外一个web组件继续做。

补充:web组件: jsp或者servlet的统称。通常是一个servlet获得数据,然后转发给一个jsp来展现


6.5如何转发


step1.绑订数据到request对象上。

request.setAttribute(String name,Object obj);

注:

a. name通常称之为绑订名,obj称之为绑订值。

b. 该方法内部的实现:就是以name作为key,以obj作为value,调用Map.put方法。

c.  Object request.getAttribute(String name);(目标页面获取的方法)


step2.获得转发器。

RequestDispatcher rd = request.getRequestDispatcher(Sting uri);

注:

a.uri:转发的目的地,通常是一个jsp。

b.RequestDispatcher是一个接口,该方法会返回

一个符合该接口的对象,这个对象一般我们称之为转发器。

c.转发的本质是一个web组件通知容器去调用另外一个web组件,

可以将转发器理解为web组件通知容器的媒介。


step3.转发

rd.forward(request,response);


6.7转发的特点

a.转发之后,浏览器地址栏的地址不变。

b.转发的目的地有限制,要求属于同一个web应用。


6.8比较转发与重定向


(1)地址栏地址有无变化

转发之后,浏览器地址栏地址不变;重定向之后,浏览器地址栏地址会发生改变。


(2)目的地有无限制

转发有限制,重定向没有任何限制。


(3)能否共享request对象和response对象。

转发可以,重定向不行。

注:

容器收到请求之后,会立即创建request对象和response对象。当响应发送完毕,

容器会立即销毁这两个对象。也就是说,

request对象和response对象的生存时间是一次请求与响应期间存在。

重定向是两次请求。


(4)一件事是否完成

转发是一件事未做完,让另外一个web组件继续做;而重定向是一件事已经完成,

再做另外一件独立的事件。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP