ServletConfig对象
是Servlet的配置对象,每一个Servlet都拥有一个配置对象。我们在web.xml中,进行servlet的配置时,可以向Servlet中添加初始化的参数,这些参数,会被存储到一个ServletConfig对象中.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <servlet> <servlet-name>s1</servlet-name> <servlet-class>demo.Servlet1</servlet-class> <init-param> <param-name>sqlname</param-name> <param-value>hahaha</param-value> </init-param> <init-param> <param-name>sqlpass</param-name> <param-value>123</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>s1</servlet-name> <url-pattern>/s1.do</url-pattern> </servlet-mapping>
|
在Servlet类中, 可以通过两种方式, 来获取配置对象 , 这两种方式在使用中, 是互斥的.
方式1:生命周期init方法中, 存储ServletConfig参数.在方法中使用参数即可.
方式2:在Servlet的任意代码位置, 通过getServletConfig()方法得到对象.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package demo;
import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;
public class Servlet1 extends HttpServlet {
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig config = getServletConfig(); String sqlName = config.getInitParameter("sqlname"); String sqlPass = config.getInitParameter("sqlpass"); System.out.println("sqlName2: "+sqlName); System.out.println("sqlPass2: "+sqlPass); response.getWriter().append("ok"); } }
|
GET请求与POST请求
-
GET请求
请求的参数 以多个键值对的形式存储在网址中, 在网址的?后 , 键与值键值使用等号连接, 多个键值对之间&分割
只能阐述字符串类型的参数
网址的最大长度为4kb , 通常支持的文字数量是: 最大2048
数据传输的时不安全
-
POST请求
请求的参数 以多个键值对的形式存储在单独的数据包中 , 这个数据包叫做请求体.
请求体中可以包含任意类型的数据, 例如: 图片 . 音频 等…
数据大小,理论上是无上限的.
因为请求体是单独的数据包, 所以较GET请求而言安全;
-
什么样的请求是GET
浏览器输入网址 , 回车;点击超链接访问;表单提交时, method=GET;通过js: wondow.location对象,进行替换与跳转;ajax的get请求
-
什么样的请求是POST
表单提交时method=POST,ajax的post请求
请求乱码的问题解决
Tomcat9版本之后的请求乱码已经默认解决。
-
方式1
适用于tomcat8版本之前的GET请求乱码解决, 以及所有版本的POST乱码解决:
解决乱码的原理: 将文字乱码的流程, 倒序执行一遍,得到正确的文字.
1.将乱码的文字,按照ISO-8859-1转换为字节数组
2.将字节数组按照UTF-8的编码转换为文字
1 2 3 4
| //1. 将乱码的文字,按照ISO-8859-1转换为字节数组 byte[] bytes = 乱码文字.getBytes("ISO-8859-1"); //2. 将字节数组按照UTF-8的编码转换为文字 String text = new String(bytes,"UTF-8");
|
-
方式2
适用于tomcat所有版本的post乱码的解决.
解决乱码的原理:在使用请求体之前, 将请求体的默认编码更改为utf-8.
1 2
| //设置请求体的编码, 一定要写在获取参数之前. request.setCharacterEncoding("UTF-8");
|
接受GET和POST请求的参数
在项目的web目录下创建index.html,并输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!-- 相对路径: 相对于代码文件所有路径的拼接 例如: 相对路径为: images/x.jpg 代码文件路径: c://1.html 则此相对路径 ,所表示的文件路径是: c://images/x.jpg
特殊相对路径的写法: 例如: /images/x.jpg 文件路径是: 当前代码所在根路径拼接: 例如: html运行的网址是: www.baidu.com/a/b.html 路径是: /images/x.jpg 则访问的图片地址: www.baidu.com/images/x.jpg
绝对路径: 带有盘符, 或协议的文件路径: 例如: c://1.jpg 文件路径就是: c://1.jpg --> <form action="login3.do" method="POST"> <input class="form-control input-lg" placeholder="请输入帐号" name="username"><br> <input class="form-control input-lg" placeholder="请输入密码" name="password"><br> <button class="btn btn-success btn-block btn-lg">登 录</button> </form> </body> </html>
|
在项目的src目录下创建servlet.class并输入,根据请求方式编写doget和dopost方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| package demo;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;
@WebServlet("/login3.do") public class LoginServlet3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet触发了"); String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("doGet帐号:"+username); System.out.println("doGet密码:"+password); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost触发了"); request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String password = request.getParameter("password");
System.out.println("doPost帐号:"+username); System.out.println("doPost密码:"+password); } }
|