在之前学习过python web后并实践了一个项目后(目前我也在使用django + bootstrap在独立开发部署一个管理系统,有望可以开源放到gitee/github供大家学习参考与交流)

下面一个阶段以Java EE为主,层层深入,从最简单的JSP+Servlet入手,到Spring boot框架,(不建议先学Spring,配置相当麻烦,比Servlet还麻烦很多,下面的博客提供了最全的配置Tomcat方法)再到Spring Cloud微服务等,同时接触Ruo-Yi来快速搭建。

关于Servlet 配置(IDEA配置Tomcat服务器)可以看我这篇博客,点击此处 本人在 2022年亲测依旧有效,本篇博客也成为收藏最多帮助最广的博客之一,希望对你也有所收获。

JSP语法基本就是换个体系的Java,所以Java基本功非常重要。当然这里浅谈以下如何运行.jsp文件。这里我用的是IDEA,注意此时你已经按照我上述博客安装了Tomcat与JDK了。一般只要在index.jsp改代码就行了,当然也可以在统一web目录下进行多个jsp书写,但是第一个跳转的永远是Index.jsp。原因在于web.xml配置与idea运行配置里面,关于其他运行配置将在后期详细补充。

目录

  • 环境介绍
  • JSP简介
  • JSP基础语法
  • JSP内置对象
    • request对象
    • response对象
    • session对象
    • application 对象
    • out对象
    • page对象

环境介绍

静态网页展示的内容是不变的,而动态网页会随身变化,内容大部分来自于数据库的变化。目前流行的动态网页技术是ASP php JSP.
ASP:中间件,将web的请求转入到IIS解释器中,IIS将ASP上的Script脚本全部解析执行。缺点不能跨平台,只在windows平台上。
PHP:流行的动态网页技术,一种html内嵌式的语言,融合了Java,C,Perl.很多网站采用PHP编写自身的网页。缺点是安装复杂。
JSP:(java server pages)服务器端脚本,由html和嵌入式java组成。简单易用,完全面对对象。

JSP简介

首先客户端向web服务器提出请求,然后JSP负责将页面转化为Servlet,Servlet经过虚拟机编译成类文件,再把类文件加载到内存中执行,最后由服务器将处理结果返回给客户端。

<body><% int count=0;for(int i=1;i<10;i++) {count+=i;}out.print(" "+count);%>
</body>

可以在server.xml更改服务端口和改变web默认的访问目录。
1.修改端口号

# server.xml
<Connector port='8080'></Connector>

2.修改web默认的访问目录

<Host name="localhost" appBase= "webapps"unpackWARs="true" autoDeploy="true"xmlValidation="false" xmlNamespaceAware="false"></Host># 修改appBase中的文件夹地址
appBase = "D:\test"

3.建立自身的web目录

应用部署再Tomcat服务器的默认webapps目录,也可以部署自己创建的目录下。方法:首先创建目录D:\test,其次配置web目录,在server.xml末尾 加语句

<Context path="test" docBase ="D:\test" debug="0" reloadable="true"></Context>

JSP基础语法

注释:一般和java混用

<%-- 注释内容 --%>

声明:和java一样.在其页面可以被调用和使用

<%!int x,y=60;String name = "Joah";int chengji(int m,int n) {return m*n;}%>

JSP表达式:将动态信息显示在页面中

<%=new Date()%>

page指令:设置JSP页面的属性和相关功能,基本语法如下:language 默认是java, import需要导入的包,pageEncoding 用于设置页面的编码

<%@ page attribute1="value1" [...attribute n="value n"]%>

include指令:在JSP页面生成Servlet 引入需要包含的页文件,可以是html文件或者JSP文件。在编译时导入

<%@ include file="url"%>

taglib指令:自定义新的标签在页面执行,语法如下:JSTL标签

<%@taglib uri="tagliburl" prefix="tagPre" %></%@taglib>例如:
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %></%@>
<c:forEach begin="1" end="10" var="num"><c:out value="${num}"></c:out>
</c:forEach>

include动作:和指令十分相似,引入文件到目标页面,被访问时导入的。效率稍慢

<jsp:include page="rel url" flush="true"/>
page需要包含的文件路径,flush用于指定输出缓存是否转移到被导入文件中

forward动作:转发请求到另一个页面,请求过程中会连同请求的参数数据一起被转发到目标页面中。

<jsp:forward page="rel url" />
page="<%=url %>"

