<input type="hidden" name="..." value="...">
标签默认的类型是submit,点击button,会触发表单的提交事件,触发了页面的自动刷新事件。
标签中添加属性type="button"
标签改为
标签。
$('button').on('click', function(e) {
e.preventDefault();
});
var
(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量var test=5; //全局变量
function a()
{
var cc=3; //局部变量
alert(test);
}
function b(){alert(test);}
var
关键字声明变量function a()
{
aa=3; //全局变量
}
window.test;
window.test = 5;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
</head>
<body onload="myfun()">
<script>
function myfun(){
alert("方法一:myfun函数执行");
}
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试</title>
</head>
<body>
<script>
function myfun(){
alert("方法二:myfun函数执行");
}
myfun();
</script>
</body>
</html>
HttpSession session = request.getSession();//取出session
session.setAttribute("goods1","Scoat");//session存数据
session.getAttribute("goods1");//session取数据
request.getSession().removeAttribute("xxx"); //移除Session中特定的值
HttpSession session = request.getSession();
session.setMaxInactiveInterval(20 * 60);//设置session过期时间
session.invalidate();//销毁session的方法
session.getCreationTime();//获得session的创建时间
session.getLastAccessedTime();//获得session最后一次被使用的时间
Session
在用户访问第一次访问服务器时创建,只有访问JSP、Servlet
等程序时才会创建Session
,只访问HTML、IMAGE等静态资源并不会创建Session
JSESSIONID
的Cookie
,它的值为该Session
的id
(也就是HttpSession.getId()
的返回值)。Session
依据该Cookie
来识别是否为同一用户。encodeURL(String url)
实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。
BuyServlet
younghd.BuyServlet
BuyServlet
/doCar
/doCar
,是和index.jsp
,因此在跳转到子文件是应该为jsp/...
,从子文件跳出应该为../doCar
jsp经编译后就变成了servlet(jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译成jvm能够识别的java类)
Servlet请求过程:当客户端浏览器向服务器请求一个 Servlet 时,服务器收到该请求后,首先到容器中检索与请求匹配的 Servlet 实例是否已经存在。若不存在,则 Servlet 容器负责加载并实例化出该类 Servlet的一个实例对象,接着容器框架负责调用该实例的 init() 方法来对实例做一些初始化工作,然后
Servlet 容器运行该实例的 service() 方法。若 Servlet 实例已经存在,则容器框架直接调用该实例的 service() 方法。service() 方法在运行时,自动派遣运行与用户请求相对应的 doXX() 方法来响应用户发起的请求。
jsp请求过程:当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,先检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否是 JSP 文件创建后的第一次被访问,如果是,那么,这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件。紧接着,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到 jvm 解释执行。剩下的就等同于 Servlet 的处理过程了。
jsp是servlet的一种简化,使用jsp只需要完成程序员需用输出到客户端的内容,jsp中的java脚本如何镶嵌到一个类中,由jsp容器完成,而servlet则是个完整的java类,这个类的service方法用于生成对客户端的响应JSP 本质是一个 Servlet,它的运行也需要容器的支持。
在 JSP 和 Servlet 文件中都可以编写 Java 和 HTML 代码,不同的是Servlet
虽然也可以动态的生成页面内容,但更加偏向于逻辑的控制。
JSP 最终被转换成 Servlet 在 jvm 中解释执行,在 JSP 中虽然也可以编写 Java 代码,但它更加偏向于页面视图的展现。
参考链接:Servlet与JSP的异同
response.setCharacterEncoding("utf-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
String addID=new String(request.getParameter("addID").getBytes("ISO8859-1"),"utf-8");
function load_goods()
{
var operation = "all";
var InfOut = {
"pan": operation
};
$.ajax({
type: "post",
url: "../deal_manger",
data: InfOut,
success: function (data) {
var infIn = JSON.parse(data);
goodsList = infIn.goodslist;
//商品动态展示
goodShow();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
},
});
}
public class mangerServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
String pan =request.getParameter("pan"); //判断是什么操作
PrintWriter out = response.getWriter();
JSONObject data = new JSONObject();
if (pan.equals("all"))
{
//获得所有商品的列表
MyDataBase db=new MyDataBase();
JSONArray array = new JSONArray();
try {
ResultSet rs=db.inputSQL("select * from shop.goods");
//将数据封装为json数组
while(rs.next()) {
JSONObject obj = new JSONObject();
String id = rs.getString(1);
String name=rs.getString(2);
obj.put("id", id);
obj.put("name", name);
array.add(obj);
}
db.close();
//传递Json数组到前端
data.put("goodslist", array);
out.print(data);
out.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
SET SQL_SAFE_UPDATE = 0
rs.next()
:从查询出来的Resultset
集合中拿出一条数据
最开始的指针位于返回结果集的头部,执行一次rs.next()
,指针向后移动一位
rs.next()
返回的是true
和false
如果集合下一条中有数据返回的就是true
,否则为false
参考链接
package younghd;
import java.sql.*;
public class MyDataBase {
//MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
final String DB_URL = "jdbc:mysql://localhost:3306/数据库名称?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC";
// 数据库的用户名与密码,需要根据自己的设置
final String USER = "root";
final String PASS = "123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs =null;
PreparedStatement pst=null;
public MyDataBase() {
try {
Class.forName(JDBC_DRIVER); // 注册 JDBC 驱动
conn = DriverManager.getConnection(DB_URL,USER,PASS); // 打开链接
} catch (Exception e) {
e.printStackTrace();
}
}
public ResultSet inputSQL (String sql) throws SQLException {
//可以进行增删改查,不能防止sql注入
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
return rs;
}
public void insertDB(String t1,String t2,String t3,String t4,String t5) throws SQLException{
String sql = "insert into 表名 values (?,?,?)";
//用来执行SQL语句查询,对sql语句进行预编译处理
//防止sql注入
pst = conn.prepareStatement(sql);
pst.setString(1, t1);
pst.setString(2, t2);
pst.setString(3, t3);
pst.executeUpdate();
}
public int updateDB(String str) throws SQLException
{
String sql ="update 表名 set name = ? where id=1";
pst=conn.prepareStatement(sql);
pst.setString(1,str);
int updateOk=pst.executeUpdate();
return updateOk;
}
public int deleteDB(String str) throws SQLException {
String sql = "delete from shop.goods(表名称) where id=?";
pst=conn.prepareStatement(sql);
pst.setString(1,str);
int deleteOk=pst.executeUpdate();
return deleteOk;
}
public void close() {
// 关闭资源
try{
if(rs!=null) rs.close();
if(pst!=null) pst.close();
if(stmt!=null) stmt.close();
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
这个电商小系统虽然写完了,问题还是很多,混一次作业,基本都是想到什么就写什么,后面写的越来越乱,也懒得改了勉勉强强完成一次作业吧。算法基本上都是遍历,二分查找什么的都没有用,以后在写程序的过程中尽可能考虑考虑算法,学以致用。学习的东西还很多,比如数据库的查询是如何实现的,Druid的使用,Spring的管理对象,推荐系统等等,慢慢学习吧。