JSP学习笔记
文章目录一、JSP1.1 什么是JSP1.2 JSP基础语法二、使用步骤1.引入库2.读入数据总结一、JSP1.1 什么是JSPJava Server Pages:Java服务器端页面,也和Servlet一样,用于动态web技术。最大的特点写JSP就像在写HTML代码区别1.HTML只给用户提供静态的数据2.JSP页面钟可以嵌入Java代码,为用户提供动态数据。1.2 JSP基础语法JSP表达式&
一、JSP
1.1 什么是JSP
- Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态web技术。
最大的特点
- 写JSP就像在写HTML代码
- 区别
1.HTML只给用户提供静态的数据
2.JSP页面钟可以嵌入Java代码,为用户提供动态数据。
1.2 JSP基础语法
JSP表达式
<%--JSP表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式%>
--%>
<%= new java.util.Date()%>
jsp脚本片段
<%--jsp脚本片段--%>
<%
int sum=0;
for (int i = 0; i <= 100; i++) {
sum+=i;
}
out.println("<h1>sum="+sum+"</h1>");
%>
脚本片段的再实现
<%
int x=10;
out.println(x);
%>
<p>这是一个jsp文档</p>
<%
int y=20;
out.println(y);
%>
<hr/>
<%--在代码中嵌入HTML元素--%>
<%
for (int i = 0; i <= 5; i++) {
%>
<h1>hello world<%=i%> </h1>
<%
}
%>
jsp声明
<%!
static {
System.out.println("Loading Servlet");
}
private int globalVar=0;
public void yan(){
System.out.println("进入了此方法");
}
%>
jsp声明:会被编译到JSP生成Java的类中!其他的,就会被生成到jspService方法中!
1.3 九大内置对象
- PageContext
- Request
- Response
- Session
- Application
- config
- out
- page
- exception
pageContextDemo01.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--内置对象--%>
<%
pageContext.setAttribute("name1","小言1"); //保存的数据只在一个页面中有效
request.setAttribute("name2","小言2");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","小言3");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","小言4");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
<%--脚本片段中的代码,会被原封不动的生成.jsp.java
要求:这里面的代码:必须保证Java语法的正确性
--%>
<%
//通过pageContext取出,我们通过寻找的方式来
//从底层到高层(作用域):page->session -> application
String name1=(String) pageContext.findAttribute("name1");
String name2=(String) pageContext.findAttribute("name2");
String name3=(String) pageContext.findAttribute("name3");
String name4=(String) pageContext.findAttribute("name4");
%>
<%--使用EL表达式输出 ${}--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
</body>
</html>
- request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用了;
- session:客户端向服务器发送请求,产生的数据,用户用完一定还有用,比如:购物卡;
- application:客户端向服务器发送请求,产生的数据,其他用户还能使用,比如:聊天数据
1.4 JSP标签、JSTL标签、EL表达式
EL表达式:${}
- 获取数据
- 执行运算
- 获取wb开发的常用对象
- jsp标签
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="name" value="xiaoyan"/>
<jsp:param name="age" value="20"/>
</jsp:forward>
- JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签,可以供我们使用,标签的功能和Java代码一样。 - JSTL标签使用步骤:
1.引入对应的taglib
2.使用其中的方法
核心标签
coreif.jsp
<c:if> 标签
<%--引入JSTL核心标签库,我们才能使用JSTL标签--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>if测试</h4>
<hr>
<form action="coreif.jsp" method="get">
<%--
EL表达式获取表单中的数据
${param.参数}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断如果提交的用户名是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="管理员欢迎你"/>
</c:if>
<c:out value="${isAdmin}"/>
</body>
</html>
结果图展示
corewhen…jsp
<c:choose>, <c:when>标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--定义一个变量score,值为85--%>
<c:set var="score" value="90"/>
<c:choose>
<c:when test="${score>=90}">
你的成绩为优秀
</c:when>
<c:when test="${score>=80}">
你的成绩为一般
</c:when>
<c:when test="${score>=70}">
你的成绩为良好
</c:when>
<c:when test="${score<=60}">
你的成绩为不及格
</c:when>
</c:choose>
</body>
</html>
结果图展示
coreforeach.jsp
<c:forEach>标签
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
ArrayList<String> 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 var="people" items="${list}">
<c:out value="${people}"/>
</c:forEach>
<hr>
<c:forEach var="people" items="${list}" begin="1" end="3" step="2">
<c:out value="${people}"/>
</c:forEach>
</body>
</html>
结果图展示
二、JavaBean
实体类
JavaBean有特定的写法:
- 必须要有一个无参构造
- 属性必须私有化
- 必须有对应的get/set方法;
一般用来和数据库的字段做映射 ORM;
ORM:对象关系映射
- 表—>类
- 字段—>属性
- 行记录---->对象
people表
id | name | age | address |
---|---|---|---|
1 | 小言1号 | 6 | 长沙 |
2 | 小言2号 | 18 | 衡阳 |
3 | 小言3号 | 20 | 河源 |
class People{
private int id;
private String name;
private int age;
private String address;
}
class A{
new People(1,"小言1号",18,"长沙");
new People(1,"小言2号",20,"衡东");
new People(1,"小言3号",22,"花都");
}
实体类
package com.yan.pojo;
//实体类,我们一般都是和数据库中的表结构一一对应
public class People {
private int id;
private String name;
private int age;
private String address;
public People(){
}
public People(int id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
JavaBean,jsp
<%@ page import="com.yan.pojo.People" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
// People people=new People();
// people.getAddress();
// people.setAge();
// people.getId();
// people.setName();
%>
<jsp:useBean id="people" class="com.yan.pojo.People" scope="page"/>
<jsp:setProperty name="people" property="address" value="长沙"/>
<jsp:setProperty name="people" property="id" value="1"/>
<jsp:setProperty name="people" property="age" value="20"/>
<jsp:setProperty name="people" property="name" value="小言"/>
姓名:<jsp:getProperty name="people" property="name"/>
id:<jsp:getProperty name="people" property="id"/>
年龄:<jsp:getProperty name="people" property="age"/>
地址:<jsp:getProperty name="people" property="address"/>
</body>
</html>
结果图展示
三、MVC三层架构
什么是MVC:Model(模型) view(视图) Controller(控制器)
早些年
用户直接访问控制层,控制层就可以直接操作数据库;
servlet–CRUD–>数据库
弊端:程序十分臃肿,不利于维护
servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码
MVC三层架构
Model
- 业务处理:业务逻辑(Service)
- 数据持久层:CRUD(Dao)
View
- 展示数据
- 提供链接发起Service请求(a,form,img…)
Controller(Servlet)
- 接收用户请求:(req:请求参数、session信息…)
- 交给业务层处理对应的代码
- 控制视图的跳转
登录-----> 接收用户登录请求------>处理用户的请求(获取用户登录的参数:username,password)----->交给业务层处理登录业务(判断用户名密码是否正确)------> Dao层查询用户名和密码是否正确---->数据库
四、Filter
Filter:过滤器,用来过滤网站的数据;
- 处理中文乱码
Filter开发步骤:
- 编写过滤器
package com.yan.pojo;
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncodingFilter初始化");
}
//filterChain:链
/*
1.过滤中的所有代码,在过滤特定请求的时候都会执行
2.必须要让过滤器继续通行
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("CharacterEncodingFilter执行前....");
filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走,如果不写,程序到这里就会被拦截停止
System.out.println("CharacterEncodingFilter执行后....");
}
//销毁
public void destroy() {
System.out.println("CharacterEncodingFilter销毁");
}
}
- 配置web.xml
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.yan.pojo.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 用此servlet测试过滤器
package com.yan.pojo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/servlet")
public class ShowServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("你好,世界");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
- 测试结果
更多推荐
所有评论(0)