Android -handler-request.

1.handler

 
 
  1. new Handler().postDelayed(new Runnable() {
  2. @Override
  3. public void run() {
  4. // Toast.makeText(MainActivity.this, "hehe", Toast.LENGTH_SHORT).show();
  5. //几秒钟后 实现页面跳转
  6. }
  7. },5000);

Timer类的使用如下:
1.1创建Timer实例
 
 
  1. timer = new Timer();
1.2定义要执行的任务 TimerTask 
 
 
  1. class MyTask extends TimerTask{
  2. @Override
  3. public void run() {
  4. handler.sendEmptyMessage(1);
  5. // Toast.makeText(MainActivity.this, "hehe", Toast.LENGTH_SHORT).show();
  6. // System.out.println("aaaaaaaaaaaaaaaa");
  7. }
  8. }
1.3.安排任务
 
 
  1. timer.schedule(new MyTask(),5000);
1.4取消任务 
 
 
  1. timer.cancel();

2.servlet

servlet是什么      servlet属于javaee规范里面的一个技术. servlet是运行在服务器上的小型java程序,servlet可以用来接收客户端请求并且给客户端一个响应.
 servlet有什么用  servlet是用来开发动态网页的技术.
 servlet怎么用     
  实现步骤  
  1.创建servlet实例
 
 
  1. public class ServletDemo extends HttpServlet {
  2. //doget用来处理客户端get请求
  3. @Override
  4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  5. }
  6. //如果客户端是post请求 这个方法就会执行
  7. @Override
  8. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  9. }
  10. }
   2.在web.xml中配置servlet  原理类似android中清单文件 
 
 
  1. <servlet>
  2. <servlet-name>servlerDemo</servlet-name>
  3. <servlet-class>com.itheima.demo1.ServletDemo</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>servlerDemo</servlet-name>
  7. <url-pattern>/demo</url-pattern>
  8. </servlet-mapping>
   配置文件的作用 :通过配置文件来找到我们要访问的servlet 

3.servlet运行原理

4.servlet生命周期

生命周期:比如  人   花草树木 
   声明周期过程:1.当tomcat启动的时候servlet并没有创建
                              2.当访问servlet的时候 tomcat服务器把servlet创建 构造--->init()---->service方法
                        3.当tomcat关闭的时候servlet销毁.
service方法和doget & doPost关系                   
     根据请求的方式不同,如果请求方式是get请求底层还是调用的doGet方法 如果是post请求底层调用post方法

5.servletConfig对象

 
 
  1. //servletconfig 当servlet初始化的同时 tomcat容器又帮我们生成了一个servletconfig
  2. ServletConfig servletConfig = getServletConfig();
  3. //1.获取当前servlet名字
  4. String servletName = servletConfig.getServletName();
  5. System.out.println("name:"+servletName);
  6. //2.获取初始化参数 ,jdbc--->有些数据不适合在程序中写死 把他写到配置文件中
  7. String name = servletConfig.getInitParameter("name");
  8. String pwd = servletConfig.getInitParameter("pwd");
  9. System.out.println("---:"+name+"--pwd:"+pwd);
  10. // DriverManager.getConnection("", name, pwd)

6.urlpattern的三种写法
  [1]完全路径匹配  /demo
  [2]任意路径匹配  /*
  [3]扩展名匹配  *.do  *.action  
  在实际开发中使用完全路径匹配.
7.servletContext对象
   这个对象在javaee开发中也理解成是一个工具箱 
 
 
  1. //1.获取servletContext 对象
  2. ServletContext servletContext = getServletContext();
  3. //2.根据配置文件获取name和pwd
  4. String name = servletContext.getInitParameter("name");
  5. String pwd = servletContext.getInitParameter("pwd");
  6. System.out.println("&&&name:"+name+"----"+pwd);
  7. //3.类似android ---->Environment "/mnt/sdcard/info.txt"
  8. String realPath = servletContext.getRealPath("fileUpload");
  9. System.out.println("realpath:"+realPath);
  10. //4.对外共享数据 假设这个servlet去数据库获取了一个数据
  11. servletContext.setAttribute("test", "传智播客");
8.request对象
   请求 :请求行  请求头 请求体  所有请求的信息被封装到了request对象 
   响应 :响应行 响应头 响应体  所有响应的信息被封装到了response对象
    实现代码
    1.html代码
 
 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Insert title here</title>
  6. </head>
  7. <body>
  8. <form action="/day04/servletRequestDemo" method="post">
  9. 用户名<input type="text" name="name"><br />
  10. 密码<input type="password" name="pwd"><br />
  11. 请选择性别:<br/>
  12. 男<input type="radio" name="sex" value="male">女<input type="radio" name="sex" value="female"><br/>
  13. 请选择喜欢水果:<br />
  14. 苹果<input type="checkbox" name="fruit" value="iphone">香蕉<input type="checkbox" name="fruit" value="banana">
  15. 西瓜<input type="checkbox" name="fruit" value="watermelon">
  16. <input type="submit" /><input type="reset"/>

  17. </form>
  18. </body>
  19. </html>
   2.servlet代码
 
 
  1. //1.客户端所有的请求都封装到了req对象
  2. String method = req.getMethod();
  3. System.out.println("method:"+method);
  4. //2.获取用户名 参数和表单中的name属性对应
  5. String name = req.getParameter("name");
  6. //3.获取密码
  7. String pwd = req.getParameter("pwd");
  8. //4.获取性别
  9. String sex = req.getParameter("sex");
  10. System.out.println("name:"+name+"----"+pwd+"--"+sex);
  11. //5.获取水果 在获取多个值的时候
  12. String[] fruits = req.getParameterValues("fruit");
  13. for (String fruit : fruits) {
  14. System.out.println("fruit:"+fruit);
  1. }
 3.乱码问题  
 3.1 post方式解决乱码 
 
 
  1. //0.修改一下 request查询码表
  2. request.setCharacterEncoding("utf-8"); 这个代码只针对post无效
  3. //1获取用户名
  4. String name = request.getParameter("name");
  5. System.out.println("name:"+name);
3.2 get方式提交数据乱码    
     由于get提交数据是以组拼url地址的形式提交   http://localhost:8080/day04/?name="张三"&   要对特殊符号& 和中文进行url编码 
 
 
  1. //1获取用户名
  2. String name = request.getParameter("name"); //iso-8859-1
  3. String encode = URLEncoder.encode(name,"iso-8859-1");
  4. String decode = URLDecoder.decode(encode, "utf-8");
  5. System.out.println("name:"+decode);

9.response
 
 
  1. response.setHeader("content-type", "text/html;charset=utf-8");
  2. response.getOutputStream().write("成功".getBytes("utf-8"));


   
Process: com.android.systemui, PID: 12501 C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4200010 (has extras) } in com.android.systemui.qsview.signal.SignalUtils$1@dbb3275 C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1830) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:942) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8061) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:703) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911) C1C4B8B 06-09 16:11:31.132 12501 12501 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Pid 12501 has exceeded the number of permissible registered listeners. Ignoring request to add.
最新发布
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值