Request和Response

Response

响应头

手动发送404状态码

public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        resp.sendError(404,"找到也不告诉你");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }

}
<servlet>
   <servlet-name>AServlet</servlet-name>
    <servlet-class>day08.com.cai.servlet.demo1.AServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AServlet</servlet-name>
    <url-pattern>/AServlet</url-pattern>
</servlet-mapping>

这里写图片描述

重定向

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //重定向返回状态码为302
        resp.setStatus(302);
        //发送响应头,重定向到新地址
        resp.setHeader("location","http://www.baidu.com");
    }

这里写图片描述

5秒后跳转

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    //1. 设置响应头为Refresh:5 url=AServlet
    response.setHeader("Refresh", "5;url=AServlet");
    //使用字符流发送提示
    response.getWriter().println("您将在5秒后跳转到AServlet");
}

这里写图片描述

这里写图片描述

相应正文

字节流发送汉字

使用字节流发送汉字,需要服务器端编码和客户端解码一致,eclipse默认使用GBK编码(可在设置中更改编码类型),浏览器默认使用GBK编码,两边编码一致,不会产生乱码。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //获得输出字节流
    OutputStream os=response.getOutputStream();
    //输出中文
    os.write("你好,世界".getBytes());
}

这里写图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //获得输出字节流
    OutputStream os=response.getOutputStream();
    //设置浏览器编码
    //response.setHeader("Content-Type", "text/html;charset=gbk");
    os.write("<meta http-equiv='Content-Type' content='text/html;charset=gbk'>".getBytes());
    //输出中文
    os.write("你好,世界".getBytes("utf-8"));
}

这里写图片描述

字符流发送汉字

字符流默认使用iso-8859-1,在tomcat中设置。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1.获得字符流
    PrintWriter pw=response.getWriter();
    //2.发送中文
    pw.print("你好,世界!");
}

这里写图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //控制字符流使用的编码,在获得字符流之前设置
    response.setCharacterEncoding("utf-8");
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    //1.获得字符流
    PrintWriter pw=response.getWriter();
    //2.发送中文
    pw.print("你好,世界!");
}

这里写图片描述

字节流发送图片

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //0. 表示mime
    response.setContentType("image/jpeg");
    //1. 获得图片输入流
    InputStream in=getServletContext().getResourceAsStream("/WEB-INF/one.jpg");
    //2. 通过response获得输出字节流
    OutputStream out=response.getOutputStream();
    //3. 连个流对接
    byte[] buffer=new byte[1024];
    int len=0;
    while((len=in.read(buffer))>0) {
        out.write(buffer,0,len);
        out.flush();
    }
    in.close();
}

这里写图片描述

字节流发送文件

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //0. 表示mime
    response.setContentType("application/java-archive");
    //1. 获得图片输入流
    InputStream in=getServletContext().getResourceAsStream("/WEB-INF/code.rar");
    //2. 通过response获得输出字节流
    OutputStream out=response.getOutputStream();
    //3. 连个流对接
    byte[] buffer=new byte[1024];
    int len=0;
    while((len=in.read(buffer))>0) {
        out.write(buffer,0,len);
        out.flush();
    }
    in.close();
}

这里写图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //0. 表示mime
    String filename="code.rar";
    response.setContentType(getServletContext().getMimeType(".rar"));
    response.setHeader("Content-Disposition", "attachment;filename="+filename);
    //1. 获得图片输入流
    InputStream in=getServletContext().getResourceAsStream("/WEB-INF/code.rar");
    //2. 通过response获得输出字节流
    OutputStream out=response.getOutputStream();
    //3. 连个流对接
    byte[] buffer=new byte[1024];
    int len=0;
    while((len=in.read(buffer))>0) {
        out.write(buffer,0,len);
        out.flush();
    }
    in.close();
}

这里写图片描述

Request

请求首行

这里写图片描述

请求头

request.getContentLength(): -1
request.getContentType(): null
request.getLocale(): zh_CN
request.getQueryString(): name=tom&age=18
request.getRequestURL(): http://localhost:8080/Day08-request/AServlet
request.getRemoteAddr(): 0:0:0:0:0:0:0:1
request.getRemoteHost(): 0:0:0:0:0:0:0:1
request.getRemotePort(): 52074
request.getServerName(): localhost
request.getServerPort(): 8080

请求正文

String getParameter 根据键获得值
Map getParameterMap()  获得服务器保存表单参数的容器. 就是map<String,String[]>. 泛型: habit=chi&habit=shui&habit=la
Enumeration getParameterNames()  获得提交的所有键
String[] getParameterValues(String name)  根据键获得值. 获得一键对应多个值的情况的.

