名称 | 作用 | |
---|---|---|
<%%> | 脚本片段 | 其内容会翻译在Servlet的Service方法中;可以定义局部变量或者调用方法,但不能定义方法 |
<%!%> | 声明 | 其内容会直接翻译在Servlet类中,可以定义方法、属性、全局变量 |
<%=%> | JSP表达式 | 将已经声明的变量或者表达式输出到页面 |
参考资料:https://www.cnblogs.com/mark5/p/11596435.html
jsp执行过程分两时期:转义时期和请求时期
转义时期
系统把.jsp文件转译为servlet源代码.java文件,
将java文件编译为.class字节码文件,
再将字节码文件交给JVM执行得到数据处理结果
请求时期
把服务端处理的结果返回给html文件中,响应给客户端浏览器,由浏览器对html文件进行解释并且展示其静态内容
若是自动部署
则把war包复制到webapps目录
若未开启自动部署
则把war包拖入webapps目录后
到tomcat的bin目录下,先shutdown再startup
package Entity;
public class Car {
private String brand;
private String model;
private double price;
private int seats;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getSeats() {
return seats;
}
public void setSeats(int seats) {
this.seats = seats;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8");%>
<form method="post" action="demo5.jsp">
品牌:<input type="text" name="brand"><br>
型号:<input type="text" name="model"><br>
价格:<input type="text" name="price"><br>
座位数:<input type="text" name="seats"><br>
<input type="submit" value="确定">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="car" class="Entity.Car"></jsp:useBean>
<html>
<head>
<title>Title</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8");%>
<jsp:setProperty name="car" property="*"></jsp:setProperty>
<jsp:setProperty name="car" property="brand" value="fd" />
<jsp:setProperty name="car" property="model" value="fd" />
<jsp:setProperty name="car" property="price" value="789" />
<jsp:setProperty name="car" property="seats" value="6" />
<!--以上为自己写入,以下为从request获取-->
<p>您输入的车辆信息如下:</p>
<p>品牌:<jsp:getProperty name="car" property="brand"/></p>
<p>型号:<jsp:getProperty name="car" property="model"/></p>
<p>价钱:<jsp:getProperty name="car" property="price"/></p>
<p>座位数:<jsp:getProperty name="car" property="seats"/></p>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>乘法表</td>
<%
for(int i=1;i<10;i++){
%>
<td><%=i%></td>
<%
}
%>
</tr>
<%
for(int i=1;i<10;i++){
%>
<tr>
<td><%=i%></td>
<%
for(int j=1;j<i+1;j++){
%>
<td><%=i%>×<%=j%>=<%=i*j%></td>
<%
}
%>
</tr>
<%
}
%>
</table>
</body>
</html>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();
HashMap map = new HashMap();
map.put("no", "1001");
map.put("name", "Tom");
map.put("ps",93); //平时成绩
map.put("sy",85); //实验成绩
map.put("qm",88); //期末成绩
list.add(map);
map = new HashMap();
map.put("no", "1002");
map.put("name", "Jack");
map.put("ps", 76);
map.put("sy",75); //实验成绩
map.put("qm",52); //期末成绩
list.add(map);
map = new HashMap();
map.put("no", "1003");
map.put("name", "Mary");
map.put("ps", 67);
map.put("sy",65); //实验成绩
map.put("qm",48); //期末成绩
list.add(map);
request.setAttribute("data", list);
list =(List<Map<String,Object>>) request.getAttribute("data");
%>
<table border="1">
<tr>
<th>学号</th>
<th>姓名</th>
<th>平时成绩</th>
<th>实验成绩</th>
<th>期末成绩</th>
<th>总评</th>
</tr>
<%
for(Map<String,Object> stu:list){
String no = (String) stu.get("no");
String name = (String) stu.get("name");
int ps = (int) stu.get("ps");
int sy = (int) stu.get("sy");
int qm = (int) stu.get("qm");
int zp = 0;
if(qm<50){
zp = qm;
}else {
zp = (int) (ps*0.1+sy*0.2+qm*0.7);
}
String color = "";
if (zp<60){
color = "style=\"color:red\"";
}
%>
<tr align="left">
<td><%=no%></td>
<td><%=name%></td>
<td><%=ps%></td>
<td><%=sy%></td>
<td><%=qm%></td>
<td <%=color%>><%=zp%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int a = (int) (Math.random()*100);
int b = (int) (Math.random()*100);
session.setAttribute("a",a);
session.setAttribute("b",b);
%>
<form method="post" action="/demo8">
<%=a%>+<%=b%>=<input type="text" name="answer"><input type="submit">
</form>
</body>
</html>
<servlet>
<servlet-name>demo8</servlet-name>
<servlet-class>Servlet.demo8</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo8</servlet-name>
<url-pattern>/demo8</url-pattern>
</servlet-mapping>
package Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class demo8 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
int a = (int) session.getAttribute("a");
int b = (int) session.getAttribute("b");
String ans = req.getParameter("answer");
if(a + b == Integer.parseInt(ans)){
session.setAttribute("result","True");
}else {
session.setAttribute("result","False");
}
session.setAttribute("a",a);
session.setAttribute("b",b);
resp.sendRedirect("/demo8_res.jsp");
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int a = (int) session.getAttribute("a");
int b = (int) session.getAttribute("b");
String result = (String) session.getAttribute("result");
%>
<p><%=a%>+<%=b%>=<%=a+b%></p>
<%
if(result.equals("True")){
%>
<h1>你答对了</h1>
<%
}else {
%>
<h1>你答错了</h1>
<%
}
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="post" action="/demo9">
数字1:<input type="text" name="nums"><br>
数字2:<input type="text" name="nums"><br>
数字3:<input type="text" name="nums"><br>
<input type="submit">
</form>
</body>
</html>
<servlet>
<servlet-name>demo9</servlet-name>
<servlet-class>Servlet.demo9</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo9</servlet-name>
<url-pattern>/demo9</url-pattern>
</servlet-mapping>
package Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class demo9 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String[] nums = req.getParameterValues("nums");
int max = 0;
for(String s:nums){
int newNum = Integer.parseInt(s);
max = max>newNum ? max:newNum;
}
HttpSession session = req.getSession();
session.setAttribute("max",max);
resp.sendRedirect("/demo9_res.jsp");
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int max = (int) session.getAttribute("max");
%>
<h1>输入的数字中最大值是:<%=max%></h1>
</body>
</html>
Student.jsp:显示学生信息JSP、
Student.jsp:学生实体类 JavaBean、
StudentDao:针对数据层操作的接口 Dao、
StudnetDaoImpl:实现dao层定义的接口,具体进行增删改查 DaoImplement、
StudentService:服务接口,具体业务逻辑 Service、
ServiceDaoImpl:实现dao层定义的接口,具体进行业务操作 ServiceImplement、
多个Servlet分别处理前端发来的业务请求
public class MyFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse) response;
String username = (String)req.getSession().getAttribute("username");
if(username.startsWith("T")){
resp.sendRedirect("error.jsp");
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>edu.just.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
监听器类
public class GetConnListener implements ServletContextListener
{
// 应该启动时,该方法被调用。
public void contextInitialized(ServletContextEvent sce)
{
try
{
// 取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
// 从配置参数中获取驱动
String driver = application.getInitParameter("driver");
// 从配置参数中获取数据库url
String url = application.getInitParameter("url");
// 从配置参数中获取用户名
String user = application.getInitParameter("user");
// 从配置参数中获取密码
String pass = application.getInitParameter("pass");
// 注册驱动
Class.forName(driver);
// 获取数据库连接
Connection conn = DriverManager.getConnection(url
, user , pass);
// 将数据库连接设置成application范围内的属性
application.setAttribute("conn" , conn);
}
catch (Exception ex)
{
System.out.println("Listener中获取数据库连接出现异常"
+ ex.getMessage());
}
}
// 应该关闭时,该方法被调用。
public void contextDestroyed(ServletContextEvent sce)
{
// 取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
Connection conn = (Connection)application.getAttribute("conn");
// 关闭数据库连接
if (conn != null)
{
try
{
conn.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
}
}
测试页面
<body>
下面是直接从application中取出数据库连接,<br/>
并执行查询后的结果<br/>
<%
Connection conn = (Connection)application.getAttribute("conn");
// 创建Statement对象
Statement stmt = conn.createStatement();
// 执行查询
ResultSet rs = stmt.executeQuery("select * from news_inf");
%>
<table bgcolor="#9999dd" border="1" width="300">
<%
// 遍历结果集
while(rs.next())
{
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
</tr>
<%
}
%>
<table>
</body>
public static void main(String[] args){
Connection conn = null;
PreparedStatement updateSalary = null;
String updateStatement = "update student set score=score+? where id=?";
try {
conn=DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
conn.setAutoCommit(false); //关闭事务自动提交
updateSalary = conn.prepareStatement(updateStatement);
updateSalary.setDouble(1, 10);
updateSalary.setInt(2, 1002);
updateSalary.executeUpdate();
//if(1==1)throw new SQLException(); //抛出一个异常
updateSalary.setDouble(1, -10);
updateSalary.setInt(2, 1004);
updateSalary.executeUpdate();
conn.commit(); //提交事务
} catch (SQLException e) {
e.printStackTrace();
if (conn != null) {
try {
System.err.print("Transaction is being rolled back");
conn.rollback(); //有异常,回滚
} catch (SQLException excep) {
excep.printStackTrace();
}
}
} finally {
if (updateSalary != null) {
try {
updateSalary.close();
} catch (SQLException ex) {
Logger.getLogger(TransactionDemo.class.getName()).log(Level.SEVERE, null, ex);
}
}
try {
conn.setAutoCommit(true);
} catch (SQLException ex) {
Logger.getLogger(TransactionDemo.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public List<Map<String,Object>> findAll() throws Exception {
Connection conn = null;
Class.forName(DBDRIVER);// JDBC4.0后可自动加载
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
List<Map<String,Object>> allStudents = new ArrayList();
PreparedStatement pstmt = null;
String sql = "SELECT * FROM student ";
try {
pstmt = this.conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
Map s = null;
while (rs.next()) {
s = new HashMap<String,Object>();
s.put("id",rs.getInt("ID"));
s.put("name",rs.getString("name"));
s.put("age",rs.getInt("age"));
s.put("score",rs.getFloat("score"));
s.put("birthday",rs.getDate("birthday"));
allStudents.add(s);
}
rs.close();
} catch (Exception e) {
throw e;
} finally {
try {
conn.close
pstmt.close();
} catch (Exception e) {
}
}
return allStudents;
}
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf