文章目录
Servlet
1. Servlet运行流程:
-
url:http://localhost:8080/Servlet_Test_login/loginServlet
组成:服务器地址:端口号/虚拟项目名/servlet的别名
-
uri:虚拟项目名/servlet别名
浏览器发送请求到服务器,服务器根据请求的URL地址中的URI信息在webapps目录下找到对应的项目文件,然后再web.xml中检索对应的servlet,找到后调用并执行servlet。
2. Servlet配置:
-
通过web.xml 配置
-
通过注解配置
@WebServlet("/loginServlet")
loginServlet 即为此servlet的别名,通过
http://localhost:8080/Servlet_Test_login/loginServlet 即可访问。
3. doGet/doPost的区别与使用:
-
区别:
在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get。可在中的method属性中指定提交的方式。如:,如果不指定method属性,则会默认该属性为”get”方式。
不同点一:
通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。
不同点二:
通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。
不同点三:
通过Get方式提交的数据安全性不高,而Post方式的更加安全。
-
使用:
h5:
<body> <form action="/loginServlet" method="post"> 用户名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body>
Servlet:
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //向服务器发送请求获取到参数 String username=request.getParameter("username"); String password=request.getParameter("password"); System.out.println(username+"--"+password); response.setHeader("Content-Type", "text/html; charset=UTF-8"); Writer out=response.getWriter(); out.write("用户名:"+username); out.write("密码:"+password); out.flush(); out.close();
4. Request
1.概述
request是Servlet.service()方法的一个参数,在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
2.常用方法
(1) 域方法:
- 存储
//用来存储一个对象,也可以称之为存储一个域属性
void setAttribute(String name, Object value)
Eg:servletContext.setAttribute(“xxx”, “XXX”)
//在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX
- 获取
//用来获取ServletContext中的数据
Object getAttribute(String name)
//获取名为xx的域属性
Eg:String value = (String)servletContext.getAttribute(“xxx”);
//获取所有域属性的名称;
Enumeration getAttributeNames()
- 移除
//用来移除ServletContext中的域属性
void removeAttribute(String name)
(2) 获取请求头数据:
//获取指定名称的请求头
String getHeader(String name)
//获取所有请求头名称
Enumeration getHeaderNames()
//获取值为int类型的请求头
int getIntHeader(String name)
(3) 获取请求相关的其他方法
//获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;
int getContentLength()
/*
获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认
为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
*/
String getContentType()
//返回请求方法,例如:GET/POST
String getMethod()
//返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;
Locale getLocale()
/*
获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用
ISO-8859-1编码;
*/
String getCharacterEncoding()
/*
设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法
只能对POST请求中的参数有效!
*/
void setCharacterEncoding(String code)
//返回上下文路径,例如:/Dmoe1
String getContextPath()
//返回请求URL中的参数,例如:username=zhangSan
String getQueryString()
//返回请求URI路径,例如:/Demo1/ServletDemo1
String getRequestURI()
/*
返回请求URL路径,例如:http://localhost/Demo1/ServletDemo1即返回除了参数
以外的路径信息;
*/
StringBuffer getRequestURL()
//返回Servlet路径,例如:/ServletDemo1
String getServletPath()
//返回当前客户端的IP地址
String getRemoteAddr()
//返回当前客户端的主机名,但这个方法的实现还是获取IP地址
String getRemoteHost()
//返回请求协议,例如:http
String getScheme()
//返回主机名,例如:localhost
String getServerName()
//返回服务器端口号,例如:8080
int getServerPort()
3)常用方法总结:
- 与Http请求相关:
getReader()
:返回一个缓冲读取器,用于读取请求正文中的文本。
getContentType()
:返回请求正文的MIME类型,或者 null类型是否已知。
getContentLength()
:返回请求正文的长度(以字节为单位),并由输入流提供,如果长度未知,则返回-1。
getCharacterEncoding()
:返回此请求正文中使用的字符编码的名称。
setCharacterEncoding(java.lang.String env)
:设置此请求正文中使用的字符编码的名称。
setAttribute(String,Object)
:此方法将属性存储在请求上下文中; 这些属性将在请求之间重置。
getProtocol()
:以protocol / majorVersion.minorVersion格式返回请求使用的协议的名称和版本,例如HTTP / 1.1。
getScheme()
:返回请求方式,例如 http,https或ftp。
- 请求客户端相关:
getServerPort()
:返回发送请求的端口号。
getRemoteAddr()
:返回发送请求的客户端或最后一个代理的Internet协议(IP)地址。
getRemoteHost()
:返回客户端的完全限定名称或发送请求的最后一个代理。
getServerName()
:返回发送请求的服务器的主机名。
- 与request属性相关:
setAttribute(java.lang.String name, java.lang.Object o)
:在此请求中存储属性。 如果第二参数为null 那么相当于removeAttribute
getAttributeNames()
:Returns an Enumeration containing the names of the attributes available to this request.
removeAttribute(java.lang.String name)
:从此请求中删除属性。
getParameter(java.lang.String name)
:以String形式返回请求参数的值,如果参数不存在,则返回null。
getParameterMap()
:返回此请求的参数的java.util.Map。
getParameterValues(java.lang.String name)
:返回包含给定请求参数所具有的所有值的String对象数组,如果参数不存在,则返回null。
4.request获取请求参数
获取请求参数的通用方式(Get/Post均可)
//根据参数名称获取参数值
String getParameter