JavaWeb:JSP学习笔记

资源

菜鸟教程JSP
写代码这种事还是纸上得来终觉浅
建议一边敲一边学
不要觉得看完一遍就都会了

Servelet和JSP的分工

在这里插入图片描述
JSP用来写请求发起页和响应页
Servlet用来写后台的业务逻辑处理、数据库交互等

How does JSP works?

  1. Browser发送http请求给服务器
  2. Web服务器识别出其为对JSP网页的请求,将该请求传给JSP引擎
  3. JSP引擎将对应的JSP文件转换为Servlet,然后将其编译成可执行类,再将原始请求传给Servlet引擎
  4. 服务器某组件调用Servlet引擎,载入并执行Servlet类
  5. 执行时Servlet产生HTML格式的输出并将其内嵌于Response中交给Web服务器
  6. Web服务器将静态HTML返回到Browser
  7. Browser对其作解析

JSP生命周期

编译阶段
Servlet容器编译Servlet源文件,生成Servlet类

初始化阶段
加载与JSP对应的Servlet类,创建实例并调用 jspInit() 进行初始化

执行阶段
调用此Servlet实例的服务方法
void _jspService(HttpServletRequest request, HttpServletResponse response)

销毁阶段
调用此Servlet实例的销毁方法public void jspDestroy()销毁此实例

基础语法####################

脚本程序的语法格式

<%
	代码
%>

任何文本、HTML标签、JSP元素都要写在脚本程序之外

示例代码

<html>
<head>
	<title>Hello World</title>
</head>
<body>
	Hello World!<br/>
	<%
		out.println("Your IP address is " + request.getRemoteAddr());
	%>
</body>
</html>

变量、方法声明

<%!
	声明
%>

注意:声明就是声明,不能出现表达式、输出等

示例代码

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

表达式

<%=
	表达式
%>

表达式的值会被转换为String类型,所以可以在文本行中使用
表达式中不能使用分号

示例代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html> 

注释

<%--注释内容--%> 
此种为JSP注释,仅服务器端可以看到,不会被编译或发送至Browser
<!--注释内容-->
此种为HTML注释,Browser查看源码时可以看到

判断语句

8.1 if-else 可以与HTML标签搭配使用
示例代码

<h3>IF...ELSE 实例</h3>
<% if (day == 1 | day == 7) { %>
      <p>今天是周末</p>
<% } else { %>
      <p>今天不是周末</p>
<% } %>

8.2 if-else 也可以全部封装到脚本程序标签中
示例代码

<%
		if (i+b==15){
			out.println("结果是15");
		}
		else {
			out.println("结果不是15");
		}
%>

8.3 switch-case只能全部封装到脚本程序标签中
示例代码

<% switch(i+b){
			case(0):
				out.println("switch 是0吗");
				break;
			case(15):
				out.println("switch 是15吗");
				break;
	}
%>

循环语句

以for循环为例

可以与HTML标签搭配使用,也可全部封装

示例代码

<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
   <font 
   		color="green" size="<%= fontSize %>">
    	Hello World!
   </font>
   <br/>
<%}%>

结果展示
在这里插入图片描述

运算符

在这里插入图片描述

字面量

即表达式右值
在这里插入图片描述

高级语法####################

JSP指令

用于设置与整个JSP页面相关的属性
在这里插入图片描述

JSP动作

<jsp:action_name attribute="value" />

在这里插入图片描述

JSP隐式对象

在这里插入图片描述

request:每当客户端请求一个JSP页面时都会有一个新的request对象代表这个请求,你可以从中获取HTTP头信息、Cookies、HTTP方法等

response:当创建一个request对象时就会创建一个对应的response对象,开发者通过它可以添加新的Cookies、返回HTTP状态码等

表单处理

方法

getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。

getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量

getParameterNames():该方法可以取得所有变量的名称,该方法返回一个 Enumeration。

getInputStream():调用此方法来读取来自客户端的二进制数据流。

示例代码
input.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<form action="receiver.jsp" method="POST">
站点名: <input type="text" name="name">
<br />
网址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>

</body>
</html>

reveiver.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h1>使用 POST 方法读取数据</h1>
<ul>
<li><p><b>站点名:</b>
<%
// 解决中文乱码的问题
String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8");
%>
   <%=name%>
</p></li>
<li><p><b>网址:</b>
   <%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>

GET&POST

示例代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>参数提取</title>
</head>
<body>
<table width="100%" border="1" align="center">

i love
<br>
<%=request.getParameter("name")%>
</table>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

