请问servelet开发有没有类似vs的 ef vscode godef这样的流行框架

&&&&&&&&&&&&&
HttpServletResponce
HttpServletResponce
HttpServletResponse对象是有关于对客户端请求之响应,您可以利用它来设定一些要响应的讯息,例如标题信息、响应状态码等
response的常用方法:
  1.向客户端输出中文数据(OutputStream和PrintWriter)
response.setHeader("Content-Type","text/charset=utf-8");
String data = "中国";
OutputStream out =
response.getOutputStream();
out.write(data.getBytes("utf-8"));
/********************************************************************************/
String data = "中国";
OutputStream out = response.getOutputStream();
out.write("&meta http-equiv='content-type' content='text/charset=utf-8'&".getBytes());
out.write(data.getBytes("utf-8"));
/********************************************************************************/
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type","text/charset=utf-8");
String data = "中国";
PrintWriter out =
response.getWriter();
out.write(data);
/********************************************************************************/
response.setContentType("text/charset=utf-8");
String data = "中国";
PrintWriter out = response.getWriter();
out.write(data);
/********************************************************************************/
String data = "中国";
PrintWriter out = response.getWriter();
out.write("&meta http-equiv='content-type' content='text/charset=utf-8'&");
out.write(data);
/********************************************************************************/
2.文件下载与中文文件下载
// String filePath = this.getServletContext().getRealPath("/Download/呵呵.jpg");
String filePath = this.getServletContext().getRealPath("/Download/呵呵.txt");
String fileName = filePath.substring(filePath.lastIndexOf("\\") + 1);
System.out.println(fileName);
// 设置回送数据打开方式
response.setHeader("content-disposition", "filename="+ URLEncoder.encode(fileName, "utf8"));
InputStream inS = null;
OutputStream outS = null;
inS = new FileInputStream(filePath);
int len = 0;
byte[] buff = new byte[1024];
outS = response.getOutputStream();
while ((len = inS.read(buff)) & 0) {
outS.write(buff, 0, len);
} catch (IOException e) {
if (inS != null) {
inS.close();
} catch (IOException e2) {
if (outS != null) {
outS.close();
} catch (IOException e3) {
3.输出随机图片(验证码)
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
BufferedImage image = new BufferedImage(//
, HEIGHT//
,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 1.设置背景色
setBackGround(g);
// 2.设置边框
setBorder(g);
// 3.画干扰线
drawRandomLine(g);
// 4.写随机数
drawRandomNum((Graphics2D) g);
// 5.输出到浏览器
response.setContentType("image/jpeg");
// 发表头控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());
private void setBackGround(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
private void drawRandomLine(Graphics g) {
g.setColor(Color.GREEN);
for (int i = 0; i & 5; i++) {
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int x2 = new Random().nextInt(WIDTH);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
private void drawRandomNum(Graphics2D g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));
//常用中文的Unicode编码
String base = "\u\u662f\u4e86\ud\u4eba\u\u\u4e2a\u4e0a\u4eec\u\u65f6\u\u4e3a\u5b50\u4e2d\u4f60\u8bf4\u751f\u56fd\u5e74\u\u90a3\u548c\u\u51fa\u4e5f\u5f97\u91cc\u540e\u81ea\u4ee5\u4f1a\u5bb6\u53ef\u4e0b\u800c\u8fc7\u5929\u53bb\u80fd\u5bf9\u5c0f\u591a\ue\u5fc3\u5b66\u4e48\u4e4b\u90fd\u597d\u770b\u8d77\u53d1\u5f53\u6ca1\u6210\u53ea\ub\u628a\u8fd8\uc\u\u60f3\u4f5c\u79cd\u5f00\u7f8e\u603b\u4ece\u65e0\u60c5\u5df1\u\u\u73b0\u524d\u4e9b\uc\u65e5\u624b\u53c8\u884c\u610f\u52a8\u65b9\u671f\u5b83\u5934\u7ecf\u957f\u513f\u56de\u4f4d\u\u\u5f88\u7ed9\u540d\u6cd5\u95f4\u65af\u77e5\u4e16\u4ec0\u4e24\u6b21\u4f7f\u8eab\u8005\u88ab\u9ad8\u5df2\u4eb2\u5176\u8fdb\u6b64\u8bdd\u5e38\u4e0e\u6d3b\u6b63\u611f\u89c1\u660e\u95ee\u529b\u\u70b9\u\u5b9a\u672c\u516c\ua\u\u76f8\u897f\u679c\u8d70\u5c06\u\u5b9e\u\u8f66\u\u91cd\u4e09\u673a\u5de5\u\u6bcf\u5e76\u522b\u771f\ua\u65b0\u6bd4\u624d\u4fbf\u592b\u518d\u4e66\u90e8\u6c34\u50cf\u773c\u7b49\u4f53\u\ub\u754c\u95e8\u\u53d7\u542c\u\u5c11\u514b\u4ee3\u\u7a1c\u\ub\u5b89\u\u9a6c\ud\uf\u96be\u671b\ud\u82b1\u7ed3\u4e50\u\u62c9\u4e1c\u795e\u8bb0\u\u6bcd\u\u76f4\u5b57\u573a\u5e73\u62a5\u53cb\ue\u81f3\u5f20\u8ba4\u63a5\u544a\u\u\u519b\u\u5c81\u5f80\u4f55\u5ea6\u5c71\u89c9\u8def\u5e26\u4e07\u\u98ce\u89e3\u53eb\u4efb\u91d1\u5feb\u539f\u\u53d8\u901a\u5e08\u7acb\u8c61\u6570\u56db\u\u6218\u8fdc\u683c\u58eb\u97f3\u8f7b\u76ee\u\u75c5\u59cb\u8fbe\u6df1\u5b8c\u4eca\u63d0\u6c42\u6e05\u738b\ua\u4e1a\u601d\ue\u975e\u627e\u\u94b1\u7d36\u5417\u8bed\uc\u66fe\u79bb\u98de\u79d1\u8a00\u5e72\u6d41\u6b22\u7ea6\u\u\u53cd\u\u8be5\u8bba\u4ea4\u7ec8\u\u533b\u665a\u\u51b3\u7aa2\u4f20\u753b\u4fdd\u8bfb\u8fd0\u53ca\uf\u65e9\u9662\u91cf\u82e6\u706b\u5e03\u54c1\u8fd1\u\u7b54\u661f\u7cbe\u89c6\u4e94\u8fde\u53f8\u5df4\u\u7c7b\u672a\u670b\u4e14\u5a5a\u53f0\u591c\u\u961f\u4e45\u4e4e\u8d8a\u89c2\u843d\u5c3d\u5f62\u5f71\u7ea2\ue\u4ee4\u\u8bc6\u6b65\u5e0c\u4e9a\u672f\u\u534a\u70ed\u\u\u5bb9\uf\u6f14\u\u\uf\u53d6\ue\u5f3a\u77f3\u53e4\u534e\u8ae3\u62ff\u8ba1\u60a8\u88c5\u4f3c\u8db3\u53cc\u59bb\u5c3c\u8f6c\u8bc9\u7c73\u79f0\u4e3d\u5ba2\u\u\u7ad9\u9ed1\u523b\u7edf\u65ad\u798f\u57ce\u\u60ca\u\u\u4e89\u53e6\u5efa\u7ef4\u7edd\u6811\u7cfb\u4f24\u793a\u613f\u\u53f2\u8c01\u51c6\u\u7eaa\u57fa\u4e70\u5fd7\uf\u8bd7\u72ec\u590d\u75db\u6d88\u793e\u7b97\u4e49\u7adf\u786e\u\u5355\u6cbb\u\u\u4e3e\u4ec5\u949f\u\u6bdb\u53e5\u606f\u529f\u5b98\u5f85\u7a76\u8ddf\u7a7f\u5ba4\u\u7a0b\u53f7\u5c45\u\u76ae\u54ea\u8d39\u\u56fe\ua\u\u6b4c\u54cd\uc\u7ec6\u4e13\u9ec4\ua\u\ue\u822c\u\u98df\u4ecd\u5b58\u4f17\u6ce8\u7b14\u751a\u67d0\u6c89\u\u4e60\u\u52a1\u571f\u5fae\u5a18\u987b\u8bd5\u\u8c03\u5e7f\u8716\u82cf\u663e\u8d5b\u67e5\u5bc6\u8bae\u5e95\u5217\u5bcc\u68a6\u\u53c2\u516b\u\u4eae\u\u8bbe\u7ebf\u6e29\u867d\u6389\u4eac\u521d\u517b\uc\u\u\u674e\u7eb3\u9a8c\u52a9\u6fc0\u591f\u4e25\u8bc1\u5e1d\u996d\u5fd8\u8da3\u652f\u\u4e08\u\u73ed\u666e\u5bfc\u987f\u\u8df3\u83b7\u827a\u516d\u6ce2\u5bdf\u7fa4\u\u6025\u5ead\u521b\u533a\u\u8c22\u5f1f\u5e97\u\u\u80cc\u6b62\u7ec4\u5dde\u671d\u5c01\u775b\u677f\u89d2\u51b5\u66f2\u\u5fd9\u8d28\u6cb3\u7eed\u54e5\u547c\u82e5\u63a8\u\u96e8\u\u\u\u62a4\u51b7\u8b66\u8d1d\u8457\u96ea\u7d22\ua\u\u70df\u4f9d\uc\u5e2e\u6c49\ub\u80af\u95fb\u\u5c40\u4f2f\u65cf\u4f4e\u73a9\u8d44\u5c4b\u51fb\u901f\u987e\u6cea\u6d32\u56e2\u\u\u4e03\u9732\u56ed\u725b\u54ed\u65c5\u\u578b\u70c8\u59d1\u9648\u83ab\u9c7c\u5f02\u62b1\u5b9d\u\u7b80\u\ua\u5bfb\ub\u80dc\u4efd\u6c7d\u53f3\u6d0b\ua\u821e\u79d8\ub\u697c\u8d35\u\u4f8b\u8ffd\u8f83\u804c\u5c5e\u6e10\u5de6\u5f55\u4e1d\ua\u7ee7\u\u7ae0\u667a\u51b2\u53f6\u80e1\u\u575a\u559d\u\u6551\u4fee\u677e\u4e34\u85cf\u62c5\u620f\ub\u836f\u60b2\u\u4f0a\u\u8bcd\u68ee\u8033\u5dee\u77ed\u\u89c4\u7a97\u\u6cb9\u65e7\u\u67b6\u\u5f39\u94c1\u535a\u96f7\u5e9c\u538b\u8d85\u8d1f\u52d2\u\u6d17\u91c7\u6beb\u\u4e5d\u51b0\u65e2\u72b6\u4e71\u666f\u5e2d\u73cd\u7ae5\ue\u7d20\uc\u\u91ce\u6309\u72af\u62cd\u5f81\u574f\u9aa8\u4f59\u627f\u7f6e\u81d3\u5f69\u706f\u5de8\ud\u73af\u59c6\u\u6280\u7ffb\u675f\u589e\u5fcd\ub\u585e\u7f3a\u5fc6\u\u5c42\u4ed8\ub\ub\u\u4f11\u61c2\u6b66\uf\ub\u59d4\u62e5\u5a1c\u\u\u\u5f04\u684c\u719f\u8bfa\u5ba3\u94f6\u52bf\u5956\u5bab\u5ffd\u\u4f9b\u4f18\u8bfe\u9e1f\u558a\u964d\u590f\u56f0\ua\u4ea1\u978b\u\u8d25\u4f34\u5b88\uc\u8d22\u5b64\u67aa\u\u4f19\u\u59b9\u85f8\u904d\u76d6\u526f\uc\u6c5f\u987a\u79cb\u8428\u83dc\u\u5f52\u6d6a\u542c\u51e1\u\u96c4\u\u7f16\ub\u83b1\u542b\u76db\u6d4e\u8499\u68cb\u7aef\u817f\u62db\u91ca\u4ecb\u70e7\u8bef";
for (int i = 0; i & 4; i++) {
int degree = new Random().nextInt() % 30;
String ch = base.charAt(new Random().nextInt(base.length())) + "";
int x1 = 5 + i * 30;// +(new Random().nextInt()%5);
int y1 = 20;
g.rotate(degree * Math.PI / 180, x1, y1);// degree*Math.PI/180
// 设置旋转的弧度
g.drawString(ch, x1, y1);
// 将旋转返回原点
g.rotate(-degree * Math.PI / 180, x1, y1);
//使用方法
&img style="cursor:hand" alt="刷新" src="/ServletDemo/responseDemo4" onclick="fincton(this.src = this.src +'?time='+ new Date().getTime)"&&br /&
4.发送HTTP响应头
//解释为图片
response.setContentType("image/jpeg");
// 发表头控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
//控制页面刷新
String message = "&meta http-equiv='refresh' content='3;url=/ServletDemo/register.html'&3秒后跳到首页,如果没有跳转,请3秒后点击&a href='/ServletDemo/register.html'&超链接&/a&";
this.getServletContext().setAttribute("message",message);
//控制页面刷新,假设程序运行到此,用户登录成功了。
response.setCharacterEncoding("UTF-8");
response.setContentType("text/charset=UTF-8");
response.setHeader("refresh","3;url='/ServletDemo/register.html'");
response.getWriter().write("3秒后跳到首页,如果没有跳转,请3秒后点击&a href='/ServletDemo/register.html'&超链接&/a&");
//控制页面刷新
response.setHeader("refresh","3");
String data = new Random().nextInt(100000)+"";
response.getWriter().write(data);
//设置缓存一小时。设置了缓存后一小时内不会向服务器重新加载而是在本地加载。 这个技术可以用于网站加载js文件、图片、等固定的元素,减轻服务器负载
response.setDateHeader("expires",System.currentTimeMillis()+);
5.实现请求重定向
重定向的特点:
1.浏览器会向服务器发送两次请求,这意味着就用两个不同servlet、response、request
2.用重定向技术后,浏览器的地址栏会发生变化
response.setStatus(302);
response.setHeader("location", "/ServletDemo/index.jsp");*/
/********************************************************************************/
response.sendRedirect("/ServletDemo/index.jsp");
6.response细节
1.getOutputStream 和 getWriter 方法两者相互排斥,调用了这个就不能再调用另一个了。//IllegalStateException
2.getOutputStream 和 getWriter 不用手动关闭否则会出错,因为 Servlet会自动调用close关闭。
HttpServletResponce
HttpServletResponse对象是有关于对客户端请求之响应,您可以利用它来设定一些要响应的讯息,例如标题信息、响应状态码等
response的常用方法:  1.向客户端输出中文数据(OutputStream和PrintWriter)
    response.setHeader("Content-Type","text/charset=utf-8");
    String data = "中国";
    OutputStream out =
response.getOutputStream();
    out.write(data.getBytes("utf-8"));
    /********************************************************************************/
    String data = "中国";
    OutputStream out = response.getOutputStream();
    out.write("&meta http-equiv='content-type' content='text/charset=utf-8'&".getBytes());
    out.write(data.getBytes("utf-8"));
    /********************************************************************************/
    response.setCharacterEncoding("utf-8");
    response.setHeader("Content-Type","text/charset=utf-8");
    String data = "中国";
    PrintWriter out =
response.getWriter();
    out.write(data);
    /********************************************************************************/
    response.setContentType("text/charset=utf-8");
    String data = "中国";
    PrintWriter out = response.getWriter();
    out.write(data);
    /********************************************************************************/
    String data = "中国";
    PrintWriter out = response.getWriter();
    out.write("&meta http-equiv='content-type' content='text/charset=utf-8'&");
    out.write(data);
    /********************************************************************************/
2.文件下载与中文文件下载
    // String filePath = this.getServletContext().getRealPath("/Download/呵呵.jpg");
    String filePath = this.getServletContext().getRealPath("/Download/呵呵.txt");
    String fileName = filePath.substring(filePath.lastIndexOf("\\") + 1);
    System.out.println(fileName);
    // 设置回送数据打开方式
    response.setHeader("content-disposition", "filename="+ URLEncoder.encode(fileName, "utf8"));
    InputStream inS =
    OutputStream outS =
     try {
        inS = new FileInputStream(filePath);
        int len = 0;
        byte[] buff = new byte[1024];
        outS = response.getOutputStream();
        while ((len = inS.read(buff)) & 0) {
          outS.write(buff, 0, len);
        }
      } catch (IOException e) {
      try {if (inS != null) {inS.close();}} catch (IOException e2) {}
      try {if (outS != null) {outS.close();}} catch (IOException e3) {}
3.输出随机图片(验证码)
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
BufferedImage image = new BufferedImage(//
, HEIGHT//
,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 1.设置背景色
setBackGround(g);
// 2.设置边框
setBorder(g);
// 3.画干扰线
drawRandomLine(g);
// 4.写随机数
drawRandomNum((Graphics2D) g);
// 5.输出到浏览器
response.setContentType("image/jpeg");
// 发表头控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());
private void setBackGround(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
private void drawRandomLine(Graphics g) {
g.setColor(Color.GREEN);
for (int i = 0; i & 5; i++) {
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int x2 = new Random().nextInt(WIDTH);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
private void drawRandomNum(Graphics2D g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));
//常用中文的Unicode编码
String base = "\u\u662f\u4e86\ud\u4eba\u\u\u4e2a\u4e0a\u4eec\u\u65f6\u\u4e3a\u5b50\u4e2d\u4f60\u8bf4\u751f\u56fd\u5e74\u\u90a3\u548c\u\u51fa\u4e5f\u5f97\u91cc\u540e\u81ea\u4ee5\u4f1a\u5bb6\u53ef\u4e0b\u800c\u8fc7\u5929\u53bb\u80fd\u5bf9\u5c0f\u591a\ue\u5fc3\u5b66\u4e48\u4e4b\u90fd\u597d\u770b\u8d77\u53d1\u5f53\u6ca1\u6210\u53ea\ub\u628a\u8fd8\uc\u\u60f3\u4f5c\u79cd\u5f00\u7f8e\u603b\u4ece\u65e0\u60c5\u5df1\u\u\u73b0\u524d\u4e9b\uc\u65e5\u624b\u53c8\u884c\u610f\u52a8\u65b9\u671f\u5b83\u5934\u7ecf\u957f\u513f\u56de\u4f4d\u\u\u5f88\u7ed9\u540d\u6cd5\u95f4\u65af\u77e5\u4e16\u4ec0\u4e24\u6b21\u4f7f\u8eab\u8005\u88ab\u9ad8\u5df2\u4eb2\u5176\u8fdb\u6b64\u8bdd\u5e38\u4e0e\u6d3b\u6b63\u611f\u89c1\u660e\u95ee\u529b\u\u70b9\u\u5b9a\u672c\u516c\ua\u\u76f8\u897f\u679c\u8d70\u5c06\u\u5b9e\u\u8f66\u\u91cd\u4e09\u673a\u5de5\u\u6bcf\u5e76\u522b\u771f\ua\u65b0\u6bd4\u624d\u4fbf\u592b\u518d\u4e66\u90e8\u6c34\u50cf\u773c\u7b49\u4f53\u\ub\u754c\u95e8\u\u53d7\u542c\u\u5c11\u514b\u4ee3\u\u7a1c\u\ub\u5b89\u\u9a6c\ud\uf\u96be\u671b\ud\u82b1\u7ed3\u4e50\u\u62c9\u4e1c\u795e\u8bb0\u\u6bcd\u\u76f4\u5b57\u573a\u5e73\u62a5\u53cb\ue\u81f3\u5f20\u8ba4\u63a5\u544a\u\u\u519b\u\u5c81\u5f80\u4f55\u5ea6\u5c71\u89c9\u8def\u5e26\u4e07\u\u98ce\u89e3\u53eb\u4efb\u91d1\u5feb\u539f\u\u53d8\u901a\u5e08\u7acb\u8c61\u6570\u56db\u\u6218\u8fdc\u683c\u58eb\u97f3\u8f7b\u76ee\u\u75c5\u59cb\u8fbe\u6df1\u5b8c\u4eca\u63d0\u6c42\u6e05\u738b\ua\u4e1a\u601d\ue\u975e\u627e\u\u94b1\u7d36\u5417\u8bed\uc\u66fe\u79bb\u98de\u79d1\u8a00\u5e72\u6d41\u6b22\u7ea6\u\u\u53cd\u\u8be5\u8bba\u4ea4\u7ec8\u\u533b\u665a\u\u51b3\u7aa2\u4f20\u753b\u4fdd\u8bfb\u8fd0\u53ca\uf\u65e9\u9662\u91cf\u82e6\u706b\u5e03\u54c1\u8fd1\u\u7b54\u661f\u7cbe\u89c6\u4e94\u8fde\u53f8\u5df4\u\u7c7b\u672a\u670b\u4e14\u5a5a\u53f0\u591c\u\u961f\u4e45\u4e4e\u8d8a\u89c2\u843d\u5c3d\u5f62\u5f71\u7ea2\ue\u4ee4\u\u8bc6\u6b65\u5e0c\u4e9a\u672f\u\u534a\u70ed\u\u\u5bb9\uf\u6f14\u\u\uf\u53d6\ue\u5f3a\u77f3\u53e4\u534e\u8ae3\u62ff\u8ba1\u60a8\u88c5\u4f3c\u8db3\u53cc\u59bb\u5c3c\u8f6c\u8bc9\u7c73\u79f0\u4e3d\u5ba2\u\u\u7ad9\u9ed1\u523b\u7edf\u65ad\u798f\u57ce\u\u60ca\u\u\u4e89\u53e6\u5efa\u7ef4\u7edd\u6811\u7cfb\u4f24\u793a\u613f\u\u53f2\u8c01\u51c6\u\u7eaa\u57fa\u4e70\u5fd7\uf\u8bd7\u72ec\u590d\u75db\u6d88\u793e\u7b97\u4e49\u7adf\u786e\u\u5355\u6cbb\u\u\u4e3e\u4ec5\u949f\u\u6bdb\u53e5\u606f\u529f\u5b98\u5f85\u7a76\u8ddf\u7a7f\u5ba4\u\u7a0b\u53f7\u5c45\u\u76ae\u54ea\u8d39\u\u56fe\ua\u\u6b4c\u54cd\uc\u7ec6\u4e13\u9ec4\ua\u\ue\u822c\u\u98df\u4ecd\u5b58\u4f17\u6ce8\u7b14\u751a\u67d0\u6c89\u\u4e60\u\u52a1\u571f\u5fae\u5a18\u987b\u8bd5\u\u8c03\u5e7f\u8716\u82cf\u663e\u8d5b\u67e5\u5bc6\u8bae\u5e95\u5217\u5bcc\u68a6\u\u53c2\u516b\u\u4eae\u\u8bbe\u7ebf\u6e29\u867d\u6389\u4eac\u521d\u517b\uc\u\u\u674e\u7eb3\u9a8c\u52a9\u6fc0\u591f\u4e25\u8bc1\u5e1d\u996d\u5fd8\u8da3\u652f\u\u4e08\u\u73ed\u666e\u5bfc\u987f\u\u8df3\u83b7\u827a\u516d\u6ce2\u5bdf\u7fa4\u\u6025\u5ead\u521b\u533a\u\u8c22\u5f1f\u5e97\u\u\u80cc\u6b62\u7ec4\u5dde\u671d\u5c01\u775b\u677f\u89d2\u51b5\u66f2\u\u5fd9\u8d28\u6cb3\u7eed\u54e5\u547c\u82e5\u63a8\u\u96e8\u\u\u\u62a4\u51b7\u8b66\u8d1d\u8457\u96ea\u7d22\ua\u\u70df\u4f9d\uc\u5e2e\u6c49\ub\u80af\u95fb\u\u5c40\u4f2f\u65cf\u4f4e\u73a9\u8d44\u5c4b\u51fb\u901f\u987e\u6cea\u6d32\u56e2\u\u\u4e03\u9732\u56ed\u725b\u54ed\u65c5\u\u578b\u70c8\u59d1\u9648\u83ab\u9c7c\u5f02\u62b1\u5b9d\u\u7b80\u\ua\u5bfb\ub\u80dc\u4efd\u6c7d\u53f3\u6d0b\ua\u821e\u79d8\ub\u697c\u8d35\u\u4f8b\u8ffd\u8f83\u804c\u5c5e\u6e10\u5de6\u5f55\u4e1d\ua\u7ee7\u\u7ae0\u667a\u51b2\u53f6\u80e1\u\u575a\u559d\u\u6551\u4fee\u677e\u4e34\u85cf\u62c5\u620f\ub\u836f\u60b2\u\u4f0a\u\u8bcd\u68ee\u8033\u5dee\u77ed\u\u89c4\u7a97\u\u6cb9\u65e7\u\u67b6\u\u5f39\u94c1\u535a\u96f7\u5e9c\u538b\u8d85\u8d1f\u52d2\u\u6d17\u91c7\u6beb\u\u4e5d\u51b0\u65e2\u72b6\u4e71\u666f\u5e2d\u73cd\u7ae5\ue\u7d20\uc\u\u91ce\u6309\u72af\u62cd\u5f81\u574f\u9aa8\u4f59\u627f\u7f6e\u81d3\u5f69\u706f\u5de8\ud\u73af\u59c6\u\u6280\u7ffb\u675f\u589e\u5fcd\ub\u585e\u7f3a\u5fc6\u\u5c42\u4ed8\ub\ub\u\u4f11\u61c2\u6b66\uf\ub\u59d4\u62e5\u5a1c\u\u\u\u5f04\u684c\u719f\u8bfa\u5ba3\u94f6\u52bf\u5956\u5bab\u5ffd\u\u4f9b\u4f18\u8bfe\u9e1f\u558a\u964d\u590f\u56f0\ua\u4ea1\u978b\u\u8d25\u4f34\u5b88\uc\u8d22\u5b64\u67aa\u\u4f19\u\u59b9\u85f8\u904d\u76d6\u526f\uc\u6c5f\u987a\u79cb\u8428\u83dc\u\u5f52\u6d6a\u542c\u51e1\u\u96c4\u\u7f16\ub\u83b1\u542b\u76db\u6d4e\u8499\u68cb\u7aef\u817f\u62db\u91ca\u4ecb\u70e7\u8bef";
for (int i = 0; i & 4; i++) {
int degree = new Random().nextInt() % 30;
String ch = base.charAt(new Random().nextInt(base.length())) + "";
int x1 = 5 + i * 30;// +(new Random().nextInt()%5);
int y1 = 20;
g.rotate(degree * Math.PI / 180, x1, y1);// degree*Math.PI/180
// 设置旋转的弧度
g.drawString(ch, x1, y1);
// 将旋转返回原点
g.rotate(-degree * Math.PI / 180, x1, y1);
//使用方法
&img style="cursor:hand" alt="刷新" src="/ServletDemo/responseDemo4" onclick="fincton(this.src = this.src +'?time='+ new Date().getTime)"&&br /&
4.发送HTTP响应头
  //解释为图片
    response.setContentType("image/jpeg");
  // 发表头控制浏览器不要缓存
    response.setDateHeader("expries", -1);
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
  //控制页面刷新    String message = "&meta http-equiv='refresh' content='3;url=/ServletDemo/register.html'&3秒后跳到首页,如果没有跳转,请3秒后点击&a href='/ServletDemo/register.html'&超链接&/a&";
    this.getServletContext().setAttribute("message",message);//测试,实际情况不是使用Context域
  //控制页面刷新,假设程序运行到此,用户登录成功了。
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/charset=UTF-8");
    response.setHeader("refresh","3;url='/ServletDemo/register.html'");
    response.getWriter().write("3秒后跳到首页,如果没有跳转,请3秒后点击&a href='/ServletDemo/register.html'&超链接&/a&");
  //控制页面刷新
    response.setHeader("refresh","3");
    String data = new Random().nextInt(100000)+"";
    response.getWriter().write(data);
  //设置缓存一小时。设置了缓存后一小时内不会向服务器重新加载而是在本地加载。 这个技术可以用于网站加载js文件、图片、等固定的元素,减轻服务器负载
    response.setDateHeader("expires",System.currentTimeMillis()+);
5.实现请求重定向
  重定向的特点:
    1.浏览器会向服务器发送两次请求,这意味着就用两个不同servlet、response、request
    2.用重定向技术后,浏览器的地址栏会发生变化
    response.setStatus(302);
    response.setHeader("location", "/ServletDemo/index.jsp");*/
    /********************************************************************************/
    response.sendRedirect("/ServletDemo/index.jsp");
6.response细节(切记)
    1.getOutputStream 和 getWriter 方法两者相互排斥,调用了这个就不能再调用另一个了。//IllegalStateException
    2.getOutputStream 和 getWriter 不用手动关闭否则会出错,因为 Servlet会自动调用close关闭。
&posted on
阅读(...) 评论()

我要回帖

更多关于 vscode ef 的文章

 

随机推荐