首页
留言
友链
壁纸
更多
直播
追番
统计
关于
Search
1
欢迎使用 Typecho
201 阅读
2
为Joe主题增加表情包
177 阅读
3
Java的一些基础知识总结
149 阅读
4
『转载』Linux文件自动备份百度网盘
147 阅读
5
【分享】Cad2022安装包以及安装
133 阅读
默认分类
Java
Java基础知识
Java面向对象
JavaWeb服务
前端三剑客
HTML
JS
Typecho
前端小结
Vue
登录
/
注册
Search
标签搜索
Java
Servlet
HTML
面向对象
Vue
Web
JS
Typecho
Typora
Markdown
乐抖系统
Typecho主题
技术教程
类与对象
基础知识
Tomcat
Maven
Linux
MySQL
Mybatis
白衣少年
累计撰写
49
篇文章
累计收到
45
条评论
首页
栏目
默认分类
Java
Java基础知识
Java面向对象
JavaWeb服务
前端三剑客
HTML
JS
Typecho
前端小结
Vue
页面
留言
友链
壁纸
直播
追番
统计
关于
用户登录
登录
注册
搜索到
13
篇
标签为
Servlet
的文章
2022-11-10
Java-Jsp的一些语法与指令
Jsp基础语法Jsp表达式<%-- jsp表达式 作用:用来将程雪输出,写到客户端 <%= 变量名/表达式%> --%> <%= new java.util.Date()%>Jsp脚本片段<%-- jsp脚本片段 --%> <% int sum=0; for (int i = 0; i < 10; i++) { sum+=i; } out.println("<h1>Sum="+sum+"</h1>"); %> <%-- 嵌入正常的标签 --%> <% int x=10; out.print(x); %> <p>这是一个jsp文档</p> <% int y=20; out.print(20); %> <%-- ------------------------------------ --%> <%-- 在代码中嵌入html元素 --%> <% for (int i = 0; i < 5; i++) { %> <h1>HelloWorld,<%= new java.util.Date()%></h1> <% } %>脚本片段的再实现<%-- 在代码中嵌入html元素 --%> <% for (int i = 0; i < 5; i++) { %> <h1>HelloWorld,<%= new java.util.Date()%></h1> <% } %>Jsp声明<%! static { System.out.println("Loading Servlet..."); } private int globalVar=0; public void jspInit(){ System.out.println("进入了初始化方法"); } %>Jsp声明 :这些代码会被便衣到jsp生成的类d当中,其他的会被编译到_jspService方法内部Jsp的注释,不会再客户端显示,html的注释会显示Jsp指令<!-- 配置错误页面 --> <error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/500.jsp</location> </error-page> <!-- 导入jar包 --> <%@ page import="java.util.Date" %> <!-- 指定错误页面 --> <%@ page errorPage="error/500.jsp" %> <!-- 显示的声明这是一个错误页面 --> <%@page isErrorPage="true" %> <!-- 页面编码格式 --> <%@page pageEncoding="utf-8" %><%-- @include会将页面整合在一起 --%> <!-- 定义的变量会相互影响 --> <%@include file="common/header.jsp"%> <h1>网页主体</h1> <%@include file="common/footer.jsp"%> <hr> <%-- jsp标签jsp:include 是将页面拼接在一起,本质还是分开的页面 --%> <!-- 定义的变量互不影响 --> <jsp:include page="/common/header.jsp"/> <h1>网页主体</h1> <jsp:include page="/common/footer.jsp"/>Jsp标签使用之前需要导入jar包支持 <!-- jstl表达式的依赖 --> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!-- standard标签库 --> <!-- https://mvnrepository.com/artifact/taglibs/standard --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>el表达式表达式格式:${}1.获取数据 2.执行运算 3.获取web开发常用对象取出值:<h3> ${param.get("name1")} ${param.get("name2")} </h3>jstl标签jstl标签库的使用就为未来弥补html标签的不足,有自定的标签,标签的功能和java代码一样核心标签(要求掌握部分<c:out> 用于在JSP中显示数据,就像<%= ... > <c:set> 用于保存数据 <c:remove> 用于删除数据 <c:if> 与我们在一般程序中用的if一样 <c:choose> 本身只当做<c:when>和<c:otherwise>的父标签 <c:when> <c:choose>的子标签,用来判断条件是否成立 <c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 <c:forEach> 基础迭代标签,接受多种集合类型 <c:url> 使用可选的查询参数来创造一个URL引入标签<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- c:core fmt:format sql:sql x:xml tomcat的仓库中也需要引入standard和jstl的jar包,不然服务器无法运行 -->调用方法 c:if<%@ page contenttype="text/html;charset=utf-8" language="java" %> <%--引入jstl核心标签库,我们才能使用核心标签--%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>title</title> </head> <body> <h4>if测试</h4> <hr> <form action="jstlcore1.jsp" method="get"> <%-- el表达式获取表单中的数据: ${param.参数名} --%> <input type="text" name="username" value="${param.username}"> <input type="submit" value="登录"> </form> <%--判断如果是管理员就登陆成功--%> <c:if test="${param.username=='admin'}" scope="page" var="isadmin"> <c:out value="<h3>登录成功<h3>"/> </c:if> <c:out value="${isadmin}"/> </body> </html>c:choose<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <c:set var="score" value="50"/> <c:choose> <c:when test="${score>=60}"> <c:out value="成绩合格"/> </c:when> <c:otherwise> <c:out value="需要补考"/> </c:otherwise> </c:choose> </body> </html>c:forEach<%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Arrays" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <% ArrayList<String> array=new ArrayList<>(); array.add("h1"); array.add("h2"); array.add("h3"); array.add("h4"); request.setAttribute("list",array); %> <%-- hs 储存便遍历的数据 items 被遍历的的对象 --%> <c:forEach var="hs" items="${list}"> <c:out value="${hs}"/><br> </c:forEach> <hr> <c:forEach var="hs" items="${list}" varStatus=""> </c:forEach> </body> </html>
2022年11月10日
103 阅读
0 评论
3 点赞
2022-11-10
Java-Jsp是什么原理又是什么
什么是JspJava Server Page : Java服务器端页面,和Servlet一样,用于 动态Web 技术最大的特点语法和HTML类似区别HTML只给用户提供静态的数据JSP页面可以嵌入Java代码,为用户提供动态数据Jsp原理Jsp是怎么执行的?代码层面 :<html> <body> <h2>Hello World!</h2> </body> </html>服务器内部 :tomcat中有一个work目录;idea使用tomcat的会在idea的tomcat中产生一个work目录发现D:\Environment\apache-tomcat-9.0.0.M6\work\Catalina\localhost\ROOT\org\apache\jsp目录下的文件是java程序,jsp最终被转化成了java类结论 :浏览器向服务器发送请求,不管访问什么资源,都是在访问serveltpublic final class index_jsp extends org.apache.jasper.runtime.HttpJspBase //-------------------- public abstract class HttpJspBase extends HttpServlet implements HttpJspPage //-------------------- //初始化 public void _jspInit() //销毁 public void _jspDestroy() //JSPService public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException判断请求内置一些对象final javax.servlet.jsp.PageContext pageContext;//页面上下文 final javax.servlet.ServletContext application;//application final javax.servlet.ServletConfig config;//配置 javax.servlet.jsp.JspWriter out = null;//页面输出流 final java.lang.Object page = this;//页面本身 final javax.servlet.http.HttpServletRequest request final javax.servlet.http.HttpServletResponse response输出页面前增加的代码response.setContentType("text/html; charset=UTF-8");//设置响应页面类型 pageContext = _jspxFactory.getPageContext(this, request, response,null, false, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); out = pageContext.getOut(); _jspx_out = out;以上对象我们可以在JSP页面中直接使用在jsp中:只要是java代码,就会原封不动的输出html代码会被out.weite()方法写出
2022年11月10日
52 阅读
0 评论
3 点赞
2022-11-07
Java-Request的应用
什么是RequestHttpServletRequest代表客户端的请求,用户通过Http协议访问服务器;HTTP请求中的所有信息会被封装到HttpServletRequest 简单来说,要得到浏览器信息,就找HttpServletRequest对象HttpServletRequest常用方法获得客户机【浏览器】信息getRequestURL方法返回客户端发出请求时的完整URL。getRequestURI方法返回请求行中的资源名部分。getQueryString 方法返回请求行中的参数部分。getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。getRemoteAddr方法返回发出请求的客户机的IP地址getRemoteHost方法返回发出请求的客户机的完整主机名getRemotePort方法返回客户机所使用的网络端口号getLocalAddr方法返回WEB服务器的IP地址。getLocalName方法返回WEB服务器的主机名获得客户机请求头getHeader方法getHeaders方法getHeaderNames方法获得客户机请求参数(客户端提交的数据)getParameter方法getParameterValues(String name)方法getParameterNames方法getParameterMap方法获取前端传递的参数,请求转发//重点学习 public String getParameter(String name); public String[] getParameterValues(String name); //可以忽略 public Enumeration<String> getParameterNames(); public Map<String, String[]> getParameterMap();public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题 resp.setCharacterEncoding("utf-8"); req.setCharacterEncoding("utf-8"); String username = req.getParameter("username"); String password = req.getParameter("password"); String[] hobbys = req.getParameterValues("hobby"); System.out.println("=================================="); System.out.println(username+":"+password); System.out.println("爱好"+ Arrays.toString(hobbys)); System.out.println("=================================="); //这里不需要写/r 转发不需要写当前项目,重定向需要 req.getRequestDispatcher("/success.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }常见错误{callout color="#409eff"}没有重新配置tomcat服务器路径错误{/callout}
2022年11月07日
54 阅读
0 评论
4 点赞
2022-11-07
Java-Response实现重定向
什么是重定向重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。重定向作用在客户端,客户端将请求发送给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送新请求。转发与重定向的区别相同点 :页面都会跳转不同点 :请求转发时,url不会发生变化重定向时,浏览器地址栏的url会发生变化。public class Servlet4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 重定向的时候,一定要注意路径问题,否则就会出现404 resp.sendRedirect("/s1/index.jsp"); } }重定向web资源B收到A的请求后,B会通知A客户端去反问另一个web资源C,这个过程叫重定向void sendRedirect(String var1) throws IOException;Status Code:302 重定向 Location:/r/img代码public class RedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendRedirect("/r/img");//重定向 //拆分 /* resp.setHeader("Location","/r/img"); resp.setStatus(302); */ } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }常见场景:用户登录场景代码 :jsp文件 <!-- index文件 --> <html> <body> <h2>Hello World!</h2> <%--这里提交的路径需要寻找到项目的路径--%> <%-- pageContext.request.contextPath() 这段代码表示的是当前项目 --%> <form action="${pageContext.request.contextPath}/login" method="get"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit"> </form> </body> </html> <!-- success文件 --> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>Success</h1> </body> </html>public class RequestTest extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("进入这个请求"); //处理请求 String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username+":"+password); //重定向一定要注意路径问题 resp.sendRedirect("/r/success.jsp"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }错误总结:1.配置maven的时候没有导入jsp的文件包,需要导入该包,导入代码如下 <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency>2.检查index.jsp form表单的拼写3.检查web.xml文件的配置面试题:重定向与转发的区别相同点页面都会跳转不同点请求转发的时候,url不会产生变化重定向的时候,url地址栏会发生变化
2022年11月07日
82 阅读
0 评论
3 点赞
2022-11-07
Java-Response实现下载文件和验证码
一、概述在创建 servlet 时会覆盖 service() 方法,或 doGet()/doPost() ,这些方法都有两个参数,一个为代表请求的 request 和代表响应的 response 。 service 方法中的 response 的类型是 ServletResponse ,而 doGet/doPost 方法的 response 的类型是 HttpServletResponse,HttpServletResponse 是ServletResponse的子接口,功能和方法更加强大。二、流程三、HttpServletResponseweb服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表相应的一个HttpServletResponse:如果要获取请求的参数:HttpServletRequest如果要给客户端相应一些信息:HttpServletResponse简单分类{callout color="#409eff"}负责向浏览器发送数据的方法{/callout}ServletOutputStream getOutputStream() throws IOException; PrintWriter getWriter() throws IOException;{callout color="#409eff"}负责向浏览器发送响应头的方法{/callout}void setCharacterEncoding(String var1); void setContentLength(int var1); void setContentLengthLong(long var1); void setContentType(String var1); void setDateHeader(String var1, long var2);//设置日期 void addDateHeader(String var1, long var2);//添加日期 void setHeader(String var1, String var2);//设置表头 void addHeader(String var1, String var2);//添加表头 void setIntHeader(String var1, int var2); void addIntHeader(String var1, int var2); void setStatus(int var1);//设置状态码 /*状态码不需要记忆,忘掉建议百度,常见的为404,500,200*/常见应用向浏览器输出东西下载文件—-上传文件(1). 获取下载文件的路径 (2). 获取下载的文件名 (3). 设置浏览器,让它能够支持我们的下载 (4). 获取下载文件的输入流 (5). 创建缓冲区 (6). 获取OutputStream对象 (7). 将获取的文件流写入到buffer缓冲区 (8). 使用OutputStream将缓冲区里面的文件刷入flush或close本地硬盘{callout color="#409eff"}代码(仅供参考){/callout}public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String realPath = "E:\\ideaWorkplace\\com.yu\\response\\src\\main\\resources\\1.jpg"; System.out.println("下载文件的路径:"+realPath); String fileName = realPath.substring(realPath.lastIndexOf("//")+1); resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName)); FileInputStream in = new FileInputStream(realPath); int len=0; byte[] buffer = new byte[1024]; ServletOutputStream out = resp.getOutputStream(); while ((len=in.read(buffer))!=-1){ out.write(buffer,0,len); } in.close(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }验证码生成{callout color="#409eff"}如何实现验证?{/callout}前端实现 后端实现,需要用到java的图片类,产生一个图片{callout color="#409eff"}代码实现(只要前面的maven配置没有问题,跟着老师走就行,没啥好说的){/callout} public class ImageServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //如何让浏览器5秒刷新一次? resp.setHeader("refresh","3"); //在内存中创建图片 BufferedImage image = new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB); //开始画图 Graphics2D g=(Graphics2D) image.getGraphics(); //设置图片背景颜色 g.setBackground(Color.white); g.fillRect(0,0,100,50); //写入验证码 g.setColor(Color.GREEN); g.setFont(new Font(null,Font.ROMAN_BASELINE,20)); g.drawString(makeNumber(),0,25); //高速浏览器,这个请求用图片的方式打开 resp.setContentType("image/png"); //设置不让浏览器缓存图片 resp.setDateHeader("expires",-1); resp.setHeader("Cache-Control","no-cache"); resp.setHeader("Program","no-cache"); //把图片写给浏览器 boolean write = ImageIO.write(image,"png", resp.getOutputStream()); } //生成随机数 private String makeNumber(){ Random r = new Random(); String num=r.nextInt(99999999)+""; StringBuffer sBuffer = new StringBuffer(); for (int i = 0; i < 8-num.length(); i++) { sBuffer.append("x"); } return sBuffer.toString()+num; } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }## 好了本篇文章就到这里啦,剩下的便是自行参悟喽 :$(doge)
2022年11月07日
50 阅读
0 评论
3 点赞
1
2
3