广水网站定制,怎么注册一个空壳公司,建筑材料价格查询网站,深圳沙头角网站建设一、JSP工作原理 1.客户端请求JSP页面#xff1a;用户通过浏览器发送一个请求到服务器#xff0c;请求一个特定的JSP页面。这个请求被服务器上的Web容器#xff08;如Apache Tomcat#xff09;接收。 2.JSP转换为Servlet#xff1a;当JSP页面第一次被请求时#xff0…一、JSP工作原理 1.客户端请求JSP页面用户通过浏览器发送一个请求到服务器请求一个特定的JSP页面。这个请求被服务器上的Web容器如Apache Tomcat接收。 2.JSP转换为Servlet当JSP页面第一次被请求时Web容器将JSP文件转换成一个Java Servlet。这个过程涉及到将JSP页面中的标记、脚本和JSP指令转换成Java代码。如果JSP页面已经被转换并编译成Servlet且自上次修改以来没有变化Web容器将重用已有的Servlet。 3.编译Servlet转换生成的Java Servlet代码被编译成字节码.class文件。这使得Web容器可以像处理任何其他Servlet一样来处理JSP页面。 4.Servlet处理请求一旦JSP页面对应的Servlet被编译Web容器就会加载并执行该Servlet。Servlet执行过程中会执行其中的Java代码并且根据代码逻辑生成动态内容。这包括从数据库检索数据、执行业务逻辑等。 5.生成响应Servlet执行完毕后将生成的HTML内容可能还包括CSS、JavaScript等作为响应返回给客户端。这个响应是通过Servlet的response对象生成的。 6.客户端显示响应最后浏览器接收到从Servlet返回的响应并渲染HTML内容用户便可以看到生成的页面。 二、锚点链接实现
目录使用href#xxx 跳转目标使用idxxx
!DOCTYPE html
html
headtitle锚点链接示例/title
/head
body!-- 创建指向锚点的链接 --
a href#section1跳转到第一节/a |
a href#section2跳转到第二节/a!-- 页面内容 --
h2 idsection1第一节/h2
p这是第一节的内容。/ph2 idsection2第二节/h2
p这是第二节的内容。/p/body
/html 三、JSP注释
1.普通注释
% //普通注释 %
% /*普通注释*/ %
2.隐式注释
%-- 隐式注释 --% 普通注释用户可以通过网页源码查看到注释而隐式注释用户不可查看。当JSP页面被转换和编译成Servlet时这些隐式注释会被完全忽略不会出现在生成的HTML中客户端不可见。 四、 JSP指令元素
1.include指令 include指令的作用是在一个页面中导入其他JSP页面。
% include fileheader.jsp %
2.page指令 page指令用于定义有关JSP页面的各种属性。 language声明用于JSP页面的脚本语言。默认值为java。 extends指定JSP页面应继承的类。通常不需要用到因为JSP页面默认继承自javax.servlet.jsp.HttpJspPage。 import导入JSP页面中使用的Java类或包。多个包或类之间用逗号分隔。 session指定JSP页面是否可以访问HTTP会话session。默认值为true。 contentType设置响应的MIME类型和字符编码。默认值为text/html; charsetISO-8859-1。 ......
% page languagejava contentTypetext/html; charsetUTF-8 importjava.util.*,java.io.* %
3.taglib指令 taglib指令用于引入一些特定的标记库以简化JSP页面的开发。
% taglib uriuri prefixprefix % 例如从JSP标准标记库的core库引入前缀为c的标记
% taglib urihttp://java.sun.com/jsp/jstl/core prefixc %
综合案例
% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%
% include fileheader.jsp % !-- include指令将header.jsp的内容包含进来 --
% page importjava.util.*, java.text.* % !-- page指令用于导入Java类 --
% taglib urihttp://java.sun.com/jsp/jstl/core prefixc % !-- taglib指令用于导入JSTL核心标签库 --!DOCTYPE html
html
headtitleSample Page with Directives/title
/head
body!-- 使用taglib指令定义的JSTL核心标签库输出当前日期 --
pThe current date and time: c:out value${now} //p!-- include指令包含footer.jsp --
% include filefooter.jsp %/body
/html 五、JSP动作元素
1.jsp:include动作 jsp:include动作允许在请求的时间内在JSP页面中包含静态或动态的资源。
jsp:include pagerelativeURL /
2.jsp:forward动作 将一个JSP的内容传到page指定的另一个JSP中。
jsp:forward pagerelativeURL /
3.jsp:plugin动作 在JSP页面中嵌入JavaBean或脚本。
jsp:plugin typebean | appletcode...codebase...archive...width...height...align...jreversion...jsp:paramsjsp:param name... value.../!-- 更多参数 --/jsp:paramsjsp:fallback!-- 在插件不可用时显示的内容 --/jsp:fallback
/jsp:plugin
type指定插件的类型可以是applet或bean。 codeapplet的类名或bean的对象序列化表示。 codebaseapplet类文件或bean对象存放的基本URL。 archive包含applet或bean的JAR文件名称。 width和height指定插件在页面上的显示尺寸。 align插件在页面中的对齐方式。 jreversion指定运行applet或bean所需的Java插件版本。 jsp:params和jsp:param用于传递参数到applet或bean。 jsp:fallback当插件不可用如浏览器不支持插件或未安装相应的Java插件时在页面上显示的备用内容。
4.jsp:param动作 jsp:param元素用于向其他JSP元素如jsp:forward、jsp:include和jsp:plugin传递参数通过这种方法可以将数据从一个JSP页面传递到另一个页面或组件。
jsp:param nameparameterName valueparameterValue / 六、JSP脚本元素
1.变量声明 %!int count 0;String message Hello, World!;%
2.方法声明
% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%
!DOCTYPE html
html
headtitleMethod Declaration in JSP/title
/head
body
%! // 方法声明public String toUpperCase(String input) {if (input ! null) {return input.toUpperCase();}return ;}
%%// 方法调用String message Hello, World!;String upperMessage toUpperCase(message);
%pOriginal Message: % message %/p
pUpper Case Message: % upperMessage %/p/body
/html 3.表达式元素 JSP表达式元素用于直接在JSP页面中输出Java表达式的值。表达式元素由 % 开始由 %结束。
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle表达式使用案例/title
/head
bodypCurrent time: % new java.util.Date() %/pp10 20 % 10 20 %/p/body
/html 七、JSP隐含对象和有效范围
request代表客户端的请求信息。通过这个对象可以获取到客户端的请求参数、头信息等。 response代表对客户端的响应。可以通过这个对象设置响应头、发送错误等。 pageContext包含了与JSP页面相关的上下文信息。可以用来获取其他隐含对象、分享数据等。 session代表用户会话可以用来在不同的请求之间保持信息。 application代表整个Web应用的上下文环境可以用来在整个应用范围内共享信息。 config代表Servlet配置的信息可以用来获取初始化参数。 out代表输出流用于将内容输出到客户端。 page代表当前的JSP页面本身相当于在Servlet中的this关键字。 exception代表JSP页面在执行过程中抛出的异常对象仅在错误页面中可用。
1.隐含对象的有效范围 页内有效(pageContext)对象创建后只能在当前JSP页面内被访问。所有页内有效对象的引用存储在页面上下文对象pageContext中使用pageContext的setAttribute()和getAttribute()方法传递数据。
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle页面有效案例/title
/head
body
%// 使用pageContext设置一个属性pageContext.setAttribute(attribute_name, attribute_value);// 现在使用 pageContext 得到属性值String message (String) pageContext.getAttribute(attribute_name);
%!-- 在页面输出属性值 --p% message %/p
/body
/html 请求有效(request) 请求有效的对象在同一请求不同JSP页面内都可以访问。如果请求转向到同一运行时的其他资源这些对象依然有效。请求有效的对象在请求处理结束时就会失效。
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle请求有效案例/title
/head
body
%// 获取请求参数“用户名”String username request.getParameter(username);
%pWelcome, % username %/p
/body
/html 会话有效(session)会话是指客户端和服务器之间持续连接的一段时间。在这段时间内当需要多次和服务器交互信息时可以将有关信息存入session对象中这些信息是会话有效的。在与服务器断线后就会失效。
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle会话有效案例/title
/head
body
%//检查session是否已经具有属性“user”if(session.getAttribute(user) null) {// 如果没有设置一个属性session.setAttribute(user, John Doe);}// 从会话中得到属性“user”String user (String) session.getAttribute(user);
%h1Welcome, % user %/h1
/body
/html 应用有效(application)应用的作用范围是从Web应用服务器一开始执行服务一直到结束服务为止。应用有效范围最大、影响最长。
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle应用有效案例/title
/head
body
%// 检查应用有效范围是否已经具有属性“counter”if(application.getAttribute(counter) null) {// If not, initialize the counterapplication.setAttribute(counter, 0);}// 获取counter的属性值Integer counter (Integer) application.getAttribute(counter);// counter1counter;// 设置1后的counter属性值为当前属性值application.setAttribute(counter, counter);
%h1Page visits: % counter %/h1
/body
/html 在JSP页面中作用范围的对象分别为page、request、session、application它们之间的关系如图所示。 2.response、out隐含对象 response对象 response对象和request对象功能恰好相反request 对象封装的是客户端提交的信息而response对象封装的是返回客户端的信息。通过 response 对象你可以控制向客户端发送的响应的各个方面包括设置响应头、发送错误、重定向到另一个页面等。 使用 response.setHeader(String name, String value) 方法来设置响应头设置内容类型为JSON
%response.setHeader(Content-Type, application/json);
% 使用 response.sendRedirect(String location) 方法可以将用户重定向到另一个URL
%response.sendRedirect(anotherPage.jsp);
% 使用 response.sendError(int sc, String msg) 方法向客户端发送一个错误响应
%response.sendError(response.SC_NOT_FOUND, 请求资源不可用);
% out对象用于向客户发送内容的输出通过out对象可以在在JSP页面中动态生成HTML、文本或其他类型的内容。
% page contentTypetext/html;charsetGBK %
%out.println(hello);out.newLine();out.write(hello);
%
%hello%
%out.close();
%
3.getAttribute()和getParameter()的区别 getAttribute()是用于从请求request或会话session等作用域中通过setAttribute()设置的属性获取属性值。 getParameter()是获取客户端中由用户提供的比如用户在表单中输入的数据。 八、JSP使用数据库
1.连接数据库步骤及主要代码 (1)加载数据库驱动这是连接数据库的第一步需要加载相应的JDBC驱动。 (2)建立连接使用 DriverManager.getConnection() 方法建立数据库连接。 (3)创建Statement通过数据库连接对象创建 Statement 或 PreparedStatement 对象用于执行SQL语句。 (4)执行查询使用 executeQuery() 方法执行SQL查询或使用 executeUpdate() 方法执行更新(如INSERT、UPDATE或DELETE)操作。 (5)处理结果对于查询操作处理返回的 ResultSet。 (6)关闭连接完成所有的数据库操作后关闭 ResultSetStatement 和 Connection 对象。
% page importjava.sql.* %%// Step 1: 加载JDBC驱动Class.forName(com.mysql.jdbc.Driver);// Step 2: 与数据库建立connectionConnection connection DriverManager.getConnection(jdbc:mysql://localhost:3306/mydb, username, password);try {// Step 3: 创建一个 statementStatement statement connection.createStatement();// Step 4: 执行查询/更新ResultSet resultSet statement.executeQuery(SELECT * FROM mytable);/*int result stmt.executeUpdate(UPDATE 表名 SET 列名 值 WHERE 条件);System.out.println(影响的行数 result);*/// Step 5: 输出查询结果while (resultSet.next()) {out.println(resultSet.getString(mycolumn) br);}} finally {// Step 6: 关闭连接if (connection ! null) {connection.close();}}
% 2.PreparedStatement连接数据库并操作
try {// 加载JDBC驱动Class.forName(com.mysql.jdbc.Driver);// 使用 DriverManager 建立连接。Connection conn DriverManager.getConnection(jdbc:mysql://localhost:3306/mydb, user, pass);// 编写sql语句String sql INSERT INTO Users (username, password, email) VALUES (?, ?, ?);//创建 PreparedStatement对象PreparedStatement pstmt conn.prepareStatement(sql);// 执行sql语句pstmt.setString(1, testUser);pstmt.setString(2, password123);pstmt.setString(3, testexample.com);// 输出结果int affectedRows pstmt.executeUpdate();System.out.println(Inserted rows: affectedRows);pstmt.close();conn.close();
} catch (Exception e) {e.printStackTrace();
}
3. sql标签连接数据库并操作
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
% taglib prefixsql urihttp://java.sun.com/jsp/jstl/sql %
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core %!DOCTYPE html
html
headtitleSQL Tag Example/title
/head
bodysql:setDataSource vardataSource drivercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/myDatabase userroot passwordpassword/sql:update dataSource${dataSource} varinsertCountINSERT INTO users (id, name) VALUES (1, John Doe)
/sql:updatesql:query dataSource${dataSource} varresultSELECT * FROM users
/sql:queryc:forEach varrow items${result.rows}ID: ${row.id}, Name: ${row.name}br/
/c:forEach/body
/html 九、在JSP中使用JavaBean
public class ManagerForm {private int id 0; //定义int类型的简单属性idprivate String manager ; //定义String类型的简单属性managerprivate String pwd ; //定义String类型的简单属性pwdpublic int getId() {return id;}public void setId(int id) {this.id id;}public String getManager() {return manager;}public void setManager(String manager) {this.manager manager;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd pwd;}
}
编写一个关于图书的JavaBean假设包名为Books类名为book该类含有两个属性bnum和bname包含一个方法该方法实现输出“我是一本图书”。(15分)
import java.io.Serializable;public class Book implements Serializable {// 定义属性private String bnum;private String bname;// 无参构造器public Book() {}// bnum的getter和setter方法public String getBnum() {return bnum;}public void setBnum(String bnum) {this.bnum bnum;}// bname的getter和setter方法public String getBname() {return bname;}public void setBname(String bname) {this.bname bname;}// 一个简单的方法输出I am a Bookpublic void showBook() {System.out.println(我是一本图书。);}}
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleUser Info/title
/head
bodyjsp:useBean iduser classUserBean scoperequest/
jsp:setProperty nameuser propertyname valueJohn Doe/
jsp:setProperty nameuser propertyemail valuejohn.doeexample.com/h2User Information/h2
pName: jsp:getProperty nameuser propertyname//p
pEmail: jsp:getProperty nameuser propertyemail//p/body
/html 十、Servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SimpleServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 设置响应内容类型为 HTMLresponse.setContentType(text/html);// 获取响应的 PrintWriter 对象PrintWriter out response.getWriter();try {// 输出 HTML 页面的头部out.println(!DOCTYPE html);out.println(html);out.println(head);out.println(titleSimple Servlet/title);out.println(/head);out.println(body);// 输出当前日期和时间out.println(h2The current date and time is: new Date() /h2);// 输出 HTML 页面的尾部out.println(/body);out.println(/html);} finally {// 关闭 PrintWriterout.close();}}
}
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1servletservlet-nameSimpleServlet/servlet-nameservlet-classSimpleServlet/servlet-class/servletservlet-mappingservlet-nameSimpleServlet/servlet-nameurl-pattern/simple/url-pattern/servlet-mapping/web-app 十一、EL表达式 1.JSP的ELExpression Language表达式主要用于简化对Java代码的访问特别是在JSP页面中获取和显示数据时。 2.基本语法EL表达式开始与 ${ 并以 } 结束。例如${expression} 3.EL表达式可以访问以下范围的对象 pageScope当前页面的属性 requestScope与请求相关的属性 sessionScope与会话相关的属性 applicationScope与整个应用程序相关的属性
例如要访问存储在请求范围内的属性 user可以使用${requestScope.user}、${user} 4.访问JavaBean的属性 如果 user 是一个包含属性 name 的JavaBean可以使用点操作符来访问这个属性${user.name} 5.操作和表达式 EL提供了一系列的操作符来进行逻辑、关系和算术操作 算术操作, -, *, / (或 div), % (或 mod) 逻辑操作and, , or, ||, not, ! 关系操作, !, , , , 条件操作? : 例如 ${num1 num2} ${user.age 18} ${flag ? Yes : No} 下面是一个使用EL表达式的简单JSP页面案例
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleQuick Start JSP EL/title
/head
body%-- 假设在请求范围有一个名为 user 的属性 --%pName: ${user.name}/ppAge: ${user.age}/p%-- 条件表达式 --%pStatus: ${user.age 18 ? Adult : Minor}/p%-- 遍历列表 --%ul%-- 假设在请求范围有一个名为 users 的列表 --%c:forEach varuser items${users}li${user.name} - ${user.age}/li/c:forEach/ul
/body
/html