ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

初见Servlet

2022-03-09 19:00:26  阅读:130  来源: 互联网

标签:浏览器 String resp req 获取 初见 Servlet 请求


Servlet 初始化+导包

  1. 创建Maven项目选择"Create from archetype"(骨架)
  2. 选择骨架"maven-archetype-webapp"
  3. 增加依赖并确保原依赖是最新版本
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
  1. src/main目录下自动补齐两个文件夹"java"&"resources"

  2. 新建逻辑类并实现Servlet接口 重写接口的所有方法

  3. 逻辑类增加注解(默认端口号下的后续路径)

    @WebServlet("/path")
    
  4. 增加plugin"tomcat7" 整合tomcat到idea上

    				<plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
            </plugin>
    
  5. tomcat7:run

  6. 在浏览器中访问http://localhost:8080/tomcat3/path

  7. Init()与service()被触发

Request & Response

  • Request:获取请求数据(用户名、密码....)
  • Response:设置响应数据

RequestFacade(Tomcat定义的实现类)—>HttpServletRequest(对http协议封装的Request接口) —> ServletRequest

//*****************Request的一些方法*****************
@WebServlet("/test")
public class RequestDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String getMethod() 获取请求方式
        String method = req.getMethod();
        System.out.println(method);
        //String getContextPath = req.getContextPath() 获取虚拟目录(项目访问路径)
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        //StringBuffer getRequestURL() 获取URL(统一资源定位符)
        StringBuffer url = req.getRequestURL();
        System.out.println(url.toString());
        //String getQueryString() 获取请求参数(GET方式) username = user1
        String queryString = req.getQueryString();
        System.out.println(queryString);
        //________________________________________________________________
        //获取请求头:user-agent 浏览器的版本信息
        String agent = req.getHeader("user-agent");
        System.out.println(agent);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取post请求体:请求参数

        //1.获取字符输入流
        BufferedReader br = req.getReader();
        //2.读取数据
        String line = br.readLine();
        System.out.println(line);
    }
}
  • 请求参数获取方式
    • GET方式 doGet() :
    String getQueryString();
    
    • POST方式 doPost() :
    BufferedReader getReader();
    
  • 通用方式获取请求参数
Map<String,String[]> getParameterMap();//获取所有参数Map集合
String[] getParameterValues(String name);//根据名称获取参数值/数组
String getParameter(String name)//根据名称获取参数值(单个)
  • 请求转发:一种在服务器内部的资源跳转方式

写法

//in ResourceA
req.getRequestDispatcher("/Path of resourceB").forward(req,resp);

Response响应数据

  • 响应行
void setStatus(int sc);//设置响应状态码 ** HTTP/1.1 200 OK
  • 响应头
void setHeader(String name,String value);//设置响应头键值对 ** Content-Type:text/html
  • 响应体
PrintWritter getWriter();//获取字符输出流
ServletOutputStream getOutputStream();//获取字节输出流
//** <html><head></head><body></body></html>
Response-响应字符/字节数据:
PrintWriter writer = resp.getWriter();//字符数据
writer.write("text here.");
//还可以用html格式输出 使用:
resp.setHeader("content-type","text/html");或resp.setContentType("text/html;charset=utf-8");//中文
writer.write("<h1>Hello</h1>");
//1.通过Response对象获取字节输出流
  ServletOutputStream os = resp.getOutputStram();
//2.写数据
  os.write(字节数据);
  • IOUtils工具类
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.11.0</version>
    </dependency>
IOUtils.copy(fis,os);

重定向

resp.setStatus(302);// 提供状态码
resp.setHeader("location","/resourceB path");// 提供重定向路径

重定向与请求转发的区别(Redirect || Forward):

一句话,转发是服务器行为,重定向是客户端行为。

转发过程:客户浏览器发送http请求----》web服务器接受此请求–》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的

标签:浏览器,String,resp,req,获取,初见,Servlet,请求
来源: https://www.cnblogs.com/icexqw/p/15986585.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有