WEB组件:jsp和servlet
jsp:动态网页
servlet:业务处理
Servlet
概述
Java编写,运行在服务器端,扩展服务器功能的web组件,servlet必须在servlet容器中运行
编写
Servlet接口
extends HttpServlet
重写doGet、doPost方法
访问
http://localhost:8080/web应用的上下文(网站名,虚拟路径)/资源名称
配置文件web.xml
注解
HttpServletRequest对象
1.请求行信息的方法
2.获取表单数据
request.getParameter(“name”);
表示请求对象,封装了客户端的数据
可以通过方法获取request对象的数据
3.设置属性相关的方法
setAttribute(String key,Object obj);
Object obj=getAttribute(String key);
removeAttribute(String key);
HttpServletResponse
响应对象
sendRedirect();响应页面
请求转发和重定向
1.sendRedirect,请求重定向,url显示响应页面的地址
request.getRequestDispatcher(“ok.jsp”).forward(request, response);请求转发,url不显示响应页面的地址
2.sendRedirect会产生一对request、response,所有的request不能传值请求转发,服务器内部方法的调用,不会产生新的request、response对象,可以使用request传值
3.sendRedirect可以跨应用定向页面
请求转发只能在本应用内转发页面
请求和响应过程
request
//请求头,请求行
//getParameter();getParameters();
//request.setAttribute();,getAttribute,removeAttribute
request生命周期:一次请求响应
response
提供大量的状态码
4开头5开头是错误状态码
200表示响应成功
练习
public class User implements Serializable{
private static final long serialVersionUID = -6209045953435812848L;
private int id;
private String name;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(int id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public class DBUtil {
public static Connection getConn() throws Exception{
//1.注册驱动
/*DriverManager.registerDriver(new Driver());*/
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
String url="jdbc:mysql://localhost:3306/db";
String user="root";
String password="root";
Connection conn=DriverManager.getConnection(url,user,password);
return conn;
}
public static void close(PreparedStatement pstmt,Connection conn) throws SQLException{
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
}
public class UserDao {
public void addUser(String name,String password) throws Exception{
Connection conn=DBUtil.getConn();
String sql="insert into user (name,password) values (?,?)";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, password);
pstmt.executeUpdate();
DBUtil.close(pstmt, conn);
}
public User getUser(String name,String password) throws Exception{
User user=null;
Connection conn=DBUtil.getConn();
String sql="select * from user where name=? and password=?";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, password);
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
user=new User(rs.getInt(1),rs.getString(2),rs.getString(3));
}
DBUtil.close(pstmt, conn);
return user;
}
}
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求行的信息
System.out.println(request.getRequestURL());
System.out.println(request.getRequestURI());
System.out.println(request.getProtocol());
System.out.println(request.getMethod());
//请求的头信息
Enumeration<String> headerNames=request.getHeaderNames();
//判断是否有元素
while(headerNames.hasMoreElements()){
//获取头信息
String headerKey=headerNames.nextElement();
String headValue=request.getHeader(headerKey);
System.out.println(headerKey+":"+headValue);
}
//获取客户端的传递的数据
String name=request.getParameter("name");
String pw=request.getParameter("pw");
System.out.println(name+","+pw);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {UserDao ud=new UserDao();
String name=request.getParameter("name");
String pw=request.getParameter("pw");
if(ud.getUser(name, pw)!=null){
System.out.println(name);
//重定向,表示响应ok.jsp时会创建一对request和response
//response.sendRedirect("ok.jsp");
//请求转发,可以使用request传值
//使用request对象设置属性
request.setAttribute("name", name);
request.getRequestDispatcher("ok.jsp").forward(request, response);
}else{
response.sendRedirect("error.jsp");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RegisterServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name=request.getParameter("name");
String pw=request.getParameter("pw");
System.out.println(name+","+pw);
try {
new UserDao().addUser(name, pw);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.sendRedirect("registerok.jsp");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理post请求中文乱码
request.setCharacterEncoding("utf-8");
doGet(request, response);
}
}