param动作:传递参数信息,和上述两个结合使用。格式要统一,否则会出现乱码问题

<jsp:param name="参数名称" value="李四"/>main.jsp:<jsp:include page="sub.jsp"><jsp:param value="Joan" name="username"/>
</jsp:include>sub.jsp:
<%String username = request.getParameter("username")%><td>用户名: <%=uername%></td>

JSP内置对象

含义是可以直接在JSP页面使用的对象,使用前不需要声明它们。

request对象

方法

每访问一个页面,就会产生一个HTTP请求。包含了参数值或者信息,可以获取客户端和服务端的信息,如IP,传递参数等。

方法 方法说明
getParameter() 取得请求中指定的参数值,返回String
getParameterNames() 获取参数名称,返回枚举类型
getMethod() 获取客户提交信息的方式。即POST,GET
getRemoteAddr() 获取客户的IP地址
getHeader() 获取HTTPt头文件的指定值

接收请求参数

获取网页请求参数

浏览器地址栏输入 ?name=jacin&city=shanghai
在url参数传递时候,页面使用?连接请求参数。

index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head><title>Title</title>
</head>
<body  style="text-align: center;">
<%String name = request.getParameter("name");String city = request.getParameter("city");if(name != null && city != null) {
%>
<p> Welcome <%=name%>,你的城市是<%=city%></p>
<%}else {
%>
<p>欢迎访问</p>
<%}
%>
</body>
</html>

一般采取表单提交的方式传递参数。在form中,两个重要的属性:action 和method (post)。

getPa.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head><title>Title</title>
</head>
<body  style="text-align: center;"><form  action="index.jsp" method="post"><table align="center"><tr><td>姓名</td><td><input type="text" name="name" value="" /></td></tr><tr><td>城市</td><td><input type="text" name="city" value="" /></td></tr><tr><td><input type="submit" value="提交" /></td></tr><tr><td><input  type="reset" value="重置"/></td></tr></table></form>
</body>
</html>

请求中文乱码的处理
可以在接收页面(即上述的index.jsp)添加 request.setCharacterEncoding(“utd-8”);

或者:
在取得参数后,通过转码方式转为合适的字符集
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8")

可以编写一个Servlet过滤器来解决中文乱码问题,并可以通过配置解决所有的请求处理字符集问题(推荐)
获取请求的头部信息

除了有getHeaders(),有以下方法:String getHeader(String name) ,int getIntHeader(String name)获取整型的表头信息

<body  style="text-align: center;"><%Enumeration<String> e = request.getHeaderNames();while(e.hasMoreElements()) {String name = e.nextElement();String value = request.getHeader(name);if(value == null || "".equals(value)) {value = "空字符";}%><p> 表头名称: <%=name%>&nbsp;&nbsp;对应: <%=value%></p><%}%>
</body>

response对象

当用户访问一个页面时候,会产生一个HTTP请求,服务器做出响应时调用的是reponse包,实现的是javax.servlet.http.HttpServletResponse。

方法 说明
addHeader(String name,String value) 向页面添加头和对应的值
sendRedirect(String url) 页面重定向
setContentType(String type) 设定页面的MIME类型和字符集

设置头信息

包括设置返回的MIME类型、返回的字符集、页面中的meta等信息。有两种方法设置

reponse.setContentType(String type):type值为 "text/html;charset=utf-8"
page指令: <%@ page contentType="text/html;charset=utf-8 language="java" %>
利用page指令设置字符集相对简单。

设置meta信息是指在html页面存在head之间的信息。

<meta http-equiv ="x" content =" y">
x:cache-control,y:no-cache:请求和响应遵循的缓存机制策略
x: pragma y:no-cache 设定禁止浏览器从本地缓存中调取页面内容# setMeta.jsp:
实际开发中直接在html写定,不是在响应中设定
<body><%response.setHeader("refresh","1")response.setHeader("keywords/description/cache-control",words)%>
</body>

设置页面重定向
重定向指一个页面在收到一个访问请求后,根据请求的url重新跳转到其他页面。

<%response.sendRedirect("sendPage.jsp")
%>
<!DOC>

session对象

web开发中,session对象占据极其重要的位置。判断是否为同一用户,用来记录客户的连接信息等。HTTP协议是一种无状态(不保存连接状态)的协议.因此,如果浏览器没有关闭又有请求了,那么网站可以识别出来。

