在之前学习过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运行配置里面,关于其他运行配置将在后期详细补充。

静态网页展示的内容是不变的,而动态网页会随身变化,内容大部分来自于数据库的变化。目前流行的动态网页技术是ASP php JSP.
ASP:中间件,将web的请求转入到IIS解释器中,IIS将ASP上的Script脚本全部解析执行。缺点不能跨平台,只在windows平台上。
PHP:流行的动态网页技术,一种html内嵌式的语言,融合了Java,C,Perl.很多网站采用PHP编写自身的网页。缺点是安装复杂。
JSP:(java server pages)服务器端脚本,由html和嵌入式java组成。简单易用,完全面对对象。
首先客户端向web服务器提出请求,然后JSP负责将页面转化为Servlet,Servlet经过虚拟机编译成类文件,再把类文件加载到内存中执行,最后由服务器将处理结果返回给客户端。
<body>
<%
int count=0;
for(int i=1;i<10;i++) {
count+=i;
}
out.print(" "+count);
%>
body>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wDdTSSHK-1660914492865)(C:\Users\17399\AppData\Roaming\Typora\typora-user-images\image-20220814222057702.png)]](https://1000bd.com/contentImg/2024/03/29/153d54d539682d50.png)
可以在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>
注释:一般和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页面使用的对象,使用前不需要声明它们。
方法
每访问一个页面,就会产生一个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.*" %>
Title
<%
String name = request.getParameter("name");
String city = request.getParameter("city");
if(name != null && city != null) {
%>
Welcome <%=name%>,你的城市是<%=city%>
<%
}else {
%>
欢迎访问
<%
}
%>
一般采取表单提交的方式传递参数。在form中,两个重要的属性:action 和method (post)。
getPa.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
Title
请求中文乱码的处理:
可以在接收页面(即上述的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)获取整型的表头信息
<%
Enumeration e = request.getHeaderNames();
while(e.hasMoreElements()) {
String name = e.nextElement();
String value = request.getHeader(name);
if(value == null || "".equals(value)) {
value = "空字符";
}
%>
表头名称: <%=name%> 对应: <%=value%>
<%
}
%>
当用户访问一个页面时候,会产生一个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之间的信息。
x:cache-control,y:no-cache:请求和响应遵循的缓存机制策略
x: pragma y:no-cache 设定禁止浏览器从本地缓存中调取页面内容
# setMeta.jsp:
实际开发中直接在html写定,不是在响应中设定
<%
response.setHeader("refresh","1")
response.setHeader("keywords/description/cache-control",words)
%>
设置页面重定向
重定向指一个页面在收到一个访问请求后,根据请求的url重新跳转到其他页面。
<%
response.sendRedirect("sendPage.jsp")
%>
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
<%
String sessionID =session.getID();
session.setAttribute("name","john");
String author = (String) session.getAttribute("author");
%>
来到4jsp
用户登录信息的保存

# login.jsp
# validate.jsp
<%!
//声明一个用户集合,模拟数据库取出用户集
Map map=new HaspMap();
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");
}
%>
# logout.jsp:
<%
String name = (String)session.getAttribute("name");
session.removeAttribute("john");
session.invalidate();
reponse.sendRedirect("login.jsp")
%>
退出操作利用简单的invalidate实现的,实际开发中结合Struts框架
实现的接口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);
%>
application 对象在web应用时一直存在于服务器,因此保存这种相对全局变量相对占用资源,因此不推荐使用。实际开发,让对象存在于必要的时间段,否则加剧时会造成不足。
继承javax.servlet.jsp.JspWriter 一个输出流对象。常用的方法就是输出内容到Html
| 方法 | 说明 |
|---|---|
| append(char c) | 将字符添加到输出流 |
| clear() | 清空缓存 |
| flush() | 网页流的刷新 |
| println() | 将内容直接打印 |
| write() | 只输出与字符相关的数据 |
<%
out.println("")
%>
调用clear之前不要调用flush方法,否则抛IO异常。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
page对象
对象实质是java.lang.Object对象,代表转译后的Servlet。page对象是指当前的JSP页面本身,在实际开发中不常用。
方法 说明 getClass() 返回被转译的Servlet类 hashCode() 返回被转译的Servlet类的哈希代码 toString() 被转译的Servlet类转换字符串
<%
int code = page.hashCode(); //获取page对象中的值
String str = page.toString();
out.println(code);
out.println(str);
%>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
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>urlparam-name>
<param-value>baidu.comparam-value>
init-param>
servlet>
<servlet-mapping>
<serlet-name>
jspconfigdemo
serlet-name>
<url-pattern>/config.jspurl-pattern>
servlet-mapping>
web-app>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
配置Servlet,包括初始化参数。
# config.jsp
<%
String url = config.getInitParameter("url");
String str = config.toString();
out.config(url)
%>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
一般而言很少使用config对象,因为JSP实质是Servlet.
以上就是JSP全部内容了,希望有所帮助。
-
相关阅读:
鸿蒙HarmonyOS实战-ArkUI组件(Image)
聊一聊适配器模式
点餐小程序实战教程02用户注册
Spring Data Envers:使用实体修订进行审计
浙江2022农民丰收节 国稻种芯:主场东阳活动农民群众联欢
Qt ListItem添加右键菜单
Attention Is All You Need--论文笔记
unity工具类篇 时间间隔帮助类(天、时、分、秒) 下篇
梳理拯救烂怂代码?我是这么做的
[wp][RCTF2015]EasySQL
-
原文地址:https://blog.csdn.net/QAZJOU/article/details/126431931