其他分享
首页 > 其他分享> > 初见Servlet

初见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

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);
    }
}
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(字节数据);
    <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