zoukankan      html  css  js  c++  java
  • Servlet基础使用总结

    Servlet通俗理解主要功能在于交互式地浏览和生成数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器

    (以下学习总结参考自http://how2j.cn/k/servlet/servlet-eclipse/558.html#nowhere

    一、servlet简单开发:

    1.首先应建立一个Java web项目,并且导入要用到的servlet-api.jar包
    2.编写一个Java类,继承HttpServlet,在这个类中实现doGet或doPost方法
    3.配置web.xml,提供路径与servlet的映射关系,并把某个url请求路径映射到这个类上

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    二、Servlet获取参数(演示servlet如何获取从浏览器提交的账号密码

    1.创建login.html

    (1)提交表单(form元素),action="login"会提交到login路径,然后这个路径会在web.xml中映射到对应的servlet中
    (2)method="post" (有post和get提交方法)

    <form action="login" method="post">
        账号: <input type="text" name="name"> <br>
        密码: <input type="password" name="password"> <br>
        <input type="submit" value="登录">
    </form>

    2.创建LoginServlet

    (1)提供一个form表单对应的提交方法post doPost
    (2)方法中,通过request.getParameter 根据name取出对应的账号和密码

    public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
            //获取提交的数据
            String name = request.getParameter("name");
            String password = request.getParameter("password");
            //把信息输出到控制台
            System.out.println("name:" + name);
            System.out.println("password:" + password);
        }
    }

    3.配置web.xml

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping> 

    此时启动tomcat访问http://localhost:8080/项目名/login.html,填入账号和密码,然后提交,就可以在控制台输出账号和密码

     三、Servlet调用流程

    /login路径->找到对应的servlet->实例化servlet对象->调用doGet或doPost->request获取参数->response设置响应->tomcat把html传递给浏览器servlet调用流程图

    四、中文问题
    1.获取中文参数
      在html中加上<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 意思是告诉浏览器,等下发消息给服务器的是时候,使用UTF-8编码
    2.返回中文响应
      在servlet中加上response.setContentType("text/html; charset=UTF-8");

    五、生命周期
    实例化->初始化->提供服务->销毁->被回收

    • 当用户通过浏览器输入一个路径,这个路径对应的servlet被调用的时候,该Servlet就会被实例化
    • init 方法是一个实例方法,所以会在构造方法执行后执行。无论访问了多少次LoginSerlvet,init初始化 只会执行一次
    • 接下来就是执行service()方法,然后通过浏览器传递过来的信息进行判断,是调用doGet()还是doPost()方法
    • 销毁(重启服务器 或有类发生更新)
    • 当该Servlet被销毁后,就满足垃圾回收的条件了。 当下一次垃圾回收GC来临的时候,就有可能被回收

    六、跳转
      1.在servlet中进行服务端跳转:request.getRequestDispatcher("跳转到的路径").forward(request, response);
      2.在servlet中进行客户端跳转:response.sendRedirect("跳转到的路径");

    七、常见方法:
    1.request:

    • request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)"
    • request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名"
    • request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
    • request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
    • request.getRemoteHost(): 浏览器所处于的客户机的主机名
    • request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
    • request.getLocalAddr(): 服务器的IP地址
    • request.getLocalName(): 服务器的主机名
    • request.getMethod(): 得到客户机请求方式一般是GET或者POST
    • request.getParameter(): 是常见的方法,用于获取单值的参数
    • request.getParameterValues(): 用于获取具有多值的参数,比如注册时候提交的 "hobits",可以是多选的。
    • request.getHeader() 获取浏览器传递过来的头信息。
    • request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息
    • request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。
    • setAttribute和getAttribute可以用来在进行服务端跳转的时候,在不同的Servlet之间进行数据共享

    2.response

    • PrintWriter pw= response.getWriter();通过response.getWriter(); 获取一个PrintWriter 对象。可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。 设置响应内容
    • response.setContentType("text/html");设置响应格式

         设置响应编码

    • (1)response.setContentType("text/html; charset=UTF-8");发送内容以及浏览器全都使用UTF-8
    • (2) response.setCharacterEncoding("UTF-8"); 只设置发送内容为UTF-8

    八、上传文件
      form的method必须是post,并且需要加上<form action="uploadPhoto" method="post" enctype="multipart/form-data">表示提交的数据是二进制文件,然后利用IO流来在servlet中实现。

  • 相关阅读:
    Java中的import
    C语言中变量的理解
    C语言中变量的储存类别
    android通话流程浅析RIL层
    IOS(数据持久化1)
    IOS(CGContent画曲线)
    IOS XML的类型数据的解析
    truncate narrow string converted from unicode string
    复习:C语言中的转义字符
    Note of using static_cast
  • 原文地址:https://www.cnblogs.com/dong973711/p/10632641.html
Copyright © 2011-2022 走看看