0
点赞
收藏
分享

微信扫一扫

体验java web



文章目录

  • 体验java web
  • JSP介绍
  • JSP的特性
  • 转发和重定向
  • session作用域
  • application作用域


体验java web

IDEA2021创建java web项目参考如下文章:
Intellij IDEA2021.1创建Java web项目(超详细)

JSP介绍

在新创建好的java web项目中的web目录下创建一个index1.jsp文件,IDEA会生成一段代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
</body>
</html>

JSP是一个java服务页面,是sun公司发明的基于java代码的多元化的页面,仍然是html的形式来显示,可以写html css js还可以写java代码,目的是为了需要渲染数据,JSP页面其实是一个java类,只不过呈现的表面是一个html文件,目的是为了方便使用。

  • JSP页面如何编写java代码:
    使用<%java代码%>进行编写

<%
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String time = sdf.format(date);
%>

  • JSP页面如何引入java相关类
    使用<%@page import="java相关类"%>

<%@page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>

在IDEA中当你敲到java的代码时,编辑器会自动帮你引入相关的类。
代码如下:

<%--
  Created by IntelliJ IDEA.
  User: root
  Date: 2021/8/12
  Time: 17:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
<!--JSP是一个java服务页面,是sun公司发明的基于java代码的多元化的页面,仍然是html的形式来显示
    可以写html css js还可以写java代码,目的是为了需要渲染数据
    JSP页面其实是一个java类,只不过呈现的表面是一个html文件,目的是为了方便使用
-->
请输入用户名:<input type="text" name="userName">
<%
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String time = sdf.format(date);
%>
<%=time%>
</body>
</html>

保存运行tomcat服务一下。

可以在IDEA中预览一下

结果如图所示:

体验java web_java web

JSP的特性

  • JSP的九大内置对象,就是别人创建好了的九个对象,其中有:

out对象可以往页面中输出内容
page当前页面的对象
pageContext当前页面上下文对象
request请求对象
response响应对象
session 会话对象
application 应用程序
config 配置对象
exception异常对象

以上这些对象都属于某一个具体的类,直接拿来用就可以了,还有就是为了简化开发要在JSP中尽量少些java代码

  • 四大作用域

page 当前页面,指的是在当前这个页面的范围
request 请求作用域,指的是一个请求的范围
session会话作用域,整个会话的过程,默认时间是30分钟
application当前项目作用域,是最大的范围,只要服务器不关闭这个作用域的值是共享的

  • 三大指令

page用于导包,设置编码格式等
taglib导入标签库
include表示嵌套页面指令

浏览器访问网页异常后会返回一个状态码,分别表示不同的含义:

404表示请求资源不存在,90%是路径的错误

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    out.print("hello world");
%>
</body>
</html>

接下来使用jsp模拟一个用户登录页面输入用户名和密码:
新建一个login.jsp和getlogininfo.jsp页面
login.jsp中做一个登录的操作,请求输入用户名和密码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--method表示提交方式,默认不写就是get,可以改变为post的-->
<form action="getlogininfo.jsp" method="get">
    请输入用户名:<input type="text" name="userName"><br>
    请输入密码:<input type="text" name="pwd">
    <input type="submit" value="登录">
</form>
</body>
</html>

在getlogininfo.jsp中获取用户输入的信息:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
    String name = request.getParameter("userName");
    String pwd = request.getParameter("pwd");
    out.print("用户名是:" + name + "密码是:" + pwd);
%>
</body>
</html>

由于getlogininfo.jsp页面获取用户的用户名时可能会有中文乱码的问题,这里给出两套解决方案:

  • 第一种:针对于请求方式为post可以使用request对象设置一个CharacterEncoding为UTF-8

request.setCharacterEncoding("utf-8");

  • 第二种:在tomcat中找到server.xml文件,在8080端口下添加以下内容

URIEncoding="utf-8"

如图所示:

体验java web_java web_02


保存退出,重启tomcat服务打开页面试试。

  • 用JSP页面写一个注册的页面:
    register.jsp如下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="reginfo.jsp">
    用户名:<input type="text" name="name"><br>
    密码:<input type="password" name="pwd"><br>
    性别:<input type="radio" name="sex" value="male">男
    <input type="radio" name="sex" value="female">女<br>
    请选择城市:
    <select name="city">
        <option value="zz">郑州</option>
        <option value="bj">北京</option>
        <option value="cd">成都</option>
    </select><br>
    <input type="checkbox" name="hobby" value="bas">篮球
    <input type="checkbox" name="hobby" value="code">敲代码
    <input type="checkbox" name="hobby" value="dance">跳舞
    <br>
    <input type="submit" value="注册">
</form>
</body>
</html>

reginfo.jsp如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
注册页面
<%
    out.println("用户名:" + request.getParameter("name"));
    out.println("密码:" + request.getParameter("pwd"));
    out.println("性别:" + request.getParameter("sex"));
    out.println("城市:" + request.getParameter("city"));
    String[] hs = request.getParameterValues("hobby");
    for (String str : hs) {
        out.print("爱好:" + str);
    }
%>
</body>
</html>

保存运行一下。

转发和重定向