request.getParameter("参数名")这个方法类似于
PHP的$_REQUEST["参数名"]的使用
并不区分是GET还是POST传过来的

Cookie处理

什么是Cookie
简单说就是存放在客户端的一个文件
服务器可以给浏览器发送如包含用户名密码等的Cookie
浏览器把这些Cookie保存下来
下一次浏览器访问服务器时就会把对应的Cookie一块发过去
服务器利用它可以识别用户或做别的事情

如何使用JSP设置Cookie

  1. 创建一个Cookie对象,名称中不能包含空格或[ ] ( ) = , " / ? @ : ;
Cookie cookie = new Cookie("key","value");
  1. 设置有效期,单位为s
cookie.setMaxAge(60*60*24); 
  1. 发送给客户端
response.addCookie(cookie);

在这里插入图片描述
请求Cookie
每次访问服务器上的站点时Browser都会向Server发送的数据
这个站点对tomcat来说就是一个工程的范围
也就是说不同的工程同时运行在tomcat上
访问A工程时B工程的Cookie是不会发送给Server的

响应Cookie
访问某个页面时Server给Browser发送的Cookie
用于增加/修改/删除Browser端的Cookie

EL和JSTL

资源1
资源2
JSTL配置

  1. 下载jar包
  2. 解压后进入lib目录下有jstl.jar和standard.jar
  3. 把两个jar包放到工程的WEB-INF/lib目录下
  4. 新建JSP文件JSTL.jsp进行测试
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:out value="Hello JSTL"/>
</body>
</html>

访问时输出Hello JSTL表示成功

过滤器(Filter)

在这里插入图片描述首先新建一个filter

右击包名myfilter -> New -> Filter -> 命名为 UserViewFilter

在这里插入图片描述
然后配置web.xml
<web-app>下添加

<filter>
	<filter-name>UserViewFilter</filter-name>
	<filter-class>myfilter.UserViewFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>UserViewFilter</filter-name>
	<url-pattern>/UserView.jsp</url-pattern>
</filter-mapping>

最主要的配置项是<url-pattern>,这项参数指定了客户端请求何内容时触发过滤器,可以配置为/*,即所有请求都走过滤器。
我这里配置的是/UserView.jsp,即当客户端请求此页面时要经过滤器检测一些属性值,通过后方可放行到UserView.jsp,否则由过滤器作出响应

然后写Filter的代码,最主要是写doFilter方法

package myfilter;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet Filter implementation class UserViewFilter
 */
@WebFilter("/UserViewFilter")
public class UserViewFilter implements Filter {

    /**
     * Default constructor. 
     */
    public UserViewFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
	    HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        // 用传入的request和response初始化新的request和response对象
        
        HttpSession session = req.getSession(true);
        // 拿到req对象的session
        
        resp.setContentType("text/html;");        
        resp.setCharacterEncoding("utf-8");
        PrintWriter out = resp.getWriter();             

        Enumeration e = session.getAttributeNames();
        Boolean Check_islogin = false;
        while(e.hasMoreElements()) {
            if(session.getAttribute(e.nextElement().toString()).equals("islogin")) {
                //如果session中有islogin的属性名
                Check_islogin = true;
                //再去检查islogin的值
            }
        }
        if(Check_islogin) {
            if(session.getAttribute("islogin").equals("yes")) {
            	//如果拿到session中islogin属性的值是"yes"
                chain.doFilter(request, response);
                // 则把原请求回传到过滤链,即放行请求
            }
        }
        else {
            //如果session中没有islogin属性名则直接拒绝访问
            out.println("非法访问!点击<a href = "+"index.html"+">此处</a>返回首页");
        }
        
		
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	    System.out.println("初始化filter");
	}

}

在处理用户登录请求的UserServlet中,如果用户登录成功则向session中添加一项属性

"islogin":"yes"

然后跳转至UserView.jsp
UserServlet部分代码如下

String nexturl = "UserView.jsp";
HttpSession session = request.getSession();

session.setAttribute("islogin", "yes");
//使用过滤器检测此项属性,防止游客不登录直接访问UserView.jsp
				
getServletContext().getRequestDispatcher(nexturl).forward(request,response);

每次重启服务器时可以看到filter被初始化
在这里插入图片描述正常访问过程:
先登录
在这里插入图片描述
经UserServlet检查,确认登录成功session添加属性名"islogin",值为"yes"
然后跳转到UserView.jsp
在这里插入图片描述

非法访问过程:
不登录直接访问 UserView.jsp
在这里插入图片描述过滤器作出响应
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值