Servlet两种访问路径
一、在Servlet类中通过设置@WebServlet标注访问
二、在web.xml中编写配置文件
第一种能比较直观看到Servlet路径,但当项目发布后不好再对Servlet路径进行修改
第二种把Servlet路径在web.xml中配置, 能更好对Servlet路径进行配置的修改
利用Servlet处理注册登录请求 传送门
项目结构
packagecom.Gary.servlet;importjava.io.IOException;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.Gary.model.User;importcom.Gary.util.DBUtil;
@WebServlet("/login_do")public class LoginServlet extendsHttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
String username= request.getParameter("username");
String password= request.getParameter("password");
User user=DBUtil.verifyAccount(username,password);if(user==null){//out.println("登录失败,用户名或密码错误");
request.setAttribute("message","登录失败,用户名或密码错误");
request.getRequestDispatcher("login.jsp").forward(request,response);
}else{//out.println("登录成功");
int number = 0;//获取到application对象
ServletContext application = this.getServletContext();//第一次登录用户时if不瞒住,number=0
if(application.getAttribute("userNumber")!=null){
number= (Integer)application.getAttribute("userNumber");
}//登录过一个用户后在原基础number上进行++
number++;
application.setAttribute("userNumber",number);//通过seesion的setAttribute传递数据
request.getSession().setAttribute("user", user);//登录请求的转发,将数据传递给personCenter.jsp页面
request.getRequestDispatcher("personCenter.jsp").forward(request,response);
}
}
}
LoginServlet.java
packagecom.Gary.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.Gary.util.DBUtil;//@WebServlet("/register_do")
public class RegisterServlet extendsHttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
String username= request.getParameter("username");
String password= request.getParameter("password");int age = Integer.parseInt(request.getParameter("age"));
String sex= request.getParameter("sex");boolean isSuccess =DBUtil.addUser(username,password,age,sex);//使用请求转发
if(isSuccess){
request.setAttribute("message", "注册成功,请登录");//通过getRequestDispatcher传递路径将请求转发给login.jsp
request.getRequestDispatcher("login.jsp").forward(request,response);
}else{
request.setAttribute("message", "注册失败,用户名重复");//通过getRequestDispatcher传递路径将请求转发给login.jsp
request.getRequestDispatcher("register.jsp").forward(request,response);
}
}
}
RegisterServlet.java
Insert title hereObjecto=session.getAttribute("user");if(o!=null){
User user=(User)o;
out.println("当前登录用户:"+user.getUsername()+"
");
}%>
Objectmsg=request.getAttribute("message");if(msg!=null)
out.println(msg);%>登录
用户名:
密码:
login.jsp
Insert title hereObjecto=session.getAttribute("user");if(o!=null){
User user=(User)o;
out.println("当前登录用户:"+user.getUsername()+"
");
}%>
Objectmsg=request.getAttribute("message");if(msg!=null)
out.println(msg);%>
用户名:
密码:
年龄:
性别: 男女
register.jsp
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"metadata-complete="true">
LoginServlet
com.Gary.servlet.LoginServlet
RegisterServlet
com.Gary.servlet.RegisterServlet
LoginServlet
/login_do
RegisterServlet
/register_do
web.xml
LoginServlet.java处理login.jsp登录表单的请求
RegisterServlet.java处理register.jsp注册表单的请求
第一种
通过在Servlet上设置@WebServlet标注,容器就会自动读取当中的信息,@WebServlet告诉容器,如果请求的URL是"/xxxxxx"
LoginServlet.java中配置的路径是login_do,在register.jsp的from表单中设置action也为login_do
由LoginServlet.java处理register.jsp的from表单提交的信息
@WebServlet("/login_do")public class LoginServlet extendsHttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
String username= request.getParameter("username");
String password= request.getParameter("password");
User user=DBUtil.verifyAccount(username,password);if(user==null){//out.println("登录失败,用户名或密码错误");
request.setAttribute("message","登录失败,用户名或密码错误");
request.getRequestDispatcher("login.jsp").forward(request,response);
}else{//out.println("登录成功");
int number = 0;//获取到application对象
ServletContext application = this.getServletContext();//第一次登录用户时if不瞒住,number=0
if(application.getAttribute("userNumber")!=null){
number= (Integer)application.getAttribute("userNumber");
}//登录过一个用户后在原基础number上进行++
number++;
application.setAttribute("userNumber",number);//通过seesion的setAttribute传递数据
request.getSession().setAttribute("user", user);//登录请求的转发,将数据传递给personCenter.jsp页面
request.getRequestDispatcher("personCenter.jsp").forward(request,response);
}
}
}
用户名:
密码:
第二种
通过web.xml配置文件进行配置
中填写项目中Servlet名字 【可随便填写,用作后边映射url】
中填写项目中该Servlet路径
配置servlet-name和地址映射
LoginServlet
com.Gary.servlet.LoginServlet
RegisterServlet
com.Gary.servlet.RegisterServlet
LoginServlet
/login_do
RegisterServlet
/register_do
将com.Gary.servlet.LoginServlet路径上的Servlet命名为LoginServlet,与后边中的LoginServlet相匹配
【按住Ctrl+鼠标左键点击下的路径可直接访问对应Servlet下的路径】