上蔡网站建设,可以做热图的在线网站,网站建设的实验心得,小程序免费推广平台Servlet获取前端提交的参数
学好Servlet必须紧紧围绕着请求和响应这两个概念 以上写的代码只是进行请求#xff0c;然后再响应到客户端。请求的时候没有带数据给Servlet 下面开始写在请求的时候前端带数据到servlet里面#xff0c;我们servlet要接收前端给我们的这个数据
l…Servlet获取前端提交的参数
学好Servlet必须紧紧围绕着请求和响应这两个概念 以上写的代码只是进行请求然后再响应到客户端。请求的时候没有带数据给Servlet 下面开始写在请求的时候前端带数据到servlet里面我们servlet要接收前端给我们的这个数据
login.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlheadtitle$Title$/title/headbodyform actionlogin methodpostinput typetext nameusername/brinput typetext namepassword/brinput typesubmit value提交/form/body
/htmlservlet实例
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding(utf-8);//html页面中 input标签发送的数据都会存到HttpServlet这个对象里面//通过前端input标签name的属性值获取前端发送的数据String username request.getParameter(username);String password request.getParameter(password);System.out.println(username: usernamepasswordpassword);//Servlet响应数据到客户端的时候如果是中文的话会乱码response.setContentType(text/html;charsetutf-8);response.getWriter().write(username: usernamepasswordpassword);}
}web.xml servletservlet-namelogin/servlet-nameservlet-classcom.by.servlet.LoginServlet/servlet-class/servletservlet-mappingservlet-namelogin/servlet-nameurl-pattern/login/url-pattern/servlet-mapping中文乱码的解决方案
请求时候的乱码问题
//前端发送数据到Servlet如果是post请求的话input输入中文数据的时候Servlet接到的数据是乱码的。
request.setCharacterEncoding(utf-8);响应时候中文乱码的问题
//Servlet响应数据到客户端的时候如果是中文的话会乱码
response.setContentType(text/html;charsetutf-8);重定向和转发
web网站上面有一些跳转按钮。比如登录成功以后跳转到主页面
重定向
是什么
用户通过浏览器发送一个请求Tomcat服务器接收这个请求会给浏览器发送一个状态码302并设置一个重定向的路径浏览器如果接收到了这个302的状态码以后就会去自动加载服务器设置的路径
一个页面跳转到另外一个页面应用场景、登录页面跳转到主页面 login.jspLoginServletmain.jsp
特征
①重定向的过程是浏览器客户端的行为 ②实际上浏览器做了2次请求当点击登录按钮的时候做了两次请求分别是请求login和main.jsp ③注意上一次请求的request对象会丢失 ④重定向有一个非常明显的特征即浏览器的url变化了
重定向就一句核心代码
response.sendRedirect(main.jsp); //就这一行代码但是这一行代码必须写在doGet或者doPost方法中login.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
%--请求RedirectServlet--%
form actionredirect methodpostinput typetext nameusername/brinput typetext namepassword/brinput typesubmit value提交
/form
/body
/htmlRedirectServlet
package com.by.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 RedirectServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置字符编码request.setCharacterEncoding(utf-8);String username request.getParameter(username);String password request.getParameter(password);request.setAttribute(username, username);request.setAttribute(password, password);//登录以后跳转到主页//重定向//这个TestLoginServlet里面的数据是不能传给target.html的response.sendRedirect(main.jsp);}
}web.xml servletservlet-nameredirect/servlet-nameservlet-classcom.by.servlet.RedirectServlet/servlet-class/servletservlet-mappingservlet-nameredirect/servlet-nameurl-pattern/redirect/url-pattern/servlet-mappingmain.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
这是main页面br
%--
%request.getAttribute(username)%
%request.getAttribute(password)%
--%${username}
${password}
/body
/html测试
转发
是什么
用户发送数据请求到服务器服务器接收当前请求会调用内部方式转发处理该请求最终把响应给客户端
特征
①转发是服务器的行为 ②浏览器在这个过程中只有一次行为 ③转发可以带有数据 request对象中 ④url不会发生任何的变化
核心代码也只有一行
request.getRequestDispatcher(“main.jsp”).forward(request,response);
//这一行代码就表示进行了转发url没有变但是响应的结果却是一次请求干了两个活login.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
%--请求ForwardServlet--%
form actionforward methodpostinput typetext nameusername/brinput typetext namepassword/brinput typesubmit value提交
/form
/body
/htmlForwardServlet
package com.by.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 ForwardServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置字符编码request.setCharacterEncoding(utf-8);String username request.getParameter(username);String password request.getParameter(password);request.setAttribute(username, username);request.setAttribute(password, password);//登录以后跳转到主页//重定向//这个TestLoginServlet里面的数据是不能传给target.html的request.getRequestDispatcher(main.jsp).forward(request, response);}
}web.xml servletservlet-nameforward/servlet-nameservlet-classcom.by.servlet.ForwardServlet/servlet-class/servletservlet-mappingservlet-nameforward/servlet-nameurl-pattern/forward/url-pattern/servlet-mappingmain.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
这是main页面br
${username}
${password}
/body
/html测试
Servlet的自动加载
默认情况下第一次访问servlet的时候创建servlet对象。如果servlet构造函数里面的代码或者init方法里面的代码比较多就会导致用户第一次访问servlet的时候比较慢。这个时候我们可以改变servlet对象的创建时机提前到加载web应用的时候。在servlet的配置信息中加上一个load-on-startup标签即可。
servletservlet-nameloadOnStartup/servlet-nameservlet-classcom.by.servlet.LoadOnStartupServlet/servlet-class!--容器是否在启动时加载该servlet,数字越小优先级越高越高--load-on-startup1/load-on-startup
/servletservlet实例:
public class LoadOnStartupServlet implements HttpServlet {public LoadOnStartupServlet(){System.out.println(LoadOnStartupServlet constructor method has run....);}
}这样配置之后servlet的构造函数和init方法就会在web应用加载的时候就会执行。