名称 说明
会话 打开到关闭浏览器过程称为一个会话
session对象生命周期 访问的这段时间
session,cookie 一一对象,JSP会将创建的session对象存在Cookie中

获取session对象ID可以判断会话是否为同一会话。
假设有3个页面,ex3_2.jsp ex3_3.jsp ex3_4.jsp (2和3在一个应用下)
一个web应用的session对象的ID值是唯一的,病情两个应用的参数利用session对象是获取不到值的.

# ex3_2.jsp
<body><%String sessionID =session.getID();session.setAttribute("name","john");String author = (String) session.getAttribute("author");%><form  action="ex3_3.jsp" method ="post"><input type="submit" value="转向ex3_3.jsp"/></form><a href="../ch03/ex3_4.jsp" >来到4jsp</a>
</body>

用户登录信息的保存

# login.jsp
<body><form action="validate.jsp" method= "post">用户名称:<input type ="text" name="username" /><br>密码:<input type="password" name="password" /><br><input type+"submit" value="登录"></form>
</body># validate.jsp
<body><%!//声明一个用户集合,模拟数据库取出用户集Map<String,String> map=new HaspMap<String,String>();bool flag= false;map.put("jon","12345"); //添加样例数据%><%!//声明验证方法boolean validate(String username,String password) {String passwd = map.get(username);if(passwd !=null && passwd.equals(password)) {return true;}else {return false;}
}%><%//获得页面提交的用户名和密码String username = request.getParameter("username");String password = request.getParameter("password");if(username==null || username=="" || password==null || password =="") {response.sendRedirect("login.jsp");}flag = validate(username.password);if(flag) {//保存session对象session.setAttribute("username",username);session.setAttribute("password",password);response.sendRedirect("class.jsp");}%>
</body># logout.jsp:
<%
String name = (String)session.getAttribute("name");
session.removeAttribute("john");
session.invalidate();
reponse.sendRedirect("login.jsp")
%>
退出操作利用简单的invalidate实现的,实际开发中结合Struts框架

application 对象

实现的接口javax.servlet.ServletContext.服务器运行时候有效,关闭则消失了。

方法 说明
getAttribute(String name) 存放在application中关键字含name
getServletInfo() 获取Servlet当前版本信息
getRealPath(String path) 获取指定文件的实际路径

获取指定页面的路径

# application.jsp 用于指定页面输出所在实际路径和相对路径
<%=application.getRealPath("application.jsp") %>
<%=application.getResource("application.jsp") %>
<%=application.getContextPath("application.jsp") %>

设计一个网站计数器

用于保存访问网站的人数。

<%Integer count = (Integer) application.getAttribute("count");if(count == null) {count=1;}else {count++;}application.setAttribute("count",count);
%>
<!DOC>application 对象在web应用时一直存在于服务器,因此保存这种相对全局变量相对占用资源,因此不推荐使用。实际开发,让对象存在于必要的时间段,否则加剧时会造成不足。

out对象

继承javax.servlet.jsp.JspWriter 一个输出流对象。常用的方法就是输出内容到Html

方法 说明
append(char c) 将字符添加到输出流
clear() 清空缓存
flush() 网页流的刷新
println() 将内容直接打印
write() 只输出与字符相关的数据
<body><%out.println("<table border'2 align = 'center' " );out.println("<tr>")%>
</body>
调用clear之前不要调用flush方法,否则抛IO异常。

page对象

对象实质是java.lang.Object对象,代表转译后的Servlet。page对象是指当前的JSP页面本身,在实际开发中不常用。

方法 说明
getClass() 返回被转译的Servlet类
hashCode() 返回被转译的Servlet类的哈希代码
toString() 被转译的Servlet类转换字符串
<body><%int code = page.hashCode(); //获取page对象中的值String str = page.toString();out.println(code);out.println(str); %>
</body>

config对象

实现了javax.servlet.ServletConfig 接口,一般用于在页面初始化传递参数。

方法 说明
getServletName() 获得Servlet名字
equals(Obj) 比较此时的对象是否和指定的对象相等
toString() 获得此对象的值

在web-inf文件的web.XML

<web-app version="4.0"></web-file-file><servlet><servlet-name>jspconfigdemo</servlet-name><jsp-file>/config.jsp</jsp-file><init-param><param-name>url</param-name><param-value>baidu.com</param-value></init-param>
</servlet><servlet-mapping><serlet-name>jspconfigdemo</serlet-name><url-pattern>/config.jsp</url-pattern>
</servlet-mapping></web-app>

