1:JSP
JSP的基本语法:
指令标识page,include,taglib;
page指令标识常用的属性包含Language用来定义要使用的脚本语言;contentType定义JSP字符的编码和页面响应的MIME类型;pageEncoding:jsp页面的字符编码;
include指令<%@ include file="path"%>
静态包含,先包含,后编译处理;
<jsp:include page="要包含的文件"> 动态包含,先编译处理,后包含;
脚本标识包含:jsp表达式,声明标识,脚本程序
jsp表达式<%= %>在里面输出一个变量或者一个具体的内容
声明标识<%! %>在里面定义全局变量,方法,类
脚本程序<% %>在里面定义局部变量,编写语句
jsp的注释
<!-- -->html注释,客户端可见
<%-- --%>jsp注释 客户端不可见
//java单行注释
/* */java多行注释
动作标识:
<jsp:include page="要包含的文件"> 动态包含,先编译处理,后包含;
jsp跳转指令
<jsp:forward>
<jsp:param value="" name="">
</jsp:forward>
服务器内部跳转,可带参数。
jap的九大内置对象,pageContext,request,response,session,application,config,out,page,exception;前五个熟练掌握
jsp四种数据保存范围
page:只在一个页面中保存数据
request:只在一个请求中保存数据
session:在一次会话范围内保存数据,仅供单个用户使用
application:在整个服务器上保存数据,所有用户共享
response对象
response内置对象用于响应客户请求,向客户端输出信息
功能1自动刷新应用
功能2页面重定向应用,客户端跳转
功能3操作cookie应用
功能4cookie信息是存在客户端的,session信息是存在服务器的。
2: Javabean 组件引入
JavaBean 是使用 Java 语言开发的一个可重用的组件,在 JSP 开发中可以使用 JavaBean 减少重复代码,使整个 JSP 代码的开发更简洁。
jsp:useBean 创建 javabean
<jsp:useBeanid="实例化对象名称"scope="保存范围"class="类完整名称"/> Scope,一共有 page,request,session 和 application4 个属性范围,默认是 page;
jsp:setProperty 设置 javabean 属性值
<jsp:setPropertyproperty="属性名称"name="实例化对象的名称"value="属性值"param="参数名称"/> Property=”*” 自动匹配所有
jsp:getProperty 获取 javabean 属性值
<jsp:getPropertyproperty="属性名称"name="实例化对象的名称"/>
javabean 的保存范围
Javabean 的保存范围有 page,request,session.application,默认是 page;
javabean 删除
Page 范围:pageContext.removeAttribute(“javaBeanName”);
request 范围:request.removeAttribute(“javaBeanName”);
session 范围:session.removeAttribute(“javaBeanName”);
application 范围:application.removeAttribute(“javaBeanName”);
3:servlet 引入
1,在 Servlet 中获取 session,application
2,客户端跳转 response.sendRedirect("目标地址");
3,服务器跳转:RequestDispatcher rd=request.getRequestDispatcher("目标地址"); rd.forward(request,response);
第一首先创建数据库和数据表,我在这里使用了sqlyog图形化界面创建数据库和数据表。如下图所示
需要注意的就是数据库的名称和数据表的名称后面需要用,以及id设置为了自增。
第二开始开发,采用mvc的设计模式,分开进行设计;
首先package com.ningmeng.model;对User类进行封装数据。为了后面方便使用;注意是在不同的包中的
1 package com.ningmeng.model;
2
3 public class User {
4
5 private int id;
6 private String username;
7 private String password;
8
9
10 public User() {
11 super();
12 }
13 public User(String username, String password) {
14 super();
15 this.username = username;
16 this.password = password;
17 }
18 public int getId() {
19 return id;
20 }
21 public void setId(int id) {
22 this.id = id;
23 }
24 public String getUsername() {
25 return username;
26 }
27 public void setUsername(String username) {
28 this.username = username;
29 }
30 public String getPassword() {
31 return password;
32 }
33 public void setPassword(String password) {
34 this.password = password;
35 }
36
37
38 }
其次对连接数据库进行封装,方便后面调用连接数据库,这里封装好数据库并进行测试是否连接成功;注意是在不同的包中的;
1 package com.ningmeng.util;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.SQLException;
6
7 public class DbUtil {
8
9 private String url="jdbc:mysql://localhost:3306/db_jsp";
10 private String user="root";
11 private String password="123456";
12 private String driver="com.mysql.jdbc.Driver";
13
14 public Connection getCon() throws Exception{
15 Class.forName(driver);
16 Connection con=DriverManager.getConnection(url, user, password);
17 return con;
18 }
19
20 public static void getClose(Connection con) throws SQLException{
21 if(con!=null){
22 con.close();
23 }
24 }
25
26 /*public static void main(String[] args) {
27 DbUtil db=new DbUtil();
28 try {
29 db.getCon();
30 System.out.println("测试连接数据库,连接成功");
31 } catch (Exception e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 System.out.println("测试连接数据库,连接失败");
35 }
36
37 }*/
38 }
对数据封装好,对连接数据库封装好,接下来封装对数据库的操作;注意是在不同的包中的;
1 package com.ningmeng.dao;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7
8 import com.ningmeng.model.User;
9
10 public class UserDao {
11
12 public User login(Connection con,User user) throws SQLException{
13 User resultUser=null;
14 String sql="select * from user where username=? and password=?";
15 PreparedStatement ps=con.prepareStatement(sql);//
16 ps.setString(1, user.getUsername());
17 ps.setString(2, user.getPassword());
18 ResultSet rs=ps.executeQuery();
19 if(rs.next()){
20 resultUser=new User();
21 resultUser.setUsername(rs.getString("username"));
22 resultUser.setPassword(rs.getString("password"));
23 }
24 return resultUser;
25 }
26 }
封装好上面的接下来就进行主要代码的开发,使用Servlet对数据进行处理和操作;注意在不同的包中
1 package com.ningmeng.web;
2
3 import java.io.IOException;
4 import java.sql.Connection;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServlet;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11
12 import com.ningmeng.dao.UserDao;
13 import com.ningmeng.model.User;
14 import com.ningmeng.util.DbUtil;
15
16 public class LoginServlet extends HttpServlet{
17
18 DbUtil db=new DbUtil();
19 UserDao userDao=new UserDao();
20 /**
21 *
22 */
23 private static final long serialVersionUID = 1L;
24
25 @Override
26 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
27 this.doPost(request, response);
28 }
29
30 @Override
31 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
32 String username=request.getParameter("username");
33 String password=request.getParameter("password");
34 Connection con=null;
35 try {
36 User user=new User(username,password);
37 con=db.getCon();
38 User currentUser=userDao.login(con, user);
39 if(currentUser==null){
40 //System.out.println("no");
41 request.setAttribute("error", "用户名或者密码错误");
42 request.setAttribute("username", username);
43 request.setAttribute("password", password);
44 request.getRequestDispatcher("login.jsp").forward(request, response);
45 }else{
46 //System.out.println("yes");
47 HttpSession session=request.getSession();
48 session.setAttribute("currentUser",currentUser);
49 response.sendRedirect("main.jsp");
50 }
51 } catch (Exception e) {
52 // TODO Auto-generated catch block
53 e.printStackTrace();
54 }
55
56 }
57
58
59 }
设置好Servlet的类文件后需要配置xml,代码如下。
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
3 <display-name>web04</display-name>
4 <welcome-file-list>
5 <welcome-file>index.html</welcome-file>
6 <welcome-file>index.htm</welcome-file>
7 <welcome-file>index.jsp</welcome-file>
8 <welcome-file>default.html</welcome-file>
9 <welcome-file>default.htm</welcome-file>
10 <welcome-file>default.jsp</welcome-file>
11 </welcome-file-list>
12
13 <servlet>
14 <servlet-name>LoginServlet</servlet-name>
15 <servlet-class>com.ningmeng.web.LoginServlet</servlet-class>
16 </servlet>
17 <servlet-mapping>
18 <servlet-name>LoginServlet</servlet-name>
19 <url-pattern>/login</url-pattern>
20 </servlet-mapping>
21 </web-app>
最后进行主页面的开发,创建jsp页面。需要注意的是action的值是xml的<url-pattern>/login</url-pattern>中/login的值,这点需要注意;
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <form action="login" method="post">
11 <table>
12 <tr>
13 <th colspan="2">登录界面</th>
14 </tr>
15 <tr>
16 <td>账号</td>
17 <td><input type="text" id="username" name="username" value="${username}"></td>
18 </tr>
19 <tr>
20 <td>密码:</td>
21 <td><input type="text" id="password" name="password" value="${password}"></td>
22 </tr>
23 <tr>
24 <td><input type="submit" value="提交"></td>
25 <td><font color="red">${error}</font></td>
26 </tr>
27 </table>
28 </form>
29 </body>
30 </html>
最后一个为了优化,更好的可视化,一个登录成功的验证页面,如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <p>登录成功</p>
11 当前用户:${currentUser.username}<br/>
12 当前密码:${currentUser.password}<br/>
13 </body>
14 </html>
登陆页面
登录成功页面:
登录失败页面:
包的分类以及封装设计;