继续完善之前的用户登录跳转页面的操作:
新建一个login1.jsp页面作为用户输入用户名和密码的页面,用户名和密码定为admin和0000,用户输入用户名和密码后悔跳转到dologin.jsp中对用户输入的信息进行处理,输入正确则登录成功,反之则登录失败

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="dologin.jsp" method="post">
    用户名:<input type="text" name="name">
    密码:<input type="password" name="pwd">
    <input type="submit" value="登录">
</form>
</body>
</html>

dologin.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
登录验证页面
<!--假设用户名时admin密码是0000-->
<%
    String name = request.getParameter("name");
    String pwd = request.getParameter("pwd");
    if (name.equals("admin") && pwd.equals("0000")) {
        request.setAttribute("userName", name);
        RequestDispatcher dispatcher = request.getRequestDispatcher("/success.jsp");
        dispatcher.forward(request, response);
        //或者是request.getRequestDispatcher("/success.jsp").forward(request,response);
        //response.sendRedirect("/day01/success.jsp");//重定向
//        response.sendRedirect("/day01/success.jsp");
    } else {
        //表示登录失败,跳转到error页面
        //转发
        request.getRequestDispatcher("/error.jsp").forward(request, response);
        //重定向
//        response.sendRedirect("/day01/error.jsp");
    }
%>
</body>
</html>

success.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--转发的写法--%>
登录成功<%out.print(request.getAttribute("userName").toString());%>
<%--重定向的写法--%>
<%--    登录成功--%>
<%--    <%--%>
<%--    Object obj = request.getAttribute("userName");--%>
<%--    if(obj!=null){--%>
<%--        out.print(obj.toString());--%>
<%--    }--%>
<%--    %>--%>
</body>
</html>

error.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
登录失败
</body>
</html>

  • 转发
    转发的特点:

一次请求
地址栏不会发生改变
操作是服务器端进行的也就是说转发是服务器帮我们进行的操作
转发是在当前请求的基础上进行转发的,所以只可以转发到本项目的页面

在这里转发的代码有两种写法:

//第一种
        request.setAttribute("userName", name);
        RequestDispatcher dispatcher = request.getRequestDispatcher("/success.jsp");
        dispatcher.forward(request, response);
		//第二种        
        request.getRequestDispatcher("/success.jsp").forward(request,response);

  • 重定向

1.地址栏会进行改变
2.重定向是两次请求(所以我们放在第一个请求对象中的内容 无法获取)
3.重定向是客户端的操作
4.因为是两次请求,所以我们放在request作用域的内容无法获取
5.地址栏写的时候必须是绝对路径,因为重定向可以重定向到任何地方

输入成功后重定向的写法:

response.sendRedirect("/day01/success.jsp");

session作用域

session表示会话作用域,session的默认失效时间是30分钟,可以设置较短的时间 不设置就是默认的,当浏览器关闭这个session就失效了。
还是上面的用户登录跳转页面的代码,也可以用session作用域来书写:
在dologin.jsp中更改代码:

if (name.equals("admin") && pwd.equals("0000")) {
        //表示登录成功 跳转成功页面
        //转发 & 重定向
//        request.setAttribute("userName", name);
        session.setAttribute("userName", name);
        session.setMaxInactiveInterval(5);//设置session的失效时间
        response.sendRedirect("/day01/success.jsp");
    } else {
        //表示登录失败,跳转到error页面
        //转发
        request.getRequestDispatcher("/error.jsp").forward(request, response);
        //重定向
//      response.sendRedirect("/day01/error.jsp");
    }

获取session作用域的默认失效时间:
login1.jsp中:

<%
    out.print(session.getMaxInactiveInterval());//获取session作用域的默认失效时间
%>
<form action="dologin.jsp" method="post">
    用户名:<input type="text" name="name">
    密码:<input type="password" name="pwd">
    <input type="submit" value="登录">
</form>

success.jsp中更改:

<%
    Object obj = session.getAttribute("userName");
    if (obj != null) {
        out.print(obj.toString());
    }
    /*
    * 在配置文件中添加URIEncoding=utf-8
    * */
%>

application作用域

新建一个index3.jsp页面,用来统计访问服务器的人数。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--application作用域--%>
<%
    //所有的getAttribute都是object类型的
    Object obj = application.getAttribute("count");
    //如果为空 表示系统的服务器启动后还没有人访问过
    if (obj == null) {
        application.setAttribute("count", 1);
    } else {
        int newCount = Integer.parseInt(application.getAttribute("count").toString());
        application.setAttribute("count", newCount + 1);
    }
    out.print("当前系统在线人数是:" + application.getAttribute("count"));
%>
</body>
</html>

四大作用域的大小顺序是:page < request < session < application
index4.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript">
        function gotoNewPage() {
            location.href = "/index5.jsp"
        }
    </script>
</head>
<body>
<%
    session.setAttribute("name", "赵四");
%>
<input type="button" value="跳转页面" onclick="gotoNewPage()">
</body>
</html>

index5.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    Object obj = session.getAttribute("name");
    if (obj != null) {
        out.print(obj.toString());
    }
%>
</body>
</html>


举报

相关推荐

0 条评论