JSP基本语法
Java Server Pages,和servlet一样用于开发动态web
原理:不管浏览器怎么发送请求,怎么都是请求servlet
JSP最终也会转变为一个JAVA的类
1.判断请求
2.内置了对象(pagecontext页面上下文、session、applicationcontext、config、out等)
基础语法指令:
注释:
<%-- 注释 --%>
<%= new Date()%>
JSP脚本片段:
<%
int sum = 0;
for(int i=0;i<100;i++){
}
%>
<%
int sum = 0;
for(int i=0;i<100;i++){
%>
111
<%
}
int sum = 0;
for(int i=0;i<100;i++){
}
%>
JSP声明:
<%!
private int global = 10 ;
%>
//这个会被编译到类中,全局变量,其他的都是进入到jspservice方法中
${}-----------------------el表达式
JSP指令
导包
<%@ page import=""%>
自己制定报错页面,在相应JSP中编写相关的内容:
在web.xml中配置:
<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>
JSP的标签:
<jsp:include page="/common/head.jsp"> ---------页面添加固定的头块
<jsp:include page="/common/footer.jsp"> ---------页面添加固定的尾块
@include会把两个页面合二为一,而jsp的include标签会把页面进行拼接
JSP的内置对象
一) PageContext ----------存东西的,保存的数据只在一个页面中有效
PageContext.setAttribute(“name1”,“wang”);
String s1 = (String) PageContext.getAttribute(“name1”);
//用EL表达式取值,从底层到高层
${s1} ---------------这个是在HTML代码中存在的
可以转发PageContext.forward("/index.jsp");
二) Request ----------存东西的,只在一次请求中有效
Request.setAttribute(“name2”,“wang”);
三) Response
四) Session ----------存东西的,一次会话中有效
Session.setAttribute(“name3”,“wang”);
五) Application ----------存东西的,在服务器中有效
Application.setAttribute(“name4”,“wang”);
六) config
七) out
八) page 不用了
九) exception
JSP标签、JSTL标签、EL表达式
EL表达式:${} ============获取数据、执行运算、获取WEB开发常用对象
<input type="text" name="username" value="${param.username}">
JSP标签
//第一个JSP中进行转发并携带参数
<jsp:forward page="/jsp2.jsp">
<jsp:param name="name" value="wang"><jsp:param>
<jsp:param name="age" value="12"><jsp:param>
</jsp:forward>
//第二个JSP中获取参数
姓名:<%=request.getparameter("name")%>
年龄:<%=request.getparameter("name")%>
JSTL标签
弥补HTML标签的不足,自定义许多标签
JSTL核心标签必须引用:
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
JavaBean
有一个无参构造
属性必须私有化
有对应的get/set方法
一般用来做数据库字段做映射
MVC三层架构
Model 模型
业务处理、业务逻辑(service)
数据持久层(DAO)
View 视图
展示数据
提供链接发起servlet请求(a,form,img)
Control 控制器
接受用户请求
交给业务层处理对应的代码
控制视图的跳转
Servlet专门用于处理请求、控制视图跳转
JSP专门用于显示数据
过滤器Filter
Filter:过滤器,过滤网站的数据
功能:处理中文乱码,登陆验证…
过滤器实现编码修正:
一)添加依赖:pom.xml文件
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
二)导包记得要导javax下的filter包
三)实现接口后,重写相应方法
四)web.xml配置Filter
过滤器代码:
//这是一个过滤器
public class CharactorEncodingFilter implements Filter {
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharactorEncodingFilter执行初始化步骤");
}
//过滤器方法
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("GBK");
servletResponse.setCharacterEncoding("GBK");
servletResponse.setContentType("text/html;charset=GBK");
System.out.println("过滤前");
//这里的作用是让请求通过过滤器
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("过滤后");
}
//销毁过滤器,一般是在服务关闭的时候就会执行
public void destroy() {
System.out.println("CharactorEncodingFilter执行了销毁步骤");
}
}
测试代码:
public class ShowFilter 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 {
doGet(req, resp);
}
}
web.xml代码:
<servlet>
<servlet-name>Show</servlet-name>
<servlet-class>com.wang.servlet.ShowFilter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Show</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Show</servlet-name>
<url-pattern>/s1/show</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Filter</filter-name>
<filter-class>com.wang.servlet.CharactorEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter</filter-name>
<!-- 这里的意思是放行/s1/的任何请求,只要符合这个要求,就进入这个过滤器,进行过滤器中的代码执行,否则就不执行 -->
<url-pattern>/s1/*</url-pattern>
</filter-mapping>
监听器
例子:统计在线人数
一)编写类,实现HttpSessionListener接口
重写sessionCreated、sessionDestroyed方法
二)去web.xml注册监听器(只写一个类url)
三)看情况是否使用