一、jsp
1.什么是jsp
java server pages :java服务器端页面,也和servlet一样,用于动态web技术
最大的特点:
- 和html差不多
- 区别
- html只给用户提供静态数据
- jsp页面可以嵌入java代码,为用户提供动态数据
2.jsp原理:
jsp本质上是servlet
//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//jspservice
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException
一些内置对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //applicationContext
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //page:当前
HttpServletRequest request //请求
HttpServletResonse response //响应
流程图
在jsp页面中:
java代码原封不动
htmt转化为out.write
3.jsp基础语法:
jsp表达式<%=变量或者表达式%>
<%-- jsp表达式--%> <%=new java.util.Date()%>
jsp脚本片段<% %>
<% int sum=0; for (int i = 0; i < 10; i++) { sum+=i; } out.println("<h1>sum="+sum+"</h1>"); %> <p>这是一个jsp文档</p> <hr> <% for (int i = 0; i < 5; i++) { %> <h1>拆分</h1> <% } %>
jsp声明<%! %>
声明会被编译到java的类中,其他的会被写到_jspService方法中
<%! static { System.out.println("Loading"); } private int globalVar=0; public void kun(){ System.out.println("进入了kun方法"); } %>
jsp的注释无法显示在客户端
4.jsp的指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page errorPage="error/500.jsp" %> //定制错误页面 <%@ include file="文件" %>
5、九大内置对象
- PageContext 存东西
- Request 存东西
- Response
- Session 存东西
- Application [SerlvetContext] 存东西
- config [ServletConfig]
- out
- page
- exception
<%
pageContext.setAttribute("name","小ing"); //只在一个页面中有效
request.setAttribute("name2","小明2"); //一次请求中有效
session.setAttribute("name3","小明3"); //一次会话中有效
application.setAttribute("name4","小明4"); //在服务器中有效
%>
6、jsp标签,jstl标签,el表达式
el表达式:
- 获取数据
- 执行运算
- 获取web开发常用对象
<!--JSTL表达式的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--standard标签库-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
jsp标签
<jsp:forward page="jsptag2.jsp">
<jsp:param name="name" value="xianyan"/>
<jsp:param name="age" value="age"/>
</jsp:forward>
jstl表达式
<%--引入jstl核心标签库 core--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入jstl核心标签库 core--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>If测试</h4>
<hr>
<form action="coreif.jsp" method="get">
<%--
el表达式获取表单中的数据
${param.参数名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断提交的用户名是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="管理员欢迎您!"/>
</c:if>
<c:out value="${isAdmin}"/>
</body>
</html>
二、javaBean
实类体
javabean有特定的写法
- 必须有一个无参构造
- 属性必须私有化
- 必须有对应的get、set方法
一般用来左数据库映射
orm:对象关系映射
- 表——> 类
- 字段——>属性
- 行记录——>对象
id | name | age | address |
1 | 小明 | 10 | 北京 |
2 | 小明 | 11 | 天津 |
3 | 小明 | 12 | 武汉 |
class People{
private int id;
private String name;
private int age;
private String address;
}
class A{
new People(1,"小明",10,"北京");
new People(2,"小明",11,"天津");
new People(3,"小明",12,"武汉");
}
三、mvc三层架构
什么是mvc:model view controller 模型、试图、控制器
Model
- 业务处理:业务逻辑(service)
- 数据持久层:CRUD(dao)
View:
- 展示数据
- 提供链接发起servlet请求(a,form...)
Controller(servlet)
- 接受用户的请求(req:请求参数,session信息)
- 交给业务层处理对应代码
- 控制试图的跳转
登录——接受登录请求——处理用户的请求(获取用户登录的参数)——交给业务层处理登录业务(判断用户账号密码是否正确:事务)——dao层查询用户账号密码是否正确——数据库
四、过滤器(Filter)
filter:用来过滤网站的数据
filter开发步骤
- 导报
- 编写过滤器
public class CharacterEncodingFilter implements Filter {
// 初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化");
}
//chain:链
/*
1.过滤中的所有代码,在过滤特定请求的时候都会执行
2.必须要让过滤器继续同行
* */
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("执行前");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("执行后");
}
// 销毁
public void destroy() {
System.out.println("销毁");
}
}
用Filter实现拦截(登录拦截)
登录界面
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取参数
String username = req.getParameter("username");
if (username.equals("admin")){ //登陆成功
req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
resp.sendRedirect("/sys/success.jsp");
}else { //登陆失败
resp.sendRedirect("/error.jsp");
}
}
登录成功注销界面
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object user_session = req.getSession().getAttribute(Constant.USER_SESSION);
if(user_session!=null){
req.getSession().removeAttribute(Constant.USER_SESSION);
resp.sendRedirect("/login.jsp");
}
}
filter拦截
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request1 = (HttpServletRequest) request;
HttpServletResponse response1 = (HttpServletResponse) response;
Object user_session = request1.getSession().getAttribute(Constant.USER_SESSION);
if (user_session==null){
response1.sendRedirect("/login.jsp");
}
chain.doFilter(request,response);
}
<servlet>
<servlet-name>loginservlet</servlet-name>
<servlet-class>com.kun.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginservlet</servlet-name>
<url-pattern>/servlet/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>logoutservlet</servlet-name>
<servlet-class>com.kun.servlet.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logoutservlet</servlet-name>
<url-pattern>/servlet/logout</url-pattern>
</servlet-mapping>
<filter>
<filter-name>SysFilter</filter-name>
<filter-class>com.kun.filter.SysFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SysFilter</filter-name>
<url-pattern>/sys/*</url-pattern>
</filter-mapping>
JDBC
package com.kun.test;
import java.sql.*;
public class Testjdbc {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 解决中文乱码
String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=gbk";
String username="root";
String password="root";
// 加载驱动
Class.forName("com.mysql.jdbc");
// 连接数据库
Connection connection = DriverManager.getConnection(url, username, password);
// 向数据库发送sql的对象
Statement statement = connection.createStatement();
// 编写sql
String sql="select * from student.teacher";
// 执行sql
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("id:"+resultSet.getObject("id"));
System.out.println("name:"+resultSet.getObject("name"));
System.out.println("pwd:"+resultSet.getObject("pwd"));
System.out.println("sex:"+resultSet.getObject("sex"));
System.out.println("birthday:"+resultSet.getObject("birthday"));
System.out.println("address:"+resultSet.getObject("address"));
System.out.println("email:"+resultSet.getObject("email"));
System.out.println("age1:"+resultSet.getObject("age1"));
}
// 关闭链接
resultSet.close();
statement.close();
connection.close();
}
}