前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaWeb10-request&response你不得不学(1)

JavaWeb10-request&response你不得不学(1)

作者头像
Java帮帮
发布2018-03-16 18:00:04
1.6K0
发布2018-03-16 18:00:04
举报

request&response

一.request和response的介绍

1. request和response的作用执行流程

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象

request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了.

执行流程:

1.浏览器发送请求

2.服务器接收请求,创建两个对象(request和response),将请求的信息封装request对象

3.找到对应的servlet,将这两个对象传递给servlet

4.Servlet收到请求,执行service方法,处理自己的业务逻辑,生成动态的内容,将内容返回给服务器

5.服务器收到内容之后,进行拆分,生成响应信息,返回给浏览器

6.浏览器解析

2. request和response的体系结构

Servlet的service方法中有两个参数servletRequest和servletResponse

httpServlet实现了service方法

将两个对象进行了强转

ServletRequest==>HttpServletRequest

ServletResponse==>HttpServletResponse

具体的实现类是由服务器帮我们创建的

tomact的实现类(了解)

org.apache.catalina.connector.RequestFacade

org.apache.catalina.connector.ResponseFacade

☆要想获取从浏览器发送过来的请求内容,找request就可以了

☆要想往浏览器写东西,找response就可以了

javax.servlet.Servlet接口中的service方法

public abstract void service(ServletRequest req, ServletResponse res)

javax.servlet.GenericServlet类中的service方法

public abstract void service(ServletRequest req, ServletResponse res)

javax.servlet.http.HttpServlet类中的service方法

在这个类中对service方法进行了重载

public void service(ServletRequest req, ServletResponse res)

protected void service(HttpServletRequest req, HttpServletResponse resp)

二.response

响应:要想往浏览器写东西,找response就可以了

1.response常用api简单介绍

2.response操作响应行(操作状态码)

格式:协议/版本 状态码 状态码说明

例如:HTTP/1.1 200 OK

在http响应行中,包括协议,版本号,以及有一个很重要的值,它叫做响应状态码.响应行中我们主要就是操作这些状态码,它可以有五种类型取值:

常用状态码

200请求成功(其后是对GET和POST请求的应答文档。)

302所请求的页面已经临时转移至新的url。(重定向)(配合location响应头使用)

304未按预期修改文档。(让浏览器读缓存)

客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since(什么时候修改的))头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

404没有找到文件或目录。(用户操作错误)

405请求中指定的方法不被允许

500请求未完成。服务器遇到不可预知的情况(代码错误)

504网关错误.

HttpServletResponse操作状态码方法

void setStatus(int sc): 设置状态代码.针对于非错误的状态码

例如:setstatus 200

void sendError(int status,String msg) throws IOException 设置错误状态码及信息

例如:response.sendError(404);报404错误

response.sendError(404,一不小心走丢了.........);报错误并且有错误信息

3.response操作响应头

http响应头的格式是 key/value的格式,可以有多个value值,以”,”分开.

例如:

Content-Encoding: gzip

Content-Length: 123

Content-Language: zh-cn

Content-Type: text/html; charset=GB2312

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT

HttpServletResponse操作响应头 API

public void setHeader(String name,String value)

用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值

(设置字符串形式的响应头 注意:若设置过,会覆盖)

public void addHeader(String name, String value)

用给定名称和值添加响应头。此方法允许响应头有多个值

(追加字符串形式的响应头 注意:若没有设置过则设置,若设置过则追加)

public void setIntHeader(String name, int value)

用给定名称和整数值设置响应头。如果已经设置了头,则新值将重写以前的值。

(设置整型的响应头)

public void addIntHeader(String name, int value)

用给定名称和整数值添加响应头。此方法允许响应头有多个值。

(添加整型的响应头)

public voidsetDateHeader(String name, long date)

用给定名称和日期值设置响应头。该日期根据距历元时间的毫秒数指定。如果已经设置了头,则新值将重写以前的值。(设置时间类型的响应头)

public void addDateHeader(String key, long date)

用给定名称和日期值添加响应头。该日期根据距历元时间的毫秒数指定。此方法允许响应头有多个值。(添加时间类型的响应头)

