Servlet映射的细节
同一个Servlet映射多个URL上,即多个<Servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名
第一种方法:
第二种方法:
第三种方法:通配符(*.do 或者 *.html)
第四种方法:通配符(/*)
HttpServletRequest
创建Servlet实现了Servlet接口
//servlet服务的方法
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("servlet服务开启了");
}
ServletRequest:封装了请求的信息,可以从中获取请求的信息
ServletRequest:
1.可以获取请求的参数
String(返回类型) getparameter(String name);
使用这个方法,只有获取单个字符串,若是请求参数有多个值(checkBox),该方法只能获取到第一个提交的值【最常用】
例:获取a标签中的参数
例:获取单选框中的值
String[ ](返回类型) getParameterValues(String name);根据请求的参数的名字,返回请求参数对应的字符串数组【最常用】
例:获取多选框中的值
HttpServletRequest:继承了ServletRequest并基于Http协议
提供了对用户的请求,信息统一封装的接口,一般用于Servlet容易提供的。里面包含了大量的获取Http请求的相关方法
2.获取请求URL
StringBuffer getRequestURL();
3.获取请求的URI
String getRequestURI();
4.获取method的方法
String getMethod();
5.获取servlet请求映射路径
String getServletPath();
例:
结果
6.设置正文的编码格式
String getCharsetEncoding(String s);
7.获取正文的编码格式
String getCharsetEncoding();
8.设置请求正文的MIME的类型,如果不知道类型,则返回null
String setContentType();
9.获取请求的正文的MIME的类型
String getContentType();
获取request信息
1.获取请求正文的长度,若长度未知返回-1
request.getContentLength();
2.获取URI,URL是URI的自己,结果是:
request.getRequestURI();
3.获取请求的方式
request.getMethod();
4.获取所有的请求头的名字,返回值是枚举类型
request.getHeaderNames();
5.通过请求头的名字,获取值
request.getHeader(name);
6.获取项目的根路径:结果为:/FormServlet
request.getContextPath();
get与post区别?
区别一:
get重点是在服务器上获取资源,post重点在于向服务器发送数据
区别二:
get传输数据是通过url请求,以字段=value的形式,置于url后,并用“?”连接,多个请求数据间用“&”连接,如http://127.0.0.1:8020/JQueryDemo/HTML1.html?user=%E5%BC%A0%E4%B8%B9&pwd = 123这个过程是可见的。
post传输数据是通过http的post机制,将字段与对应的值封存找到请求的实体中,整体发送给服务器,这个过程是对用户不可见的。
区别三:
get传输数据量小,因为受url长度限制,但效率高。post传输数据量大,传输的数据量不是无限大的,所以上传文件时,只能用post方法。
区别四:get是不安全的,因为URL是可见的,可能会泄露信息。post较get安全性高
区别五:get方式只能支持ASCII字符,向服务器传的中文字符,有可能会乱吗。post支持标准字符集,可以正确传递中文字符
解决乱码格式
1.在JSP页面里(默认编码格式为:ISO8859-1)使用中文会乱码,必须把
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>中的pageEncoding="ISO8859-1"改成pageEncoding="UTF-8";
2.对于不同的请求
(1)doGet:对于解决doPost的方式,doGet不适用
第一种方式:在 Tomcat 中的 conf 文件夹下的 service.xml 中的如下标签中加入 URIEncoding="UTF-8"
< Connector URIEncoding = "UTF-8" connectionTiomeout="20000" port="8080" protocal="HTTP/1.1" redirectPort="8443"/>
第二种方法:
request.setCharacterEncoding(“UTF-8”);
通过修改tomcat的server.xml中的代码:useBodyEncodingForURI=“true”
<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
useBodyEncodingForURI=“true”/>
还需要加上
response.setContentType(“text/html;charset-UTF-8”);
(2)doPost:
只要回去请求之前调用:request.setCharacterEncoding(“UTF-8”);
在响应页面之前调用:response.setContentType(“text/html;charset=UTF-8”);