建网站都用什么字体,设计师网络用语,保险公司早会新闻资讯,购门网站建设目录HTTPHTTP请求HTTP响应ServletServlet原理Mapping问题ServletContext获取ServletContext对象ServletContext应用HttpServletResponse下载文件验证码功能实现重定向HttpServletRequestCookie和Session会话CookieSession#xff08;重点#xff09;对比ServletContextJSPJSP…
目录HTTPHTTP请求HTTP响应ServletServlet原理Mapping问题ServletContext获取ServletContext对象ServletContext应用HttpServletResponse下载文件验证码功能实现重定向HttpServletRequestCookie和Session会话CookieSession重点对比ServletContextJSPJSP原理JSP基础语法JSP指令9大内置对象JSP标签、JSTL标签、EL表达式EL表达式 ${ }JSP标签JSTL表达式HTTP
HTTP请求
客户端–发请求Request–服务器 百度
Request URL:https://www.baidu.com/ 请求地址
Request Method:GET get方法/post方法
Status Code:200 OK 状态码200
Remote远程 Address:14.215.177.39:443Accept:text/html
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q0.9 语言
Cache-Control:max-age0
Connection:keep-alive1、请求行 请求行中的请求方式GET 请求方式Get,Post,HEAD,DELETE,PUT,TRACT.…
get请求能够携带的参数比较少大小有限制会在浏览器的URL地址栏显示数据内容不安全但高效post:请求能够携带的参数没有限制大小没有限制不会在浏览器的URL地址栏显示数据内容安全但不高效。
2、消息头
Accept告诉浏览器它所支持的数据类型
Accept-Encoding支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language告诉浏览器它的语言环境
Cache-Control缓存控制
Connection告诉浏览器请求完成是断开还是保持连接
HOST主机..../.HTTP响应
服务器–响应…….客户端 百度
Cache-Control:private 缓存控制
Connection:Keep-Alive 连接
Content-Encoding:gzip 编码
Content-Type:text/html 类型 1、响应体
Accept告诉浏览器它所支持的数据类型
Accept-Encoding支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language告诉浏览器它的语言环境
Cache-Control缓存控制
Connection告诉浏览器请求完成是断开还是保持连接
HOST主机..../.
Refresh告诉客户端多久刷新一次
Location让网页重新定位2、响应状态码 200请求响应成功200 3xx:请求重定向·重定向你重新到我给你新位置去 4xx:找不到资源404·资源不存在 5xx:服务器代码错误 500 502:网关错误
Servlet
Servlet就是sun公司开发动态web的一门技术.
Sun在这些APi中提供一个接口叫做Servlet如果你想开发一个Servlet程序只需要完成两个小步骤 1.编写一个类实现Serlet接口 2.把开发好java类部署到web服务器中。
把实现了Servlet接口的Java程序叫做Servlet
Servlet原理
Servlet是由Web服务器调用web服务器在收到浏览器请求之后会 Mapping问题
一个servlet可以指定一个映射路径 servlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/url-pattern/servlet-mapping一个servlet可以指定多个映射路径 servlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/url-pattern/servlet-mappingservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello2/url-pattern/servlet-mappingservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello3/url-pattern/servlet-mappingservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello4/url-pattern/servlet-mappingservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello5/url-pattern/servlet-mapping
一个servlet可以指定通用映射路径 servlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/*/url-pattern/servlet-mapping
默认请求路径 !--默认请求路径--servlet-mappingservlet-namehello/servlet-nameurl-pattern/*/url-pattern/servlet-mapping
指定一些后缀或者前缀等等…比如后续一些框架会用*.do或者*.action之类的 !--可以自定义后缀实现请求映射注意点*前面不能加项目映射的路径hello/sajdlkajda.qinjiang--servlet-mappingservlet-namehello/servlet-nameurl-pattern*.qinjiang/url-pattern/servlet-mapping
优先级问题 指定了固有的映射路径优先级最高如果找不到就会走默认的处理请求 !--404--servletservlet-nameerror/servlet-nameservlet-classcom.kuang.servlet.ErrorServlet/servlet-class/servletservlet-mappingservlet-nameerror/servlet-nameurl-pattern/*/url-pattern/servlet-mapping
ServletContext
web容器在启动的时候它会为每个web程序都创建一个对应的ServletContext对象它代表了当前的web应用
获取ServletContext对象
共享数据以后一般用session或者request实现 我在这个Servlet中保存的数据可以在另外一个servlet中拿到 HelloServlet
public class HelloServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//this.getInitParameter() 初始化参数//this.getServletConfig() Servlet配置//this.getServletContext() Servlet上下文ServletContext context this.getServletContext();String username 自行车; //数据context.setAttribute(username,username); //将一个数据保存在了ServletContext中名字为username 。值 username}}
GetServlet
public class GetServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context this.getServletContext();String username (String) context.getAttribute(username);resp.setContentType(text/html);resp.setCharacterEncoding(utf-8);resp.getWriter().print(名字username);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
web.xml映射 servletservlet-namehello/servlet-nameservlet-classcom.kuang.servlet.HelloServlet/servlet-class/servletservlet-mappingservlet-namehello/servlet-nameurl-pattern/hello/url-pattern/servlet-mappingservletservlet-namegetc/servlet-nameservlet-classcom.kuang.servlet.GetServlet/servlet-class/servletservlet-mappingservlet-namegetc/servlet-nameurl-pattern/getc/url-pattern/servlet-mapping
ServletContext应用
获取初始化参数几乎不用了解即可 !--配置一些web应用初始化参数--context-paramparam-nameurl/param-nameparam-valuejdbc:mysql://localhost:3306/mybatis/param-value/context-paramprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context this.getServletContext();String url context.getInitParameter(url);resp.getWriter().print(url);
}servletservlet-namegp/servlet-nameservlet-classcom.cheng.servlet.ServletDemo03/servlet-class/servletservlet-mappingservlet-namegp/servlet-nameurl-pattern/gp/url-pattern/servlet-mapping请求转发这个一般用request实现
Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context this.getServletContext();System.out.println(进入了ServletDemo04);//RequestDispatcher requestDispatcher context.getRequestDispatcher(/gp); //转发的请求路径//requestDispatcher.forward(req,resp); //调用forward实现请求转发context.getRequestDispatcher(/gp).forward(req,resp);
}读取资源文件这个一般可以用类加载或反射去实现
Properties
在java目录下新建properties 在resources目录下新建properties 发现都被打包到了同一个路径下classes我们俗称这个路径为classpath: 思路需要一个文件流
usernameroot12312
passwordzxczxczxcpublic class ServletDemo05 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {InputStream is this.getServletContext().getResourceAsStream(/WEB-INF/classes/com/kuang/servlet/aa.properties);Properties prop new Properties();prop.load(is);String user prop.getProperty(username);String pwd prop.getProperty(password);resp.getWriter().print(user:pwd);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
HttpServletResponse
web服务器接收到客户端的http请求针对这个请求分别创建代表请求的HttpServletRequest对象代表响应的一个HttpServletResponse
如果要获取客户端请求过来的参数找HttpServletRequest如果要给客户端响应一些信息找HttpServletResponse
负责向浏览器发送数据的方法
servletOutputstream getOutputstream() throws IOException;Printwriter getwriter() throws IOException;负责向浏览器发送响应头的方法
void setCharacterEncoding(String var1)
void setContentLength(int var1)
void setContentLengthLong(long var1);
void setContentType(String var1)
void setDateHeader(String varl,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 varl,int var2);下载文件
要获取下载文件的路径下载的文件名是啥设置想办法让浏览器能够支持下载我们需要的东西获取下载文件的输入流创建缓冲区获取OutputStream对象将FileOutputStream流写入到bufer缓冲区使用OutputStream将缓冲区中的数据输出到客户端
Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 要获取下载文件的路径String realPath D:\Users\Administrator\IdeaProjects\kuangshen\javaweb-05-servlet\servlet3\src\img\天红.jpg;System.out.println(下载文件的路径realPath);// 2. 下载的文件名是啥String fileName realPath.substring(realPath.lastIndexOf(\\) 1);// 3. 设置想办法让浏览器能够支持(Content-Disposition)下载我们需要的东西,中文文件名URLEncoder.encode编码否则有可能乱码resp.setHeader(Content-Disposition,attachment;filenameURLEncoder.encode(fileName,UTF-8));// 4. 获取下载文件的输入流FileInputStream in new FileInputStream(realPath);// 5. 创建缓冲区int len 0;byte[] buffer new byte[1024];// 6. 获取OutputStream对象ServletOutputStream out resp.getOutputStream();// 7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端while ((lenin.read(buffer))0){out.write(buffer,0,len);}in.close();out.close();
}
验证码功能
验证怎么来的?
前端实现后端实现需要用到Java的图片类生成一个图片
public class ImageServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//让浏览器3秒自动刷新一次;resp.setHeader(refresh,3);//在内存中创建一个图片BufferedImage image new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);//得到图片Graphics2D g (Graphics2D) image.getGraphics(); //笔//设置图片的背景颜色g.setColor(Color.white);g.fillRect(0,0,80,20);//给图片写数据g.setColor(Color.BLUE);g.setFont(new Font(null,Font.BOLD,20));g.drawString(makeNum(),0,20);//告诉浏览器这个请求用图片的方式打开resp.setContentType(image/jpeg);//网站存在缓存不让浏览器缓存resp.setDateHeader(expires,-1);resp.setHeader(Cache-Control,no-cache);resp.setHeader(Pragma,no-cache);//把图片写给浏览器ImageIO.write(image,jpg, resp.getOutputStream());}//生成随机数private String makeNum(){Random random new Random();String num random.nextInt(9999999) ;StringBuffer sb new StringBuffer();for (int i 0; i 7-num.length() ; i) {sb.append(0);}num sb.toString() num;return num;}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}实现重定向
void sendRedirect(String var1) throws IOException;重定向和请求转发的区别 相同点
页面都会实现跳转 不同点请求转发的时候URL地址栏不会产生变化状态码307重定向的时候URL地址栏会发生变化302
常见场景用户登录 index.jsp
html
body
h2Hel1o World!/h2
% page contentTypetext/html; charsetUTF-8%%--这里超交的路径,需要寻找到项目的路径--%
%--${pageContext. request, contextPath}代表当前的项目--%
form action${pageContext.request.contextPath}/login methodget用户名: input typetext nameusername br密码: input typepassword namepassword brinput typesubmit
/form/body
/htmlRedirect.java
public class Redirect extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理方求String username req.getParameter( s: username);String password rea.getParameter( s: password);System.out.println(username:password);resp.sendRedirect(s: /success.jsp);}
}HttpServletRequest
HttpServletRequest代表客户端的请求用户通过Http协议访问服务器HTTP请求中的所有信息会被封装到HttpServletRequest通过这个HttpServletRequest的方法获得客户端的所有信息 获取参数请求转发 例子 index.jsp
html
body
h2Hel1o World!/h2
% page contentTypetext/html; charsetUTF-8%%--这里提交的路径,需要寻找到项目的路径--%
%--${pageContext. request, contextPath}代表当前的项目--%
div styletext-align: centerform action${pageContext.request.contextPath}/login methodpost用户名: input typetext nameusername br密码: input typepassword namepassword br爱好input typecheckbox namehobbys value女孩女孩input typecheckbox namehobbys value代码代码input typecheckbox namehobbys valueokokbrinput typesubmit/form/div
/body
/htmlOverrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding(utf-8);resp.setCharacterEncoding(utf-8);String username req.getParameter(username);String password req.getParameter(password);String[] hobbys req.getParameterValues(hobbys);System.out.println();//后台接收中文乱码问题System. out.println(username);System. out.println(password);System.out.println(Arrays.toString(hobbys));System. out.println();System. out.println(req.getContextPath());//通过请求转发//这里的/代表当前的web应用req.getRequestDispatcher(/success.jsp).forward(req,resp);}Cookie和Session
会话
会话 用户打开一个浏览器点击了很多超链接访问多个web资源关闭浏览器这个过程可以称之为会话
有状态会话 一个同学来过教室下次再来教室我们会知道这个同学曾经来过称之为有状态会话
你能怎么证明你是某培训班的学生
你客户端学校服务器
发票。学校给你发票学校登记。学校标记你来过了
一个网站怎么证明你来过
客户端 服务端
服务端给客户端一个 信件客户端下次访问服务端带上信件就可以了 cookie服务器登记你来过了下次你来的时候我来匹配你seesion
保存会话的两种技术
cookie 客户端技术 响应请求session 服务器技术利用这个技术可以保存用户的会话信息 我们可以把信息或者数据放在Session中
常见场景网站登录之后你下次不用再登录了第二次访问直接就上去了
Cookie
从请求中拿到cookie信息服务器响应给客户端cookie
常用方法
Cookie[] cookies req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie(xxx(name), value); //新建一个cookie
cookie.setMaxAge(x); //设置cookie的有效期 秒
resp.addCookie(cookie); //响应给客户端一个cookie
演示例子
public class CookieDemo01 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//例子服务器告诉你你来的时间把这个时间封装成一个信件你下次带来服务器就知道你来了//解决中文乱码req.setCharacterEncoding(utf-16);resp.setCharacterEncoding(utf-16);PrintWriter out resp.getWriter();// cookie,服务器从客户端中取得Cookie[] cookies req.getCookies(); //这里返回数组 说明cookie可能存在多个//判断cookie是否存在if(cookies!null){//如果存在out.write(你上次访问的时间是);for (Cookie cookie : cookies) {if (cookie.getName().equals(lastLoginTime)){//获取cookie中的值long lastLoginTime Long.parseLong(cookie.getValue());Date date new Date(lastLoginTime);out.write(date.toLocaleString());}}}else{out.write(这是你第一次访问本站);}//服务器给客户端响应一个cookieCookie cookie new Cookie(lastLoginTime, System.currentTimeMillis());resp.addCookie(cookie);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}删除Cookie方法
不设置有效期关闭浏览器自动失效 设置有效期时间为 0
public class CookieDemo02 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 创建一个cookie名字必须要和要删除的名字一致Cookie cookie new Cookie(lastLoginTime, System.currentTimeMillis() );//将cookie有效期设置为0立马过期cookie.setMaxAge(0);resp.addCookie(cookie);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}如果要设置中文的cookie值要编码解码
URLEncoder.encode(你好,utf-8)
URLDecoder.decode(cookie.getValue(),UTF-8)cookie一般会保存在本地的 用户目录下 appdata一个Cookie只能保存一个信息一个web站点可以给浏览器发送多个cookie最多存放20个cookieCookie大小有限制4kb300个cookie为浏览器上限
Session重点
什么是Session
服务器会给每一个用户浏览器创建一个Session对象一个Session独占一个浏览器只要浏览器没有关闭这个Session就存在用户登录之后整个网站它都可以访问– 保存用户的信息保存购物车的信息…… Session和Cookie的区别
Cookie是把用户的数据写给用户的浏览器浏览器保存 可以保存多个Session把用户的数据写到用户独占Session中服务器端保存 保存重要的信息减少服务器资源的浪费Session对象由服务创建
使用场景
保存一个登录用户的信息购物车信息在整个网站中经常会使用的数据我们将它保存在Session中
演示例子
public class SessionDemo01 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding(utf-8);resp.setCharacterEncoding(utf-8);resp.setContentType(text/html;charsetutf-8);//得到sessionHttpSession session req.getSession();//往session中存东西session.setAttribute(name,new Person(你好,1));//获取Session的IDString sessionId session.getId();//判断Session是不是新创建if (session.isNew()){resp.getWriter().write(session创建成功,ID:sessionId);}else {resp.getWriter().write(session已经在服务器中存在了,ID:sessionId);}//看看Session创建的时候做了什么事情Cookie cookie1 new Cookie(JSESSIONID,sessionId);resp.addCookie(cookie1);Cookie cookie2 new Cookie(test,sessionId);resp.addCookie(cookie2);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
手动注销会话
session.invalidate();会话自动过期web.xml配置
!--设置Session默认的失效时间--
session-config!--15分钟后Session自动失效以分钟为单位--session-timeout15/session-timeout
/session-config对比ServletContext JSP
Java Server Pages Java服务器端页面也和Servlet一样用于动态Web技术
最大的特点 写JSP就像在写HTML
区别 HTML只给用户提供静态的数据 JSP页面中可以嵌入Java代码为用户提供动态数据
JSP原理
浏览器向服务器发送请求不管访问什么资源其实都是在访问Servlet
JSP最终也会被转换成为一个Java类
JSP 本质上就是一个Servlet
//初始化public void _jspInit() {}
//销毁public void _jspDestroy() {}
//JSPServicepublic void _jspService(.HttpServletRequest request,HttpServletResponse response)
内置的一些对象 final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session null; //session
final javax.servlet.ServletContext application; //applicationContext
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out null; //out
final java.lang.Object page this; //page当前
HttpServletRequest request //请求
HttpServletResponse response //响应输出页面前增加的代码
response.setContentType(text/html); //设置响应的页面类型
pageContext _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);
_jspx_page_context pageContext;
application pageContext.getServletContext();
config pageContext.getServletConfig();
session pageContext.getSession();
out pageContext.getOut();
_jspx_out out;以上的这些个对象我们可以在JSP页面中直接使用
原理图 在JSP页面中 只要是 JAVA代码就会原封不动的输出 如果是HTML代码就会被转换为类似以下的
out.write(html\r\n);这样的格式输出到前端
JSP基础语法
任何语言都有自己的语法Java中也有。 JSP 作为Java技术的一种应用它拥有一些自己扩充的语法了解知道即可Java所有语法都支持
JSP表达式 %--JSP表达式作用用来将程序的输出输出到客户端% 变量或者表达式% 即% %里面可以直接写java代码--%% new java.util.Date()%JSP脚本片段 %--jsp脚本片段--%%int sum 0;for (int i 1; i 100 ; i) {sumi;}out.println(h1Sumsum/h1);%JSP声明 %!static {System.out.println(Loading Servlet!);}private int globalVar 0;public void method(){System.out.println(进入了方法method);}%JSP声明会被编译到JSP生成Java的类中其他的就会被生成到_jspService方法中
在JSP嵌入Java代码即可
%%
%%
%!%%--注释--%JSP的注释不会在客户端显示HTML就会
JSP指令
%page args.... %
%-- 例如定制错误页面不同的错误要去不同的页面的话要去web.xml配置 --%
%page errorPage... %
%include file%%--include会将两个页面合二为一--%%include filecommon/header.jsp%
h1网页主体/h1%include filecommon/footer.jsp%hr%--jSP标签jsp:include拼接页面本质还是三个--%
jsp:include page/common/header.jsp/
h1网页主体/h1
jsp:include page/common/footer.jsp/
输出
9大内置对象
PageContext 存东西Request 存东西ResponseSession 存东西Application 【SerlvetContext】 存东西config 【SerlvetConfig】outpage 不用了解exception
% page languagejava contentTypetext/html; charsetutf-8pageEncodingutf-8%
html
body
%--内置对象--%
%pageContext.setAttribute(name1,1号); //保存的数据只在一个页面中有效作用域最低转发之后就消失request.setAttribute(name2,2号); //保存的数据只在一次请求中有效请求转发会携带这个数据session.setAttribute(name3,3号); //保存的数据只在一次会话中有效从打开浏览器到关闭浏览器application.setAttribute(name4,4号); //保存的数据在服务器中有效从打开服务器到关闭服务器作用域最高//或者可以
// pageContext.setAttribute(name1,1号, 3);
// 跟session.setAttribute(name3,3号);等价// PAGE_SCOPE 1;
// REQUEST_SCOPE 2;
// SESSION_SCOPE 3;
// APPLICATION_SCOPE 4;
%
%--脚本片段中的代码会被原封不动地生成到.jsp.java--%
%--要求这里面的代码必须符合java语法的正确性--%
%// 从pageContext中取出通过寻找的方式来获得// 作用域从底层到高层page request session application// 从低到高一层层找高层找到就用高层的即使地层有也不用低层的找不到就返回null// JVM双亲委派机制String name1 (String) pageContext.findAttribute(name1);String name2 (String) pageContext.findAttribute(name2);String name3 (String) pageContext.findAttribute(name3);String name4 (String) pageContext.findAttribute(name4);String name5 (String) pageContext.findAttribute(name5);// 不存在
%%--使用EL表达式 ${ } 输出--%
h1输出的值为/h1
h3${name1}/h3
h3${name2}/h3
h3${name3}/h3
h3${name4}/h3h3${name5}/h3
%--对于不存在的使用EL表达式什么也不会输出在页面使用以下这个的话会在页面显示null影响体验--%
h3%name5%/h3/body
/html
%pageContext.forward(/index.jsp); // 页面层面的转发request.getRequestDispatcher(/index.jsp).forward(request,response); // 后台层面的转发
%request 客户端向服务器发送请求产生的数据用户看完就没用了比如新闻用户看完没用的
session 客户端向服务器发送请求产生的数据用户用完一会还有用比如购物车
application 客户端向服务器发送请求产生的数据一个用户用完了其他用户还可能使用比如聊天数据
JSP标签、JSTL标签、EL表达式
!-- JSTL表达式的依赖 --
dependencygroupIdjavax.servlet.jsp.jstl/groupIdartifactIdjstl-api/artifactIdversion1.2/version
/dependency
!-- standard标签库 --
dependencygroupIdtaglibs/groupIdartifactIdstandard/artifactIdversion1.1.2/version
/dependencyEL表达式 ${ }
获取数据执行运算获取web开发的常用对象
JSP标签
jsptag.jsp
jsp:forward page/jsptag2.jspjsp:param namename valuecheng/jsp:paramjsp:param nameage value12/jsp:param
/jsp:forward
%--
http://localhost:8080/jsptag.jsp?namechengage12
--%jsptag2.jsp
%request.getParameter(name)%
%request.getParameter(age)%JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足它自定义许多标签可以供我们使用标签的功能和Java代码一样。
JSTL标签库种类 格式化标签 SQL标签 XML 标签 核心标签 掌握部分
JSTL标签库使用步骤 引入对应的 taglib有时候在Tomcat 也需要引入 jstl的包否则会报错JSTL解析错误 使用其中的方法
%--引入JSTL核心标签库 这样才能使用JSTL核心标签--%
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core %c:if
form actioncoreif.jsp methodgetinput typetext nameusername value${param.username}input typesubmit value登录%-- 判断如果登录的是admin则登录成功--%c:if test${param.usernameadmin} varisAdminc:out value管理员欢迎您//c:if%--自闭合标签--%c:out value${isAdmin}//formc:choose和c:when
%--定义一个变量score值为85--%
c:set varscore value85/c:choosec:when test${score90}你的成绩为优秀/c:whenc:when test${score80}你的成绩为一般/c:whenc:when test${score70}你的成绩为良好/c:whenc:when test${score60}你的成绩为不及格/c:when
/c:choosec:forEach
%ArrayListString people new ArrayList();people.add(0,张三);people.add(1,李四);people.add(2,王五);people.add(3,赵六);people.add(4,田六);request.setAttribute(list,people);
%%--
var , 每一次遍历出来的变量
items, 要遍历的对象
begin, 哪里开始
end, 到哪里
step, 步长
--%
c:forEach varpeople items${list}c:out value${people}/ br
/c:forEachhrc:forEach varpeople items${list} begin1 end3 step1 c:out value${people}/ br
/c:forEach
输出 张三 李四 王五 赵六 田六 --------- 李四 王五 赵六