配置Servlet,包括初始化参数。

# config.jsp
<body><%String url = config.getInitParameter("url");String str = config.toString();out.config(url)%>
</body>

一般而言很少使用config对象,因为JSP实质是Servlet.

以上就是JSP全部内容了,希望有所帮助。

[Servlet 1] JSP基础知识相关推荐

  1. JSP基础知识学习详解!

    JSP基础知识学习 一.JSP是什么 JSP(全称JavaServer Pages)是由[Sun](https://baike.baidu.com/item/Sun Microsystems)公司主导 ...

  2. JSP基础知识总结一

    <%! %>声明变量和方法: <% %>插入Java程序片: <%= %>插入一个表达式且必须能求值: < !-- HTML注释内容 -->; < ...

  3. JSP基础知识总结二

    Jsp可以通过打开浏览器,输入网址 http://localhost:8080/XXX.jsp查看执行效果 超链接:<a href=链接的页面地址?参数1=串值1 & 参数2=串值2~& ...

  4. 关于jsp基础知识题目(一)

    1.为了标识一个HTML文件,应该使用标记 html 2.form表单中提交数据的目的地址的属性是 action 3.关于post:安全性较好,地址栏看不到提交的数据,超链接标识post提交方式,可以 ...

  5. JSP与Servlet 基础知识

    JSP与Servlet 综述:Java Servlet是JSP技术的基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成.现在许多Web服务器都支持Servlet,即使 ...

  6. [JSP暑假实训] 一.MyEclipse安装及JAVA基础知识

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识.非常基础的文章, ...

  7. Web基础之Servlet+JDBC+JSP项目实战记录(一)

    Web基础之Servlet+JDBC+JSP项目实战记录(一) 一.项目说明: 通过前面的学习,我们已经对Servlet有了一定的了解:接下来我们要结合数据库和JSP技术一步一步完成一个小型的动态we ...

  8. request、response揭秘(备java基础,servlet,jsp,javaee)-任亮-专题视频课程

    request.response揭秘(备java基础,servlet,jsp,javaee)-3658人已学习 课程介绍         掌握Request对象的作用,期属性,response特点. ...

  9. javaweb_笔记2(Servlet源码分析;request详解;请求域;转发和重定向;WebServlet注解;jsp基础语法,JavaBean。)

    1.HttpServlet源码分析 HttpServlet类是专门为HTTP协议准备的.比GenericServlet更加适合HTTP协议下的开发. HttpServlet在哪个包下? jakarta ...

最新文章

  1. 职称计算机 菏泽,山东菏泽2016年职称计算机首批考试时间
  2. tomcat 服务器故障排除
  3. cocos2dx中关于Action动作的相关API的详细介绍
  4. 用友BIP|YonBuilder+APICloud 双平台,“1+1>N”的低代码战略
  5. python for循环文件每一行_python – 在使用for循环读取文件时跳过一行
  6. 网络规划设计师论文汇总(2012-2018)考前冲刺真题
  7. java中自定义异常类
  8. 【数据结构】栈、队列、堆的python实现
  9. java简单的思维逻辑训练_简单的代码,适合初学者,锻炼逻辑思维能力,可以练习练习!...
  10. 一文详解Adobe Photoshop 2020安装教程
  11. 英语中定语和状语的区别
  12. btwdins.exe
  13. 免费高清壁纸网站推荐
  14. 8个视频素材网站,免费可商用,视频剪辑必备。
  15. 充电电池哪个牌子好用?
  16. tomcat环境变量的设置:
  17. C# office dll引用及生成
  18. mysql去重分组_mysql 分组 去重
  19. iOS基础UI瀑布流界面简单搭建
  20. Linux系统下搭建常用服务器

热门文章

  1. Java多线程案例8-2Svip优先办理服务
  2. 九、wxWidgets菜单
  3. linux shell 学习笔记
  4. 华为手机活了?今年出货量目标提升到4000万!底气从何而来?
  5. 2021网易游戏研发岗笔试题解及感想
  6. 时间管理的高级技巧培训
  7. maven整合SSM搭建项目
  8. 基于STM32F103ZET6库函数定时器中断实验
  9. 格式化硬盘时出现“由于i/o设备错误,无法运行此项请求”错误提示,如何解决?
  10. 移动磁盘由于IO设备错误,无法运行此项请求要怎么办啊