Servlet技能_servlet技术特点
奇闻趣事 2023-05-04 17:38www.bnfh.cn奇闻趣事
Servlet技术
CS
BS
JavaWeb
- 早期B/S
- 后来的B/S
Http协议
- Http请求格式
- Http响应格式
Tomcat
轻量级Web应用服务器,开发和调式Servlet、JSP程序的首选
- 目录结构
- 启动和关闭
- 配置文件
Servlet
Server Applet: Java Servlet的简称,称小服务程序或服务连接器。
- Servlet接口
- GenericServlet
- HttpServlet
- Servlet生命周期
- GET
- POST
ServletRequest
HttpServletRequest
ServletResponse
HttpServletResponse
中文乱码
- 请求
- 响应
resp.setContentType("text/html;charset=utf-8");
ServletConfig
ServletContext
// 获取工程名
String contextPath = servletContext.getContextPath();
// 获取部署工程路径信息,对应的就是当前工程中的eb目录
String realPath = servletContext.getRealPath("/");
Servlet+JDBC
RegisterServlet
.demo.servlet.RegisterServlet
RegisterServlet
/register
package .demo.servlet;
import .demo.dao.UserDao;
import .demo.model.User;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) thros ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) thros ServletException, IOException {
// 获取请求对象中保存的用户和密码
String username = req.getParameter("username");
System.out.println("获取到的用户名为" + username);
String passord = req.getParameter("passord");
System.out.println("获取到的密码为" + passord);
// 将接受到的用户名和密码信息打包成用户对象交给DAO层进行处理
User user = ne User(username, passord);
UserDao userDao = ne UserDao();
int count = userDao.createUser(user);
// 将处理结果响应到浏览器
resp.setContentType("text/html;charset=utf-8");
PrintWriter riter = resp.getWriter();
if (1 == count) {
System.out.println("注册成功。。。");
riter.rite("注册成功!!!
");
} else {
riter.rite("注册失败!!!
");
}
riter.close();
}
}
package .demo.dao;
import .demo.model.User;
import .demo.util.DbUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UserDao {
public int createUser(User user) {
Connection connection = null;
PreparedStatement ps = null;
try {
// 获取连接
connection = DbUtil.getConnection();
// 准备sql语句
String sql = "insert into t_user values(null, ?, ?)";
// 获取PrepareStatement类型的引用
ps = connection.prepareStatement(sql);
// 向占位符设置数据
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassord());
// 执行sql语句
int ro = ps.executeUpdate();
return ro;
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
DbUtil.closeConnection(connection, ps);
} catch (SQLException e) {
e.printStackTrace();
}
}
return 0;
}
}
package .demo.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DbUtil {
private static String jdbcName;
private static String dbUrl;
private static String dbUsername;
private static String dbPassord;
static {
jdbcName = ".mysql.jdbc.Driver";
dbUrl = "jdbc:mysql://192.168.30.222:3306/mybatis_demo";
dbUsername = "root";
dbPassord = "root";
try {
Class.forName(jdbcName);
} catch (ClassNotFoundException e) {
thro ne RuntimeException(e);
}
}
/
获取连接
@return
@thros SQLException
/
public static Connection getConnection() thros SQLException {
Connection conn = DriverManager.getConnection(dbUrl,dbUsername, dbPassord);
return conn;
}
/
关闭连接
@param conn
@thros SQLException
/
public static void closeConnection(Connection conn, PreparedStatement ps) thros SQLException {
if (null != conn) {
conn.close();
}
if (null != ps) {
ps.close();
}
}
}
重定向浏览器的跳转
- 重定向原理
- 重定向特点
RedirectServlet
.demo.servlet.RedirectServlet
RedirectServlet
/redirectTo
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) thros ServletException, IOException {
System.out.println("接受到了浏览器的请求。。。");
resp.sendRedirect("target.html");
}
重定向后的页面
服务器重新指定位置后的页面
转发: 服务器的跳转
- 转发原理
- 转发特点
ForardServlet
.demo.servlet.ForardServlet
ForardServlet
/forard
TargetServlet
.demo.servlet.TargetServlet
TargetServlet
/target
转发测试
package .demo.servlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ForardServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) thros ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) thros ServletException, IOException {
System.out.println("接受到了浏览器的请求");
// 向request对象中设置属性信息
req.setAttribute("forard", "forard");
// 转发 让eb组件将任务转交给一个eb组件
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/target");
requestDispatcher.forard(req, resp);
}
}
package .demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class TargetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) thros ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) thros ServletException, IOException {
System.out.println("转发过来了。。。");
// 获取request对象中的属性值判断是否共享
Object forard = req.getAttribute("forard");
System.out.println("forard = " + forard);
// 通过打印流向页面写入转发成功的信息
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().rite("转发成功!
");
}
}