GET方式获取参数

1.浏览器负责编码.浏览器使用的码表就是表单所在页面的码表.          
2.服务器负责解码.服务器默认使用ISO-8859-1解码. 如下配置的URIEncoding来决定解码码表
     <Connector port="8080" protocol="HTTP/1.1"  URIEncoding="UTF-8"
        connectionTimeout="20000" 
    redirectPort="8443" />
如上配置会影响整个服务器不推荐.
我们使用如下代码解决:
    //获得参数
    String name = request.getParameter("name");
    //因为服务器使用了错误的码表,那么我们按照错误的码表原路返回
    byte[] nameByte = name.getBytes("ISO-8859-1");
    //用正确的码表重新解码
    String newName = new String(nameByte,"UTF-8");

    System.out.println("解决之后的:"+newName);

Post方式获取参数

因为Post解码是在第一次调用getParameter之前,那么解决乱码只需要在调用该方法之前设置编码:
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println(name);

请求转发

一个servlet处理完毕后交给下面的servlet(JSP)继续处
实际情况中,主要转发给JSP处理
在servlet中输出正文没有结果
这里写图片描述

//login.jsp
<form action="/MyTestProject/IServlet" method="get">
用户名:<input type="text" name="name" /><br/>
密码:<input type="text" name="password" />
<input type="submit"/>
</form>
//success.jsp
<body>
恭喜的登陆成功
</body>
//failuer.jsp
<body>
登陆失败<a href="/MyTestProject/login/login.jsp">返回</a>
</body>
//IServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1,获得表单提交的用户名和密码
    String name=request.getParameter("name");
    String password=request.getParameter("password");
    //2. 判断提交是否正确
    if(name!=null&&name.trim().length()>0&&name.equals("tom")&&
        password!=null&&password.trim().length()>0&&password.equals("1234")) {
        //成功==》 转发到成功页面
        request.getRequestDispatcher("/login/success.jsp").forward(request, response);  
    }else {
        //失败==》转发到失败页面
        request.getRequestDispatcher("/login/failure.jsp").forward(request, response);
    }
    //语句不会输出
    //response.getWriter().print("aaaa");           
}

这里写图片描述

这里写图片描述

请求包含

这里写图片描述

//JServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.setContentType("text/html;charset=utf-8");
    response.getWriter().println("这是正文部分<hr/>");
    request.getRequestDispatcher("/KServlet").include(request, response);
}
//KServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.getWriter().println("这是页脚部分<hr/>");
}

这里写图片描述

response

响应首行(404,500)
setStatus(int)
sendError(int,String)
响应头
setHeader
addHeader
响应空行

响应正文
字符流 getWriter
字节流 getOutputstream
输出中文时,保证两端编码一致即可.

编码控制:
字符流:
1.response.setCharacterEncoding(“UTF-8”);
2.response.setContentType(“text/html;charset=utf-8”);
字节流:
string.getBytes(“UTF-8”);
浏览器解码控制:
1.response.setHeader(“Content-Type”,”text/html;charset=utf-8”);
2.response.getWriter().print(“”);
3.response.setContentType(“text/html;charset=utf-8”);

request
一:获得信息
getMethod
getContextPath
getRequestURI
getRequestURL
getServletPath
getParameter 获得参数
getParameterNames 获得所有key
getParameterValues 根据key获得值(数组)
getParameterMap 获得封装参数的map
二:转发,包含
转发: 将请求和响应继续向下传递到另一个servlet(jsp).
功能: servlet中处理逻辑, 把显示的功能交给另一个servlet(jsp)来做.

转发和重定向对比:
1.转发不会改变地址栏,重定向会.
2.转发是请求一次,重定向请求两次.
3.转发过程中只有一个request对象产生,重定向是两个.
4.转发不能转发到站外,重定向可以发送到站外.
5.重定向的第2个请求的请求方式是什么,get. 转发中第2个servlet(jsp)是什么请求方式?第一个servlet是什么第2个就是什么.

包含: 两个servlet(jsp)共同完成响应.
功能: 将页面重复内容封装.使用包含功能引用重复内容封装的页面.

三:域对象
request域.
一般使用在转发时. servlet处理完逻辑,将处理结果放到request域中,在jsp中取出显示.

关于域对象的操作:
setAttribute
getAttribute
removeAttribute
getAttributeNames

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值