JSP与 servlet之间的传值
servlet跳转页面的几种方法
servlet跳转页面的几种方法一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。
跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。
Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。
1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。
sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("");跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
2) forward方式RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher .forward(request, response);页面的路径是相对路径。
forward方式只能跳转到本web应用中的页面上。
跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttributeJSP:1) response.sendRedirect();和servlet的response.sendRedirect()方式一样。
此语句前不允许有out.flush(),如果有,会有异常:ng.IllegalStateException: Can't sendRedirect() after data has committed to the client.atcom.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpRes ponse.java:558)...跳转后浏览器地址栏变化如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;2) response.setHeader("Location","");此语句前不允许有out.flush(),如果有,页面不会跳转。
Jsp页面传参的4种常用方式
Jsp页面传参的4种常用方式来源:未知更新时间:2010-06-27 点击: 266次jsp页面之间传递参数的方式有很多种,今天为大家总结常用的4种传参方式。
1.JavaScript传参:这种传参方式用opener关键字, 可以实现跨页传参.其用法就是用opene r关键字调用父窗体的一个组件.举例: opener.myform.txt.value = document.myform.txt.value;优点: 简单,对网络传输限制比较底.缺点: 不灵活,对与大量的传参不现实,也不实际.2. " ? "传参: 在传递地址的尾部加上? 后面跟参数的名字和其值,在另外一个Jsp页面中就可以用request.getParameter("参数名字");获取到传递的参数.举例: http://localhost:8080/bbs/tiezi/jishu.jsp?id=1优点: 灵活,只要把需要传递的参数放到一个变量中传递到传递的也面就可以了.缺点: 对于批量传参也不现实.3. session传参:通常把它用来实现状态维持.session中有2个参数,第一个为标识,第二个为值,形式("key","value") 如果你的思维敏捷,就能联想到散列表,对它就是散列表的一种实现.应用举例: session.setAttribute("login","ok"); session.getAttribute("login");优点: 不用关心是什么数据类型,都可以放到session中,它以对象的形式存储于散列表中. 缺点: session中把所有数据当成对象来存取,所以每次我们用它的时候都要把类型强制转换为我们需要的类型.4. JavaBean传参: 这是最高级的一种传递参数,它把任何数据类型,任何方式封装在JavaB ean中.我们在属性中定义需要传递的参数,然后加入一个get和set方法就可以了,在Jsp 中调用的时候可以设置其生命周期,完成传递参数的过程.应用举例:package bean;public class sampleBean{private String sample="Star value";public String getSample(){return sample;}public void setSample(String newsample){if(newsample!=null){sample=newsample;}}优点: 灵活,多样,传递数组、对象、哈希表、等等数据结构.缺点: 根据传递参数的不同编写不同的JavaBean,费时费力.通过以上的4种方式几乎可以解决jsp传参的问题了,至于使用哪一种就看你的需要了,根据它们的优缺点,以及实际情况和现实需要,选择一种传递方式。
Jsp和Servlet关系
Jsp和Servlet关系为什么会出现Jsp?其实对于服务器来说它只认识Servlet,我们完全可以在Servlet⽤resp.getWriter().write("");画出⽹页的界⾯,但是仅仅⼀个很简单的界⾯就要重复的书写resp.getWriter().write(""),并且这还没有加上js、css以及jquery。
但是我们在Servlet写的是java代码可以有逻辑的判断,但是在html、css中⽆法加⼊逻辑导致页⾯是静态的。
为了解决这⼀问题出现了jsp,在jsp中可以书写Java代码、js代码、html代码等。
我们都知道浏览器发送请求到服务器,服务器通过解析其中Servlet的别名找到对应的Servlet并执⾏其中的service⽅法做出处理和响应,那么对于服务器来说它只认识Servlet,那么我们编辑的Jsp到底是如何被服务器识别的?实际上服务器还是将.jsp当作Servlet的别名在你局部配置下的web.xml找有没有对应的Servlet,如果没有找到对应的Servlet就去Tomcat的公共配置下的web.xml(Tomcat安装⽬录conf下的web.xml)找对应的Servlet。
会找到如下内容:org.apache.jasper.servlet.JspServlet将对应的jsp⽂件转为Servlet。
那么转的Servlet在什么地⽅呢?打开Tomcat下的work⽂件夹⼀直点到:找你正在运⾏的项⽬的jsp测试的jsp:<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>666</body></html> 被编译好的Java⽂件:/** Generated by the Jasper component of Apache Tomcat* Version: Apache Tomcat/8.5.46* Generated at: 2019-10-16 09:05:10 UTC* Note: The last modified time of this file was set to* the last modified time of the source file after* generation to assist with modification tracking.*/package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;public final class index_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports {private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();private static java.util.Map<ng.String,ng.Long> _jspx_dependants;private static final java.util.Set<ng.String> _jspx_imports_packages;private static final java.util.Set<ng.String> _jspx_imports_classes;static {_jspx_imports_packages = new java.util.HashSet<>();_jspx_imports_packages.add("javax.servlet");_jspx_imports_packages.add("javax.servlet.http");_jspx_imports_packages.add("javax.servlet.jsp");_jspx_imports_classes = null;}private volatile javax.el.ExpressionFactory _el_expressionfactory;private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;public java.util.Map<ng.String,ng.Long> getDependants() {return _jspx_dependants;}public java.util.Set<ng.String> getPackageImports() {return _jspx_imports_packages;}public java.util.Set<ng.String> getClassImports() {return _jspx_imports_classes;}public javax.el.ExpressionFactory _jsp_getExpressionFactory() {if (_el_expressionfactory == null) {synchronized (this) {if (_el_expressionfactory == null) {_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();}}}return _el_expressionfactory;}public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {if (_jsp_instancemanager == null) {synchronized (this) {if (_jsp_instancemanager == null) {_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());}}}return _jsp_instancemanager;}public void _jspInit() {}public void _jspDestroy() {}public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {final ng.String _jspx_method = request.getMethod();if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request. response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");return;}final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final ng.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.PageContext _jspx_page_context = null;try {response.setContentType("text/html; charset=ISO-8859-1");pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);_jspx_page_context = pageContext;application = pageContext.getServletContext();config = pageContext.getServletConfig();session = pageContext.getSession();out = pageContext.getOut();_jspx_out = out;out.write("\r\n");out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"/TR/html4/loose.dtd\">\r\n");out.write("<html>\r\n");out.write("<head>\r\n");out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\r\n");out.write("<title>Insert title here</title>\r\n");out.write("</head>\r\n");out.write("<body>\r\n");out.write("666\r\n");out.write("</body>\r\n");out.write("</html>");} catch (ng.Throwable t) {if (!(t instanceof javax.servlet.jsp.SkipPageException)){out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {if (response.isCommitted()) {out.flush();} else {out.clearBuffer();}} catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);else throw new ServletException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}}但是我们发现这个类并没有继承HttpServlet⽽是继承了org.apache.jasper.runtime.HttpJspBase并且⾥⾯也没有service⽅法⽽是_jspservice⽅法。
JSP页面间传递参数
JSP页面间传递参数有时还需要多个JSP页面间传递参数。
下面介绍一下实现的方法。
(1)直接在URL请求后添加如:< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a>特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码:response.sendRedirect("thexuan.jsp?action=transparams&detail=directe") ,可用request.getParameter(name)取得参数(2)jsp:param它可以实现主页面向包含页面传递参数,如下:< jsp:include page="Relative URL"> < jsp:param name="param name" value="paramvalue" /> < /jsp:include> 还可以实现在使用jsp:forward动作做页面跳转时传递参数,如下:< jsp:forward page="Relative URL"> < jsp:param name="paramname" value="paramvalue" /> < /jsp:forward> 通过这种方式和一般的表单参数一样的,也可以通过request.getParameter(name)取得参数(3)设置session和request通过显示的把参数放置到session和request中,以达到传递参数的目的session.setAttribute(name,value); request.setAttribute(name,value) 取参数:value=(value className)session.getAttribute(name); value=(value className)request.getAttribute(name); 大家肯定已经注意到了,在取参数的时候,做了类型转换,这是因为放置在session和request中的对象的属性被看作ng.Object类型的了,如果不转换,在将直付给value时会报classcastexception异常。
java总结
1、Servlet与JSP有什么区别?Servlet和JSP完成的功能是相同的,都可以接收用户的请求,可以对用户进行响应,可以调用业务方法。
不同点在于JSP是在html或者xml中嵌入了Java代码或者JSP的标记,在制作页面方面具有优势,可以使用网页编辑工具来制作网页,然后嵌入Java或者JSP的标记。
Servlet是纯Java代码,通常用于控制,不用于输出。
在MVC模式中,JSP通常充当视图,Servlet通常充当控制器。
另外,JSP 在运行的时候还要转换成类似于Servlet的Java代码。
2、Servelt通常有哪些方法init方法,完成初始化service方法,包括doGet和doPost,用于接收用户的请求,调用后台的JavaBean或者EJB,选择界面对用户响应。
destroy方法,用于释放资源3、谈谈Servlet的生命周期当接收到请求的时候,容器察看对应的Servlet对象是否存在,如果不存在,需要加载Servetl,实例化Servlet,调用init方法进行初始化。
如果已经存在,根据用户的请求创建request和response对象,把这两个对象作为参数调用Servlet对象的service方法,Servlet通过这个方法与用户进行交互,方法执行完之后,对请求的处理结束。
Servelt对象继续等待下一个请求。
当应用卸载的时候,调用destroy 方法释放资源。
多个请求共享Servelt对象。
4、Servlet API的两个主要包javax.servlet.*;javax.servlet.http.*;5、编写Servlet需要继承的类是什么?HttpServlet6、编写Servlet通常需要实现的两个方法是什么?doGet方法和doPost方法7、doGet方法和doPost方法中的两个参数是什么?HttpServletRequest和HttpServletResponse,前者封装了与请求相关的信息,后者封装了与响应相关的信息。
jsp页面传值中文乱码问题解决
JSP中文乱码种类
1.JSP文件中文内容显示乱码
2.调用Servlet显示乱码
3.Post表单乱码
4.Get参数乱码
5.存取数据库乱码
1
•通过浏览器调用JSP页面,在客户端浏览器中所有的中文内容出现乱码
•解决方案:替换ISO-8859-1,修改页面编码为UTF-8
调用Servlet显示乱码
•通过浏览器调用Servlet,Servlet在浏览器中显示内容出现乱码
调用Servlet显示乱码
•解决方案:在Servlet使用response在输出内容之前,先执行response.setContentType("text/html;charset=UTF-8")设定输出内容的编码为UTF-8
Post表单乱码
•提交页面表单元素给对应的JSP页面或者Servelt后,接收方出现表单数据中文值乱码
Post表单乱码
•解决方案:在接收POST提交的参数之前,使用request.setCharacterEncoding(“UTF-8")设定接收参数的内容使用UTF-8编码
Get查询字符串乱码
•用Get方式传递参数,中文字符会出现乱码
ISO8859_1ISO8859_1gb2312gb2312
客户端通过GET 提交中文编码问题简单流程:
假如:
客户端和服务器用gb2312
HTTP 传输编码用ISO8859_1
则:
服务器需要指示客户端文档的编码方式
Get查询字符串乱码
•解决方案:Get提交默认是以ISO88591传递,如果容器没有做配置修改,程序则需要手工进行编码转换
存取数据库乱码
•解决方案:在数据库连接参数中设置编码值。
几种JSP页面传值方式
function demo(){
var v = document.all('username').value;
location.replace("V.jsp?username="+v+"&age=25");
}
</script>
<input type="text" name="username"><br>
<input type="button" value="href点击" onclick="location.href='V.jsp?pwd=123456'"><BR>
<input type="button" value="replace点击"
onclick="location.replac('V.jsp?pwd=123456789')">
<br>
<input type="button" value="动态取值" onclick="demo()">
注:数用button
a.
<input name="btnModify" type="button" class="button1" onClick="self.location='client_modify.jsp?id=<%=id %>'"
java Servlet请求转发和重定向
•请求转发☐请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。
此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变☐请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应RequestDispatcher rd = request.getRequestDispatcher(path);rd.forward(request,response);或request.getRequestDispatcher(path) .forward(request,response);•重定向☐重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址☐重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求response.sendRedirect(path);•请求转发和重定向区别如下:☐forward()只能将请求转发给同一个Web应用中的组件,而sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到其他站点的资源。
☐sendRedirect()方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用forward()方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
☐forward()方法的调用者与被调用者之间共享相同的request对象和response对象;而sendRedirect()方法调用者和被调用者使用各自的request对象和response对象,它们属于两个独立的请求和响应过程。
•使用请求对象(request)存储数据(在servlet中存,在JSP中取)request. setAttribute(“score”,score);int score=(INTEGER)request. getAttribute(“score”);☐HttpServletRequest接口的方法:public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)•使用HttpSession对象存储数据HttpSession session=request.getSession();session. setAttribute(“score”,score);int score=(Integer) session. getAttribute(“score”);☐HttpSession接口的方法public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)•使用ServletContext对象存储数据ServletContext context = this.getServletContext();或ServletContext context = this.getServletConfig().getServletContext();context. setAttribute(“score”,score);int score=(Integer) application. getAttribute(“score”);ServletContext接口的方法public void setAttribute(String name, Object obj)public Object getAttribute(String name)public Enumeration getAttributeNames()public void removeAttribute(String name)简单的说,HttpServletRequest共享的对象仅在请求的生存期中可被访问,使用HttpSession共享的对象仅在会话的生存期中可被访问,使用ServletContext共享的对象在应用程序的生存期中可被访问。
java后端主动向前端传递数据的方法
java后端主动向前端传递数据的方法
Java后端主动向前端传递数据的方法是通过使用HTTP协议进行数据交互。
以下是几种常用的方法:
1. 使用Servlet:Java后端可以编写Servlet来处理前端请求,并在响应中添加所需的数据。
通过使用ServletResponse对象的方法(如getOutputStream())将数据以字符串或JSON格式发送给前端。
2. 使用JSP:Java后端可以使用JSP页面来动态生成HTML,并在其中嵌入后端数据。
后端可以通过使用JSP标签库或Java代码将数据传递给前端。
3. 使用WebSocket:WebSocket是一种全双工通信协议,可以实现实时的、双向的数据传输。
Java后端可以使用WebSocket技术建立连接,并主动向前端推送数据,前端可以通过Websocket API接收数据。
4. 使用消息队列:后端可以使用消息队列系统(如ActiveMQ或RabbitMQ)将数据发送到前端。
前端可以订阅特定的队列或主题,接收后端发送的数据。
5. 使用Ajax:Ajax是一种在不重新加载整个页面的情况下与服务器进行数据交互的技术。
Java后端可以提供RESTful API,前端通过Ajax请求后端接口,并将返回的数据展示在页面上。
这些方法可以根据具体需求选择使用,根据业务场景的不同,可灵活选择适合的方式来实现后端向前端传递数据。
servlet 跳转页面的方法
servlet跳转页面的几种方法一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。
跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。
Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。
1) redirect 方式response.sendRedirect("/a.jsp");页面的路径是相对路径。
sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("");跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
2) forward方式RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher .forward(request, response);页面的路径是相对路径。
forward方式只能跳转到本web应用中的页面上。
跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttributeJSP:1) response.sendRedirect();和servlet的response.sendRedirect()方式一样。
此语句前不允许有out.flush(),如果有,会有异常:ng.IllegalStateException: Can't sendRedirect() after data has committed to the client.atcom.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpRespo nse.java:558)...跳转后浏览器地址栏变化如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;2) response.setHeader("Location","");此语句前不允许有out.flush(),如果有,页面不会跳转。
JavaWeb编程中页面跳转与数据共享
浅谈JavaWeb编程中页面跳转与数据共享引言:javaweb中有多种方式实现jsp/servlet页面之间的跳转与数据共享,每种方式有各自的特点,在实际编程过程中需要根据具体的场景选择最合适的方式进行跳转或者数据共享。
一、引言在javaweb编程中间经常出现需要从一个jsp/servlet页面跳转到另外一个jsp/servlet页面并且在这多个不同页面之间共享数据信息的情况,如何选择跳转方式以及共享数据方式一直是javaweb编程初学者容易迷茫的地方。
二、跳转的方式javaweb的跳转分两种方式:重定向和转发。
重定向是被请求的jsp/servlet页面向客户端ie响应一个重定向状态码以及,转自[星论文网]重定向路径后,客户端ie根据响应内容自动的向重定向路径发送一个新的请求,重定向路径的资源接收到请求后执行完毕将结果响应给客户端ie。
转发是被请求的jsp/servlet页面代码通过requestdispatcher对象将当前请求直接在服务器上转交给新的目标路径,由目标路径资源执行完毕将结果响应给客户端ie。
例如客户端ie请求资源a,资源a跳转到资源b,最终客户端看到资源b的内容。
如果是在转发模式下,客户端ie向资源a发出的请求,直到资源b响应才结束,整个过程只有一次请求响应。
如果是在重定向模式下,客户端ie向资源a发送一个请求信息,当资源a响应客户端重定向状态码时第一次请求就结束了,然后客户端ie向资源b发出第二次请求,资源b进行第二次响应,整个过程有两次请求响应。
默认情况下重定向的第二次请求不含有任何第一次请求用户输入的参数。
三、数据共享的方式通过重定向或者转发能够在不同的jsp/servlet页面之间跳转,在这些跳转页面之间经常需要使用一些共享数据,javaweb提供了四种常用的方式来实现数据共享,分别是使用cookie对象、httpsession对象、servletcontext对象和httpservletrequest对象。
第六章 JSP与Servlet
程序解析
Servlet文件通过实现javax.servlet.http.HttpServlet类来实现
重载doGet()、doPost()方法就可实现自己的Servlet;
Servlet被加载时进行初始化操作,还可重载init()和destroy()方法
response.setContentType(CONTENT_TYPE)说明返回的MIME类 型 PrintWriter out = response.getWriter(); 获得PrintWriter对象,然 后输出一段HTML文本
编程方式不同 jsp遵循脚本语言的编制标准; servlet严格遵循java 语言的编程标准;
运行速度的不同 Jsp比servlet运行慢,jsp必须转换成servlet 再运行; 运行方式不同
Servlet是java程序,必须编译成 .class 文件执行,jsp直接由
Tomcat将以执行;
例如:<a href=“servlet/VerifyCode”>访问验证码程
序</a> 通过表单向Servlet提交数据 使用HTML表单向服务器的某个JSP页面提交信息, 格式:
<form method=get|post action=“提交信息的目 的页面”> 提交手段 </form
项目实现
投票显示、投票结果显示由JSP实现; 数据库的连接及其操作用JavaBean实现; 投票处理,投票项目的新增、修改、删除功能用Servlet 技术实现
总结与提高 Servlet 运行于服务器上,它接受请求并用请求的数据响
应客户端
Servlet 广泛使用 HTTP 协议,因此称为 HTTP Servlet HTTP Servlet 发送 HTTP 请求并接收 HTTP 响应 Servlet API 包含在两个包中,即 javax.servlet 和 javax.servlet.http 中 Servlet 的生命周期包含三种方法,分别是 init()、 service() 和 destroy()
selvet类的介绍
Servlet介绍Servlet类:就是一个可以接收页面HTTP请求的类。
Servlet类的创建1.创建一个类,类名以Servlet结尾2.继承HttpServlet类3.重写HttpServlet类中继承的doGet和doPost方法4.删除重写的方法中的注释和代码,并且在doGet中调用doPostServlet类的配置当一个Servlet类创建完成以后,需要在webRoot/WEB-INF/web.xml文件中进行路径配置,JSP提交数据到Servlet类只需在jsp页面将form标签的action属性值修改为Servlet类对应的路径在Servlet类中接收页面提交的数据从Servlet类传值到JSP页面从Servlet类跳转到JSP页面如何在JSP页面接收数据request对象在页面和Servlet类之间传值session对象·session对象也可以用来传值,作用于一次会话的所有页面·通过session对象完成登录验证(未登录用户不允许访问项目主页面)response对象在服务器端响应客户端的请求config和application对象ServletConfig对象,与当前Servlet类相关,通过config对象我们可以:ServletContext(application)对象,与整个项目相关,一个项目只会创建一个applicationServlet的初始化参数我们可以在web.xml中配置一些Servlet中需要使用的参数,这些参数会被Servlet类加载,根据参数使用范围的不同分为:全局初始化参数和局部初始化参数全局初始化参数:配置在web.xml文件中,可以被当前项目中任何一个Servlet类加载在web.xml中定义在Servlet类加载全局局部cookie在web项目中,某些情况下由于项目功能的需要,服务器需要将某些用户信息保存在客户端。
所以我们需要使用Cookie对象:·Cookie是存储在客户端的一个文件·Cookie是通过服务器保存在客户端的·Cookie文件谁保存谁才能访问,如下案例:(记住登录密码)记住密码(LoginServlet)获取密码(GetPwdServlet)Servlet的生命周期当我们请求一个Servlet类的时候,会调用Servlet类中的doGet/doPost方法响应,所以一定会创建这个Servlet类的对象。
总结JSP与servlet之间的传值
总结JSP与servlet之间的传值JSP与servlet之间的传值有两种情况:JSP -> servlet,servlet -> JSP。
通过对象request和session (不考虑application)完成传值。
一、JSP -> servletJSP页面有3种方法向servlet传值:form表单、URL 、其他<!-- JSP page -->...<%......session.setAttribute("testSession","Hello session");reqeust.setAttribute("testRequest","Hello request");%><a href="JspServlet?action=toServlet">click me</a><form action="JspServlet?action=toServlet" method="post" name="form"><input name="username" type="test" /><input type="submit" value="submit"></form>...1、对于该JSP页面form表单的内容,如<input>标签,在servlet可用request.getParameter("username");获取。
2、URL:比如这里的<a>标签的href属性与<form>标签的action属性的值"JspServlet?action=toServlet",在servlet同样用request.getParameter("action")获取;所要注意的是这里的url 要和servlet在web.xml里的<url-pattern>标签的路径所对应。
servlet间的转发
servlet间的转发
Servlet间的转发指的是在一个Servlet中处理完请求后,将该请求转发到另一个Servlet进行处理。
这种方式可以实现多个Servlet之间的协作,提高代码的重用性和可维护性。
在Servlet中,可以通过
request.getRequestDispatcher('servletName').forward(request, response)方法进行转发,其中servletName为目标Servlet的名称。
转发后,目标Servlet会接收到原始请求的request和response对象,然后进行处理。
需要注意的是,转发过程中原始请求的URL不会发生改变,因此用户无法察觉到转发的存在。
另外,转发只能在同一个Web应用程序中进行,不能跨应用程序进行。
在实际应用中,Servlet间的转发可以用于实现多个Servlet之间的数据共享和操作协作。
例如,在一个Servlet中处理用户登录请求后,可以将用户信息转发到另一个Servlet进行用户验证和权限控制,从而提高系统的安全性和可扩展性。
- 1 -。
jsp中利用response.senddirect(str)重定向,传递参数新思路
jsp中利⽤response.senddirect(str)重定向,传递参数新思路⽤Servlet进⾏请求重定向,参数传递好办,直接⽤request.setAttribute(str1,str2);但是如果不⽤Servlet ⽽是直接⽤jsp进⾏转发呢?我们⾸先要知道请求的重定向:在最终的Servlet中,request对象和中转的那个request不是同⼀个对象所以传递参数,⾃然就获取不到了下⾯我们换思路,另辟蹊径,我们⽤session session的⽣命周期长啊 所以完全可以获取⾄于session与request的知识,请查阅相关资料下⾯贴出登录出现密码或⽤户名错误 跳转⾄login页⾯<%userBean bean = new userBean();String name = request.getParameter("userName");String password = request.getParameter("userPassword");String str1 = "";if(bean.isVerifyLoginInfo(name, password))str1 = "login success";else{str1 = "fail in login,password or username has error.";%><%-- 请求转发<jsp:forward page="login.jsp"><jsp:param name="error" value="<%=str1%>"/></jsp:forward>--%><%//请求重定向session.setAttribute("error",str1);//request.setAttribute("error",str1);response.sendRedirect("login.jsp");}%> <% //利⽤重定向获取到的参数属性//String str = (String)session.getAttribute("error");String str = (String)request.getAttribute("error");/*利⽤请求转发获取的参数String str = request.getParameter("error");if(str == null)str="";*/if(str == null)str="";%><h2 align="center"><font color="red"><%=str %></font></h2> userBean对⽤户检测部分进⾏了封装。
getparametervalues()的参数
getparametervalues()的参数在Java web开发中,我们经常会使用到一个方法叫做“getParameterValues()”。
该方法是HttpServletRequest类中的一个方法,它用来获取客户端传递过来的多个参数值,参数可以重复。
在使用该方法时,需要注意传递的参数。
下面我将分几个步骤来给大家讲解:1.首先,在处理请求之前,需要获取HttpServletRequest对象。
在JSP中,可以直接使用request对象;在Servlet中需要复写doGet 和doPost方法,并且将HttpServletResponse与HttpServletRequest 对象作为参数传递。
2.接下来,使用getParameterValues()方法来获取多个参数值。
该方法会返回一个数组,其中每个元素都是参数的值。
3.需要注意的是,如果传递的参数不存在,getParameterValues()方法将返回null。
如果参数只有一个,则可以使用getParameter()方法来获取参数值。
4.在获取参数值后,需要对其进行各种操作,例如:打印输出、存储到数据库等等。
可以使用for循环来遍历数组。
通过上述步骤,我们可以获取到客户端传递过来的多个参数值。
在实际应用中,getparametervalues()方法经常被用于表单数据的提交和处理。
需要注意的是,在使用getParameterValues()方法时,要确保传递的参数值的正确性和安全性。
在处理用户输入时,需要进行参数的过滤、校验和编码等操作,以避免安全风险和数据错误。
此外,在处理表格数据的时候,getparametervalues()方法也是不可缺少的。
它可以轻松地获取传递的多个参数值,方便我们进行各种逻辑处理。
总的来说,getParameterValues()方法是开发Java Web应用时常用的方法之一。
它可以用来获取多个表单参数值,方便我们进行进一步的操作。
java forward方法
java forward方法
Java中的forward方法是用于将请求从一个servlet转发到另
一个servlet或JSP页面的方法。
当一个servlet需要处理部分请求,而其他servlet或JSP页面需要处理其他部分请求时,可以使用forward方法将请求传递给下一个组件。
使用forward方法时,请求的所有参数和属性都将保持不变,并且响应对象的状态也可以被修改。
使用forward方法的语法如下所示:
request.getRequestDispatcher('url').forward(request, response);
其中,url是被转发的servlet或JSP页面的地址。
forward方
法将控制权传递给该地址,并且在该地址返回响应后,将控制权再次传递回原始servlet。
需要注意的是,使用forward方法时必须确保该方法是在原始servlet中的doGet或doPost方法中调用的。
另外,如果在forward 方法之后还有其他代码需要执行,需要使用return语句来退出方法,否则可能会导致不可预知的行为。
总的来说,forward方法是一种灵活和方便的机制,可以帮助开发人员轻松地将请求和响应传递给不同的组件,并且保持请求的状态不变。
- 1 -。
JSP获取路径、传递参数
JSP获取路径、传递参数1,自动获取项目地址1.1<%String path=request.getContextPath();String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getRemotePort()+pat h+"/";%>path输出是:/TestsbasePath输出是:1.2<%String path=request.getContextPath();String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path +"/";%>path输出是:/TestsbasePath输出是:1.3<%Stringurl=request.getScheme()+"://"+request.getServerName()+":"+ request.getServerPort()+request.getRequest URI().toString();%>url输入:index.jsp1.4获取请求来页面的地址<%String url=request.getHeader("referer");%>url输出:NewFile2.jsp1.5,获取当前页面地址String address1=request.getRequest URL().toString();输出:NewFile.jsp2,获取form表单请求参数的值<%request.setCharacterEncoding("UTF-8");//当参数是中文,防止它乱码String txt=request.getParameter("txt");//用它获取%>显示<%=txt%>3,使用reques对象传递参数A页面传递<%try{int money=9;int count=0;request.setAttribute("result",money/count);//使用setAttribute传值}catch(Exception e)request.setAttribute("result", "抱歉,页面产生错误!");//使用setAttribute传值}%><jsp:forward page="info.jsp"/><!-- 重定向到一个页面 -->B页面获取//request.setCharacterEncoding("UTF-8");request不用他,不回乱码<%Stringmessage=request.getAttribute("result").toString(); %> <%=message %>4,获取url传来的值A页面传值<a href="jack.jsp?id=1&name=张三&sex=男">跳转</a>B页面取值<%int id=Integer.parseInt(request.getParameter("id"));String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");String sex=new String(request.getParameter("sex").getBytes("ISO-8859-1"),"utf-8");%>id:<%=id %><br/>姓名:<%=name %><br>性别:<%=sex %>5,在本页提交并获取<%request.setCharacterEncoding("utf-8");//防止请求中文乱码String str3=request.getParameter("txt");%><form action="index.jsp" method="post">用户名:<input type="text" name="txt" value=""/><input type="submit" value="提交"/></form><%if(str3!=null&&str3!=null) {%><%=str3 %><%} %>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这几天做了一个项目,大量用到了JSP与servlet之间的传值,总结了一下
JSP与servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP.
通过对象request和session (不考虑application)完成传值.
一、JSP -> servlet
JSP页面有3种方法向servlet传值:form表单、URL 、其他
<!-- JSP page -->
...
<%......
session.setAttribute("testSession","Hello session");
reqeust.setAttribute("testRequest","Hello request");
%>
<a href="JspServlet?action=toServlet">click me</a>
<form action="JspServlet?action=toServlet" method="post" name="form">
<input name="username" type="test" />
<input type="submit" value="submit">
</form>
...
1、对于该JSP页面form表单的内容,如<input>标签,在servlet可用request.getParameter("username");获取.
2、URL:比如这里的<a>标签的href属性与<form>标签的action属性的值"JspServlet?action=toServlet",在servlet同样用request.getParameter("action")获取;所要注意的是这里的url 要和servlet在web.xml里的<url-pattern>标签的路径所对应.这部分后面会提到.
3、java片段代码,servlet只能接到session.setAttribute("testSession","Hello session")的内容,而接不到request的内容.在servlet里用request.getSession().getAttribute("testSession")获
取session内容.
二、Servlet
1、关于servlet,要提到它在web.xml里的注册内容,如
<servlet-name>JspServlet1</servlet-name>
<servlet-class>com.demo.JspServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JspServlet1</servlet-name>
<url-pattern>/JspServlet</url-pattern>
</servlet-mapping>
<servlet-name>JspServlet2</servlet-name>
<servlet-class>com.demo.JspServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JspServlet2</servlet-name>
<url-pattern>/admin/JspServlet</url-pattern>
</servlet-mapping>
假如project name 是jsp2servlet,则该project根目录的Context是/jsp2servlet,在地址栏里显示是http://localhost:8080/jsp2servlet/;
在project 根目录下有admin目录,对应的Context是/admin/jsp2servlet,在地址栏里显示是http://localhost:8080/jsp2servlet/admin,
在这两个目录下的jsp 都想转到com.demo.JspServletDemo类做处理,这时的url需要在web.xml注册两次.
1)在http://localhost:8080/jsp2servlet/ 目录下的jsp 页面JspServlet1,url应写为"JspServlet"
2)在http://localhost:8080/jsp2servlet/admin/ 目录下的jsp 页面访问JspServlet2,url应写为"admin/JspServlet"
2、在servlet直接用request对象,得到发送来的请求内容;用request.getSession(),得到session对象,从而得到会话内容.
这里的request.getSession()的参数为boolean 类型,该方法意思可理解为:
session可以认为是每一个IE进程对应一个会话(新开一个IE进程就可以对应两个会话的),getSession都是返回当前用户的会话对象,参数的区别在于:
参数为true (默认),则如果“当前用户的会话对象”为空(第一次访问时)则创建一个新的会话对象返回;
参数为false,则如果“当前用户的会话对象”为空,则返回null (即不自动创建会话对象).
利用这个方法可以判断session是否过期,如下:
if(request.getSession(false)==null)
System.out.println("Session has been invalidated!");
else
System.out.println("Session is active!");
三、Servlet -> JSP
从servlet转到jsp不外乎两种方法,重定向和url转发
1、重定向( Redirect):是路径的跳转,内容和url都改变.不允许带request参数( session 参数可以),即不允许在servlet里给request对象使用setAttribute方法传给下一页面.在servlet里使用response.sendRedirect(url) 方法.注意这里的url前不带斜线/,如response.sendRedirect(”test.jsp“)
2、url转发( Forward):是页面的跳转,页面内容发生改变,url不变.可以带request和session参数.在servlet里使用getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response).而
这里的url前需要带斜线/,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)。