案例1:重定向

图解

实现:

New一个FirstServlet

//1.设置状态码

response.setStatus(302);

//2.设置相应头--跳转目录

response.setHeader(“location”,”http://localhost/day09/second”);

//response.setHeader(“location”,”day09/second”);

开发中我们使用sendRedirect(url);上面两部不需要只要一步实现

例如:response.sendRedirect(“day09/second”);

New一个SecondServlet

实现:

New一个Local1Servlet doget方法下

//1.设置状态码

response.setStatus(302);

//2.设置相应头--跳转目录

response.setHeader(“location”,”http://localhost/day09/local2”);

//response.setHeader(“location”,”day09/second”);

New一个Local2Servlet

案例2:定时跳转

在servlet中,我们通过 (应用注册成功以后给一个提示信息)

response.setHeader(“refresh”,”3,url=http://localhost/day09/demo2.html”);

或者setHeader改为addHeader

response.setHeader("refresh", "3,url=/day09/demo2.html");

response.setHeader("refresh","秒数;url=跳转路径");

在页面中,我们可以通过

<meta http-equiv="refresh" content="5;url=http://localhost/day09/responseDemo3">

页面中通过<meta http-equiv=””>方式操作时,也会将标签内容写入到http响应中。

4.response操作响应体

http响应正文是我们最终在浏览器上看到的结果。(页面上要显示的东西)

对于HttpServletResponse如果想要操作响应正文,需要通过response对象获取到输出流,将信息写回到浏览器端

获得向客户端进行数据输出的流对象

PrintWriter w = response.getWriter();字符流数据输出

例如:往页面输出表格:

response.setContentType(“text/html;charset=utf-8”);设置编码

PrintWriter w=response.getWriter(); 获取字符流

w.print(“<table border=’1’><tr><td>”);

w.print(“用户名<td><td>”);

w.print(“tom</td></tr>”);

w.print(“<tr><td><密码></td><td>1234”);

w.print(“</td></tr></table>”);

OutputStream out = response.getOutputStream();字节流数据输出

自己的东西用字符流,

别人的东西用字节流

响应中文乱码问题

默认情况下,编码格式是ISO-8859-1

response.setCharacterEncoding(“utf-8”);

设置响应流的编码

response.setHeader(“Content-Type”,”text/html;charset=utf-8”);

设置响应流的编码,并且通知浏览器用什么编码打开

<meta http-equiv=”Content-Type”content=”text/html;charset=UTF-8”>

网页上使用

开发常用respons.setContentType(“text/html;charset=utf-8”);

设置响应流的编码,并且通知浏览器用什么编码打开

操作响应正文注意事项

1.getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。

2.getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。

Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。

Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎tomcat将调用close方法关闭该输出流对象。调用close的时候,会调用flushBuffer方法.自动关流

5.生成动态验证码

防止暴力攻击 以后开发上网找一个就可以了

代码:

代码语言:javascript
复制
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//验证码
public class ImageCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 使用java图形界面技术绘制一张图片
int charNum = 4;
int width = 30 * 4;
int height = 30;
// 1. 创建一张内存图片
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 2.获得绘图对象
Graphics graphics = bufferedImage.getGraphics();
// 3、绘制背景颜色
graphics.setColor(Color.YELLOW);
graphics.fillRect(0, 0, width, height);
// 4、绘制图片边框
graphics.setColor(Color.BLUE);
graphics.drawRect(0, 0, width - 1, height - 1);
// 5、输出验证码内容
graphics.setColor(Color.RED);
graphics.setFont(new Font("宋体", Font.BOLD, 20));
// 随机输出4个字符
Graphics2D graphics2d = (Graphics2D) graphics;
String s = "ABCDEFGHGKLMNPQRSTUVWXYZ23456789";
Random random = new Random();
//session中要用到
String msg="";
int x = 5;
for (int i = 0; i < 4; i++) {
int index = random.nextInt(32);
String content = String.valueOf(s.charAt(index));
msg+=content;
double theta = random.nextInt(45) * Math.PI / 180;
//让字体扭曲
graphics2d.rotate(theta, x, 18);
graphics2d.drawString(content, x, 18);
graphics2d.rotate(-theta, x, 18);
x += 30;
}
代码语言:javascript
复制
// 6、绘制干扰线
graphics.setColor(Color.GRAY);
for (int i = 0; i < 5; i++) {
int x1 = random.nextInt(width);
int x2 = random.nextInt(width);
int y1 = random.nextInt(height);
int y2 = random.nextInt(height);
graphics.drawLine(x1, y1, x2, y2);
}
// 释放资源
graphics.dispose();
// 图片输出 ImageIO
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

在网页上显示可以点击图片更换验证码

New一个code.html页面

代码语言:javascript
复制
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<img src="/day10/codeimg" alt="验证码" onclick="changeCode_(this)">
</body>
<script type="text/javascript">
function changeCode(){
//1.获取对象
var obj=document.getElementsByTagName("img")[0];
/*var obj=document.getElementsByTagName("img");
for(var i=0;i<arr.length;i++)
arr[i]="";
*/
//2.设置src属性
//obj.src="/day10/codeimg?i="+Math.random();
obj.src="/day10/codeimg?"+Math.random();
}
function changeCode_(obj){
obj.src="/day10/codeimg?"+Math.random();
}
</script>
</html>

常见的汉字:

代码语言:javascript
复制
String s = "\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1\u4e24\u7528\u5979\u56fd\u52a8\u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\u800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\u53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\u51e0\u4e49\u4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\u7406\u773c\u5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\u4f46\u8eab\u65b9\u5b9e\u5403\u505a\u53eb\u5f53\u4f4f\u542c\u9769\u6253\u5462\u771f\u5168\u624d\u56db\u5df2\u6240\u654c\u4e4b\u6700\u5149\u4ea7\u60c5\u8def\u5206\u603b\u6761\u767d\u8bdd\u4e1c\u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\u513f\u5e38\u6c14\u4e94\u7b2c\u4f7f\u5199\u519b\u5427\u6587\u8fd0\u518d\u679c\u600e\u5b9a\u8bb8\u5feb\u660e\u884c\u56e0\u522b\u98de\u5916\u6811\u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\u671b\u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\u4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\u7ea7\u8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\u610f\u591c\u6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\u6597\u9a6c\u54ea\u5316\u592a\u6307\u53d8\u793e\u4f3c\u58eb\u8005\u5e72\u77f3\u6ee1\u65e5\u51b3\u767e\u539f\u62ff\u7fa4\u7a76\u5404\u516d\u672c\u601d\u89e3\u7acb\u6cb3\u6751\u516b\u96be\u65e9\u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\u4eca\u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f\u51c6\u5f20\u56e2\u5c4b\u79bb\u8272\u8138\u7247\u79d1\u5012\u775b\u5229\u4e16\u521a\u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\u8868\u591f\u6574\u8ba4\u54cd\u96ea\u6d41\u672a\u573a\u8be5\u5e76\u5e95\u6df1\u523b\u5e73\u4f1f\u5fd9\u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\u519c\u53e4\u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\u6e05\u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\u9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\u7a7f\u5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\u7761\u5174\u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\u4f17\u901a\u51b2\u5408\u7834\u53cb\u5ea6\u672f\u996d\u516c\u65c1\u623f\u6781\u5357\u67aa\u8bfb\u6c99\u5c81\u7ebf\u91ce\u575a\u7a7a\u6536\u7b97\u81f3\u653f\u57ce\u52b3\u843d\u94b1\u7279\u56f4\u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\u7c7b\u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\u54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\u53d7\u7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\u5165\u5cb8\u6562\u6389\u5ffd\u79cd\u88c5\u9876\u6025\u6797\u505c\u606f\u53e5\u533a\u8863\u822c\u62a5\u53f6\u538b\u6162\u53d4\u80cc\u7ec6";

三.request

请求:要想获取浏览器发送过来的参数,tongguorequest就可以了

1. request常用api简单介绍

HttpServletRequest对象用于封装http请求,对于http请求它有三部分组成,http请求行,http请求头及请求正文,下图描述了关于封装请求信息方法

2. request操作请求行

格式:请求方式 请求资源 协议/版本

例子:GET /day10 HTTP/1.1

public String getMethod()获取请求方式例如 GET、POST

public String getRequestURI()获取去请求资源(不带参数) 是uri 例如:/day10/r

public String getProtocol()获取协议的名称和版本。(例如 HTTP/1.1)

public String getQueryString()

返回包含在请求 URL 中路径后面的查询字符串。如果 URL 没有查询字符串,则此方法返回 null。

例如:

代码语言:javascript
复制
//获取请求方式
String m= request.getMethod();
//获取请求资源
String url=request.getRequestURI();
//获取协议版本
String pro=request.getProtocol();

☆public String getContextPath()获取的是项目名

public StringBuffer getRequestURL() 获取请求的完整路径

重新构造客户端用于发出请求的 URL。返回的 URL 包含一个协议、服务器名称、端口号、服务器路径,但是不包含查询字符串参数。

public String getRemoteAddr()获取请求的ip地址

返回发送请求的客户端或最后一个代理的 Internet Protocol (IP) 地址

3. request操作请求头

格式:key/value(value可以为多个)

☆public String getHeader(String name) 获取字符串格式的请求头

以 String 的形式返回指定请求头的值。

public java.util.Enumeration<E> getHeaders(String name)获取多个值的请求头

以 String 对象的 Enumeration 的形式返回指定请求头的所有值。

public java.util.Enumeration<E> getHeaderNames()获取所有请求头的名称

返回此请求包含的所有头名称的枚举。如果该请求没有头,则此方法返回一个空枚举。

public int getIntHeader(String name) 获取整型格式的请求头

以 int 的形式返回指定请求头的值。如果该请求没有指定名称的头,则此方法返回 -1。如果无法将头转换为整数,则此方法抛出 NumberFormatException。

public long getDateHeader(String name)获取时间类型的请求头

以表示 Date 对象的 long 值的形式返回指定请求头的值

案例:防盗链

Referer

New一个RefererServlet

doGet方法下

代码语言:javascript
复制
//获取referer
String re=request.getHeader(“referer”);
//判断
if(re==null){
System.out.println(“直接在地址栏输入的........”);
}else if(re.startsWith(“http://localhost”)){
System.out.println(“自己点的...........”);
}else{
System.out.println(“其他人点的........”);
}

浏览器内核:user-agent

4. request获取请求参数(只有post有请求体)

Get请求 地址栏

http://localhost:端口/day10/1.html?username=tom&password=1234&hobby=eat&hobby=sleep

Post请求里面放的是?号后面的东西

请求参数是浏览器发送请求时携带的信息。

Get和Post请求的区别:

GET:参数会追加到地址栏上,post不会

请求参数大小有限制(一般不超过1kb),post没有

POST:相对于get请求安全

有请求体,存放请求参数,get没有

dopost方法里面访问doget方法内容

只要在post方法里调用就可以了反之亦然

doget(request,response);

☆public String getParameter(String name)(获取单一的值)

以 String 形式返回请求参数的值,如果该参数不存在,则返回 null

public String[] getParameterValues(String name)(获取多个值)

返回包含给定请求参数拥有的所有值的 String 对象数组,如果该参数不存在,则返回 null。

☆public java.util .Map<String, String[]> getParameterMap()(以map方式返回的所有的参数和值)

返回此请求的参数的 java.util.Map。请求参数是与请求一起发送的额外信息。对于 HTTP servlet,参数包含在查询字符串或发送的表单数据中。

public java.util.Enumeration<E> getParameterNames()

返回包含此请求中所包含参数的名称的 String 对象的 Enumeration。如果该请求没有参数,则此方法返回一个空的 Enumeration。

New一个Servlet里面doget方法下

例如:

代码语言:javascript
复制
//获取姓名单一
String username= request.getParameter(“uesrname”);
//获取爱好多个
String hobby=request.getParameterValues(“hobby”);
//获取所有参数和值
Map<String,String> map=request.ParameterMap();
//获取所有参数名称
Enumeration<String> names=request.ParamterNames();
System.out.println(“username”);
System.out.println(Arrays.toString(hobby));//打印数组
System.out.println(“----------------------”);
for(String key:map.keySet){
System.out.println(key+”:”+Array.toString(map.get(key)));
}//map遍历(两种方法)
System.out.println(“----------------------”);
while(names.hasMoreElements()){
System.out.println(name.nextElment());
}

5. request获取参数中文出现乱码

原因:

汉字在不同的编码表中的码值不一样,那么在使用不同的编码表进行解码与编码操作时,就会出现乱码问题.

浏览器在提交的时候使用utf-8编码

Tomcat得到请求参数是使用iso8859-1进行了解码,封装到了request中。

在通过request获取请求信息就是乱码。

解决:

先使用iso8859-1进行编码

在使用utf-8进行解码

每个参数都要new才行(get,post方法都可行)

username= new String(username.getBytes(“iso8859-1”),”utf-8”);

如果请求方式是POST,

可以直接使用request.setCharacterEncoding(“utf-8”);就可以解决。

6. request域对象的介绍

request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理.

request

xxxAttribute();

生命周期:一次请求开始,到响应结束之前

setAttribute方法 设置

getAttribute方法 获取

removeAttribute方法 删除

getAttributeNames方法

request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发,从而共享请求中的数据

request.getRequestDispatcher("内部路径").forward(request,response)

请求转发(请求串,请求链)

请求转发可以实现路径的跳转操作.

实现:

New两个Servlet1 和Srevlet2

一个<a href="/day10/dis1?money=10">i_请求转发_借钱</a><br/> 前段链接加入money属性

Servlet1下

request.getRequestDispatcher("内部路径").forward(request,response)

路径为web.xml配置的跳转的Servlet的路径.

代码语言:javascript
复制
System.out.println("我说:等会");
response.getWriter().print("dis111111111111");
request.setAttribute("name", "世纪");
request.getRequestDispatcher("/dis2").forward(request, response);

Servlet2下

代码语言:javascript
复制
String money=request.getParameter("money");
String name=(String) request.getAttribute("name");
response.getWriter().print("dis2222222222222222");
System.out.println("涛哥哥给你"+money+"块钱,然后我借给"+name);

请求转发和重定向的区别

1.请求转发是服务器内部跳转,地址栏不会发生改变

重定向地址栏会发生改变。

2.请求转发,只有一次请求,一次响应.

重定向,有两次请求,两次响应。

3.请求转发存在request域,可以共享数据.

重定向不存在request域。

4.请求转发只能在服务器的内部跳转,简单说,只能访问本站内资源。

重定向可以访问站外资源,也可以访问站内资源.

5.请求转发是由request 发起的 . request.getRequestDispatcher().forward()

重定向是由response 发起的 response.sendRedirect();

6.请求转发与重定向时路径写法不一样.

重定向要跳转的路径是浏览器在次发起的,是浏览器端路径:写法: /工程名/资源

请求转发是服务器内部跳转,这时它与浏览器无关 写法:/资源

7. 请求包含

RequestDispatcher.include()方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能

被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略.include在程序执行上效果类似forward,但是使用forward只有一个程序可以生成响应,include可以由多个程序一同生成响应 ----- 常用来页面布局

New两个html页面分别为 i1.html&i2.html

i1内容1111111111

i2内容22222222222

New一个Servlet get方法下

request.getRequestDispatcher(“/i1.html”).include(request,response);

request.getRequestDispatcher(“/i2.html”).include(request,response);

最后在页面输出的内容为111111111122222222222是两个页面的所用内容.

包含原理

四.案例-登录

1.sql用户表创建

代码语言:javascript
复制
CREATE DATABASE day07;
USE day07
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) ,
PASSWORD VARCHAR(20) ,
email VARCHAR(40)
);
INSERT INTO USER VALUES(NULL,'tom','123','tom@163.com');
INSERT INTO USER VALUES(NULL,'fox','456','fox@163.com');
INSERT INTO USER VALUES(NULL,'james','789','james@163.com');

2.user类

代码语言:javascript
复制
public class User {
private int id;
private String username;
private String password;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + ", email=" + email + "]";
}
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java帮帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • request&response
  • 一.request和response的介绍
  • 二.response
  • 三.request
  • 四.案例-登录
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档