JSP
第三章 JSP语法
-
HTML创建表单表格
<form action="<%=request.getContextPath() %>/loginservlet" method="post" > ... 账户: <input type="text" name="userid" id="userid" > 密码: <input type="Password" name="userpwd" id="userpwd"> <input type=submit> <input type=reset> </form>
<form name="form1" method="post" action="login_deal.jsp"> 用户名:<input name="username" type="text" /><br /> 密码:<input name="pwd" type="password" id="pwd" /><br /> <input type="submit" name="Submit" value="提交" /> <input type="reset" name="Submit2" value="重置" /> </form>
request.setCharacterEncoding(“utf-8"); String username= request.getParameter("username"); String pwd= request.getParameter("pwd"); out.println("用户名为:"+username); if ( pwd!=null && pwd!=“” ) { int int_pwd = Integer.parseInt(pwd); out.println("密码为:"+int_pwd); }
<%String path=request.getContextPath();%> <a href="<%=path%>/a.jsp">aaa</a>
-
脚本元素:
-
指令元素:
<%@ %>
-
动作元素:
< jsp:useBean >
、< jsp:setProperty >
、< jsp:getProperty >
、< jsp:include >
、< jsp:forward >
、< jsp:param >
-
< jsp:forward page = “next.jsp”/>
发起页面内容不能显示到浏览器中,程序直接跳转next.jsp,显示内容。运行后形成2个.java文件,2个.class文件
-
< jsp:include page = “next.jsp”/>
发起页面和目标页面都能显示在浏览器中。程序显示两个文件内容。运行后形成2个.java文件,2个.class文件。
运行时把两个.class文件内容显示到浏览器中,动态联编。
PS:动态联编,两个文件之间不共享同名变量,因为是两个独立的类。
-
<jsp:param name=“参数 ” value=“值"/>
用来提供key/value 的信息,不单独使用 -
<jsp:useBean id="Goods" scope="page" class="handle.shangping"/>
id
:变量名scope
: 存储范围,page
: 页面直接使用,scope指定范围内,id指定的实例不存在,则生成实例class
: 完整类名 -
<jsp:setProperty>
通常与<jsp:useBean>
标识一起使用,它将调用Bean中的setXxx()方法给Bean的简单或索引属性赋值。赋的值可以是请求中携带的参数。
-
-
<%@include page=”文件”%>
与<jsp:include></jsp:include>
的区别- 执行时间上:
- 前者在翻译阶段
- 后者在请求处理阶段
- 引入内容不同
- 前者引入静态文本(html,jsp),在JSP页面被转化成
servlet
之前和它融和到一起。 - 后者引入执行页面或servlet所生成的应答文本。
- 前者引入静态文本(html,jsp),在JSP页面被转化成
- 执行时间上:
第四章 内置对象
HTTP–无状态的
request
对象获取客户浏览器的请求response
对客户浏览器进行响应session
保存着会话期间所需要传递的数据信息,基于用户,随用户的断开而消失,可在多个页面之间传递一个用户的特定信息application
提供应用程序在服务器中运行时的全局信息,实现用户之间共享数据,基于服务器,随服务的关闭而消失,可在一个页面上保留多个用户的信息out

-
重定向
response
对象中的sendRedirect(url)
方法两次请求和响应,不是一个
request
,地址变化 -
定时刷新
response.setHeader("Refresh","1");
response.setHeader(“Refresh”,“3;url=index.jsp");
跳转新页面
第五章JavaBean
分离静态工作部分和动态工作部分。
1. 值Bean
严格遵循了JavaBean
的命名规范,通常用来封装表单数据、数据库数据,作为信息的容器
2. 工具Bean
可以不遵循JavaBean
规范,通常用于封装业务逻辑,数据操作等,例如连接数据库,对数据库进行增、删、改、查和解决中文乱码等操作。
3. JavaBean
规范
-
实现
java.io.Serializable
接口:实现对象在网络不同操作系统中传输、对象存储等。 -
JavaBean
是一个public
的类 -
类中必须存在一个
public
无参的构造函数 -
如果类的成员变量的名字是xxx(通常private),则类中可(不必须)使用两个方法:
-
public
类型getXxx()
:用来获取属性xxx -
pubic void setXxx(类型 值)
:用来修改属性xxx
-
4. JavaBean
属性
- 简单属性(Simple):
getxxx() / setxxx()
- 索引属性(Indexed): 通常为数组类型的属性
- 绑定属性(Bound)
- 约束属性(Constrained)
5. Bean的存放目录:
Bean
的源文件连同包放在src
下,编译成功的Bean连同包放在站点\WEB-INF\classes
目录下。
6. 使用
-
用
<jsp:usebean>
定义要用的JavaBean -
用
<jsp:setproperty>
存储属性值 -
用
<jsp:getproperty>
提取属性值 -
<jsp:useBean id="Goods" scope="page" class="handle.shangping"/>
id
:变量名scope
: 存储范围,page
: 页面直接使用,scope指定范围内,id指定的实例不存在,则生成实例取值 获取方式 描述 page 页面直接使用 创建的JavaBean实例只能够在当前的JSP文件中使用,包括通过include静态指令包含的页面中有效 request request对象的getAttribute方法获取 创建的JavaBean实例可以在请求范围内进行存取 session session对象的getAttribute方法获取 创建的JavaBean实例可以在session范围内进行存取 application application对象的getAttribute方法获取 创建的JavaBean实例可以在application范围内进行存取 class
: 完整类名 -
<jsp:setProperty>
通常与<jsp:useBean>
标识一起使用,它将调用Bean中的setXxx()方法给Bean的简单或索引属性赋值。赋的值可以是请求中携带的参数。<%-- 单独用 --%> <jsp:useBean ……/> <jsp:setPropery ……/> <%-- 作为子标签:只有bean实例是新创建的情况才执行setProperty --%> <jsp:useBean ……> <jsp:setPropery ……/> </jsp:useBean>
-
<jsp:getProperty name="Bean实例名" property="propertyName"/>
读取属性值,输出到页面
第六章 Servlet
1. 生命周期
- 客户端请求服务器,服务器加载
Servlet
,并创建一个Servlet
实例; - 容器调用
Servlet
的init()方法; - 容器封装请求响应对象,调用
service()
方法; - 请求处理结束后,将结果返回给容器;
- 容器将结果返回给客户端进行显示;
Web
服务器关闭时,调用destroy()
销毁Servlet实例。

2. 会创建doGet / doPost
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, I0Exception {
doGet(request, response);
}
3. 获取客户端提交的信息
4. 调用JavaBean
处理结果返回客户端
第八章
JavaWeb
应用程序
<%--login.jsp--%>
<form action="<%=request.getContextPath() %>/loginservlet" method="post" >
用户名:<input name="username" type="text" /><br/>
密码:<input name="pwd" type="password" id="pwd" /><br/>
<input type="submit" name="Submit" value="提交" />
<input type="reset" name="Submit2" value="重置" />
</form>
//loginservlet.java
@WebServlet("/loginservlet")
public class loginservlet extends HttpServlet {
public loginservlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().invalidate();//清除session的所有信息
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String userid = request.getParameter("userid");
String userpwd = request.getParameter("userpwd");
UserDao uDao = new UserDao();
if (uDao.queryByUserNameAndPass(userid, userpwd))
response.sendRedirect(request.getContextPath() +"sy444/index.jsp");
else
response.sendRedirect(request.getContextPath() +"sy444/login.jsp");
}
}
//UserDao.java
public class UserDao {
//根据用户名和密码查找,如果找到返回true,否则返回false
public boolean queryByUserNameAndPass(String u_name,String u_pass) {
Connection conn = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try {
conn = JdbcUtils.getCon();
// ②创建连接。
String sql ="SELECT * from user where username=? and password=?";
// ③创建执行SQL语句的对象。
stmt = conn.prepareStatement(sql);
stmt.setString(1,u_name);
stmt.setString(2,u_pass);
// ④执行查询数据。
rs = stmt.executeQuery();
// ⑤处理查询结果。
if (rs.next()) {
return true;
}
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
public shangping selsectOne(int id) {
Connection conn = null;ResultSet rs = null;PreparedStatement stmt = null;
shangping goods = new shangping();
try{
conn = JdbcUtils.getCon();
String sql ="SELECT * from shangping WHERE id = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,id);
rs = stmt.executeQuery();
while(rs.next()) {
String name = rs.getString("name");
int price = rs.getInt("price");
int number = rs.getInt("number");
String picture = rs.getString("picture");
goods = new shangping(id,name,price,number,picture);
}
return goods;
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return null;
}
public boolean addIt(shangping goods, int Num){
Connection conn = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try{
conn = JdbcUtils.getCon();
String sql ="insert into car values(? , ? )";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,goods.getId());
stmt.setString(2,goods.getName());
int ans = stmt.executeUpdate();
if(ans>0) return true;
else return false;
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
public boolean updateit(int id, int num){
Connection conn = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try{
conn = JdbcUtils.getCon();
String sql ="update car set num=? where id=?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,num);
stmt.setInt(2,id);
int ans = stmt.executeUpdate();
if(ans>0) {
return true;
}else {
return false;
}
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
public boolean delit(int id){
Connection conn = null;ResultSet rs = null;PreparedStatement stmt = null;
try{
conn = JdbcUtils.getCon();
String sql ="delete from car where id=?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1,id);
int ans = stmt.executeUpdate();
if(ans>0) {
return true;
}else {
return false;
}
} catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
return false;
}
}
//JdbcUtils
public class JdbcUtils {
// 加载驱动
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) { }
}
// 创建连接
public static Connection getCon() {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/php?useUnicode=true&characterEncoding=UTF-8";
try {
conn = DriverManager.getConnection(url, "root", "mysqll");
} catch (SQLException e) { }
return conn;
}
// 释放资源
public static void release(Statement st, ResultSet rs, Connection con) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) { }
try {
if (st != null)
st.close();
} catch (SQLException e) { }
try {
if (con != null)
con.close();
} catch (SQLException e) { }
}
}