哈铁工程建设公司网站东莞百姓网免费发布信息网
1. JSTL标签库
JSTL标签库:里面提供了大量的标签。如if标签、for标签等
目的是减少jsp中<%%>的出现
1.1 核心标签库
如何使用jstl标签
- 引入jstl标签库
- 在网页中引入标签库地址
<%--在网页中引入jstl标签的核心标签库的地址,prefix中的别名可以随意定义
引入核心标签库的地址 prefix:前缀 别名 uri:核心标签库的地址--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
- 使用相应的标签
可以结合EL表达式一起使用
if标签
<%User user=new User(1,"hzsd","456");request.setAttribute("user",user);
%>
<%--test:条件表达式 没有else--%>
<%--jstl标签库中的==和equals等价的--%>
<c:if test="${user.id==2}">第一个用户
</c:if>
for标签
<%List<User> list=new ArrayList<>();list.add(new User(1,"张一","121"));list.add(new User(2,"张二","122"));list.add(new User(3,"张三","123"));list.add(new User(4,"张四","124"));request.setAttribute("list",list);
%>
<table width="600" border="1px" cellspacing="0" align="center"><tr><th>编号</th><th>姓名</th><th>密码</th></tr><%--循环标签 items表示被循环的数组或集合 var:每次循环拿到的值赋值的变量 begin:从哪开始 end:到哪结束 step:步数--%><c:forEach items="${list}" var="s"><tr><td>${s.id}</td><td>${s.name}</td><td>${s.password}</td></tr></c:forEach>
</table>
choose when other标签
java中switch语句
<c:choose><c:when test="${age>0 and age<10}">小学</c:when><c:when test="${age>=10 and age<18}">高中</c:when><c:when test="${age>=18 and age<25}">大学</c:when><c:otherwise>家里蹲</c:otherwise>
</c:choose>
redirect重定向标签
<c:redirect url="add.jsp"></c:redirect>
1.2 格式化标签库
网页中引入格式化标签
<%--引入核心标签库的地址 prefix:前缀 别名 uri:核心标签库的地址--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head><title>Title</title>
</head>
<body><%request.setAttribute("birthday",new Date());%><%--value:要格式的数据 pattern:格式化后的样式--%><f:formatDate value="${birthday}" pattern="yyyy年MM月dd日 HH:mm:ss"></f:formatDate><input type="text" value="<f:formatDate value='${birthday}' pattern='yyyy-MM-dd'/>"/>
</body>
</html>
2. servlet
2.1 what
本质就是java类,做到了承上启下的作用,可以接收请求的数据,也可以把数据相应给前端页面
等价于处理页面,目的是为了减少<%%>的出现
2.2 why
目的是减少jsp中<%%>的使用
如果没有servlet,需要为每一个前端类型提供一种处理功能,替代处理界面
2.3 how
创建一个类并继承HttpServlet
public class MyServlet extends HttpServlet {//重写父类中的方法.接受参数以及业务处理@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {System.out.println("代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");}
}
在web.xml文件中注册该servlet,后续有简化方法,即在相应的类中添加注解
把servlet类的创建交于tomcat容器创建
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--注册servlet--><servlet><!--servlet的名称可以随便起--><servlet-name>myServlet</servlet-name><!--指定自定义的servlet路径--><servlet-class>com.ykq.servlet.MyServlet</servlet-class></servlet><!--请求路径映射到该servlet--><servlet-mapping><!--保证该名称必须和上面注册的名称一致--><servlet-name>myServlet</servlet-name><!--路径,可以随意定义,但必须加/--><url-pattern>/my</url-pattern></servlet-mapping>
</web-app>
2.4 servlet接收请求的参数值
@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//编码设置req.setCharacterEncoding("utf-8");//接受参数String name = req.getParameter("name");String age = req.getParameter("age");System.out.println("name=========="+name+";age=========="+age);//跳转
// resp.sendRedirect("aaa.html");req.getRequestDispatcher("aaa.html").forward(req,resp);}
2.5 完成登录
servlet中的代码
public class LoginServlet extends HttpServlet {private UserDao userDao=new UserDao();@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String password = request.getParameter("password");User user = userDao.selectByNameAndPwd(name, password);if(user!=null){//获取session对象HttpSession session = request.getSession();//保存数据到sessionsession.setAttribute("user",user);//跳转成功页面response.sendRedirect("success.jsp");}else{response.sendRedirect("login.jsp");}}
}
2.6 使用注解简化web.xml注册的代码
web版本为3.0以后
2.7 快速建立servlet【没有不用】
2.8 一个servlet实现多个请求
正常情况下一个表的操作都放在一个servlet中。处理多个请求
处理方法:发送请求时传递一个标志参数
@WebServlet(name = "StudentServlet",urlPatterns = "/StudentServlet")
public class StudentServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//接受操作的标志String method = req.getParameter("method");if("add".equals(method)){add(req,resp);}else if("delete".equals(method)){delete(req,resp);}else if("update".equals(method)){update(req,resp);}else{list(req,resp);}}private void list(HttpServletRequest req, HttpServletResponse resp) {}private void update(HttpServletRequest req, HttpServletResponse resp) {System.out.println("~~~~~~~~~~~~~~~~~~~修改学生update~~~~~~~~~~~~~");}//删除学生的操作private void delete(HttpServletRequest req, HttpServletResponse resp) {//接受删除学生的id//调用dao完成删除功能//跳转System.out.println("~~~~~~~~~~~~~~delete删除学生~~~~~~~~~~~~~~~");}//添加学生private void add(HttpServletRequest req, HttpServletResponse resp) {System.out.println("~~~~~~~~~~~~~~add添加学生~~~~~~~~~~~~~~~~~~~~");}
}
2.9 servlet的生命周期
servlet对象从创建到销毁经历哪些阶段。每个阶段执行相应的方法
- 创建new[只会执行一次]
- 初始化阶段[只会执行一次]
- 服务阶段[每次请求都会执行]
- 销毁阶段[服务器关闭时]
public class MyServlet extends HttpServlet {//只执行一次。----单例模式[节省内存]public MyServlet(){//创建servlet经历的方法System.out.println("构造servlet方法");}//初始化方法只执行一次@Overridepublic void init(ServletConfig config) throws ServletException {//本servlet局部参数String name = config.getInitParameter("name");String age = config.getInitParameter("age");//获取web全局参数String address = config.getServletContext().getInitParameter("address");System.out.println("初始化阶段"+name+";"+age+";"+address);}//每次请求都会经过service服务阶段@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("服务阶段---");}@Overridepublic void destroy() {System.out.println("销毁阶段");}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--全局参数--><context-param><param-name>address</param-name><param-value>bj</param-value></context-param><servlet><servlet-name>my</servlet-name><servlet-class>com.ykq.servlet.MyServlet</servlet-class><!--初始化的参数--><init-param><param-name>name</param-name><param-value>ldh</param-value></init-param><init-param><param-name>age</param-name><param-value>18</param-value></init-param><!--服务器启动时加载该servlet: 优点:客户访问速度快。 缺点:服务器启动慢了--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>my</servlet-name><url-pattern>/My</url-pattern></servlet-mapping>
</web-app>
3. 注意点
- 退出登录:因为是保存到session会话中的信息,是在Servlet Java代码中实现退出登录,又因为Java中没有session对象,必须先通过req.getSession()方法获取,才能调用session的removeAttribute方法移除session会话中的信息
所有,实现步骤:
private void loginOut(HttpServletRequest req, HttpServletResponse resp) throws IOException {//获取会话对象HttpSession session = req.getSession();session.removeAttribute("user");resp.sendRedirect("login.jsp");}
- 过滤器也可以通过添加注解实现注册该过滤器