Java Web中的servlet、jsp、session等的用法。

1、当服务器响应客户端之后,request和response会立即销毁,在客户端去访问服务器的时候就开启Servlet,当Servlet开启之后就会产生request和response。

2、访问Servlet的6种方式:通过地址栏输入网址提交访问(直接在浏览器上写网址访问),表单访问,超链接访问,伪链接访问,函数访问,用Java代码访问(不讲)。

①地址栏输入网址提交访问:http://ip:port/项目名称/user.do<后面可以追加参数,别忘了追加前加一个’?’>  ===>其中,user.do也可以写成user.action。

其实就是get方法访问,这种访问方法出现的问题为:乱码,参数在地址栏可以看见且参数大小不能超过255个字符,不安全。

②表单:post提交方式无乱码,以后用表单方式访问时,统统采用post方式提交。

<!-- JSP -->
<body>
	<form action="user.do" method="post">
		用户名:<input type="text" name="name" /><br />
		密    码:<input type="text" name="pwd" /><br />
		<input type="submit" value="提交" /><br />
	</form>

</body>

访问方式有get方式提交 ===>如要更改,可配置为post方式为:method=“post”<地址栏上不显示,安全>

post方式提交。 ===>如要更改,可配置为get方式为:method= “get”<这也是默认方式。不安全>

表单验证方式也不安全。易造成SQL注入攻击,代码如下:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//sql
public class UserServlet extends HttpServlet {
 	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
 		this.doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
//		response.setContentType("text/html;charset=UTF-8");
		String name = request.getParameter("name");// 取表单数据或地址栏参数的方式。
		String age = request.getParameter("age");
//		if(name!=null) // 解决乱码方式,如果name的值不为空就执行下面的语句,如果为空,就不作任何处理
//		{
//			 name = new String (name.getBytes("ISO-8859-1"),"UTF-8");
//		}
		System.out.println(name);
		request.setAttribute("myname", name);// 通过键“myname”,显示(浏览器取出)值name
		request.setAttribute("myage", age);

		request.getRequestDispatcher("user.jsp").forward(request, response); // 转发
	}
}

③超链接:天生就是get方法访问,天生就会有乱码。

<a href="http://www.baidu.com">百度</a>
<a href="user.do?name=小明&age=10">UserServlet</a>

处理乱码的方式:

String name = request.getParameter("name");// 取表单数据或地址栏参数的方式。
		String age = request.getParameter("age");
		if(name!=null) // 解决乱码方式,如果name的值不为空就执行下面的语句,如果为空,就不作任何处理
		{
			 name = new String (name.getBytes("ISO-8859-1"),"UTF-8");
		}
		System.out.println(name);

④伪链接:天生就是get方法访问,天生就会有乱码。

<script type="text/javascript">
		function login()
		{
			window.location.href="user.do?name=小明&age=10";
		}

	</script>
  </head>

  <body>
      <a href="javascript:login();">伪连接UserServlet</a>

⑤函数提交:天生就是get方法访问,天生就会有乱码。

<input type="button" value="函数提交" onclick="login();">

3、实际开发中,转发技术用的较多。<主要代码如下>

request.getRequestDispatcher("user.jsp").forward(request, response); // 转发

4、通过键“name”,显示(浏览器取出)值“小明”。

request.setAttribute("name","小明");

5、取表单数据或地址栏参数的方式:

String name = request.getParameter("name");
String age = request.getParameter("age");

6、可以用${ }表达式,显示参数的内容,例如:${myname}  ${myage}   <通过键取值>。

request.setAttribute("myname",name);
request.setAttribute("myage",age);

7、多页面跳转<其实是通过Servlet转发>

不通过Servlet进行转发的<这种做法在实际中不用,违背了MVC开发模式,且页面风格、代码风格不统一,难以维护。>

package com.fs.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class StuServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String to = request.getParameter("to");// 取表单数据或地址栏参数的方式。
		if("login".equals(to)) {
			this.login(request, response);
		}else if("main".equals(to)) {
			this.main(request, response);
		}
	}
	//转发到main.jsp
	private void main(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("main.jsp").forward(request, response);
	}

	//转发到login.jsp
	public void login(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		request.getRequestDispatcher("login.jsp").forward(request, response);
	}
}

8、实际中采用MVC开发模式。V显示:jsp,C控制:Servlet

9、会话用对象session<键值对>存储。session对象就是会话对象。只要涉及到登陆的网站就会用上session技术。session和request一样,可以装东西。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class UserServlet extends HttpServlet {

	public int no=100;
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 no ++;
		 String to = request.getParameter("to");
		 if("login".equals(to)){
			 this.login(request, response);
		 }else if("one".equals(to)) {
			 this.one(request, response);
		 }
	}
	private void one(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		//转发到one.jsp
		request.getRequestDispatcher("one.jsp").forward(request, response);
	}
	public void login(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		 String name = request.getParameter("name");
		 String pwd = request.getParameter("pwd");
		 //使用数据验证name与pwd是否正确
		 if("123".equals(pwd)) {
			 HttpSession session = request.getSession();
			 session.setAttribute("username", name);
//			 request.setAttribute("username", name);
			 request.setAttribute("no", no+"");
			 request.getRequestDispatcher("main.jsp").forward(request, response);
		 }else {
			 request.setAttribute("inf", "用户名或密码错误!");
			 request.getRequestDispatcher("index.jsp").forward(request, response);
		 }
	}
}

10、用session对象装数据的方式,在存储转发过程中,数据不会丢失,session会一直在。(多线程的时候会在服务器里面产生多个session对象,且在服务器里保存,各个session对象会根据你的(sessionID===>流水号(长整型))信息进行控制,当关闭浏览器的时候session会自动销毁)

11、设置超链接标签:<a></a>   ====>主要属性参数:href="...",例如下面的代码

<a href="user.do?to=login">到login.jsp</a>



时间: 2024-11-10 00:57:08

Java Web中的servlet、jsp、session等的用法。的相关文章

JAVA WEB中的Servlet过滤器

实现一个Servlet过滤器,可以对用户登录情况进行控制.要求如下: 1)访问路径是admin下的资源,需要登录,如果用户没有登录,自动转向用户登录页面.用户登录成功后,再次访问admin下的资源不需要登录. 2)访问其他路径下的资源,不需要登录,可直接访问. 3)必须使用Servlet过滤器实现该功能. 工具:eclipse.tomcat 过程如下: 一.制作登录界面,其中包含用户名以及密码的验证(实验内容),另外加了一个验证是否是因为访问受限资源而跳转到登陆界面(flag),只能将获得pat

java web中servlet、jsp、html 互相访问的路径问题。

在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可以分两种情况,当然啦两者使用相对路径是一致,本文只说绝对路径. 情况一.指向外部的web组件和本身关系不大的,这一类的有:html中使用路径的标签,比如<a>标签中的href;servlet和jsp中的重定向sendRedirect(path); 情况二.指向内部的web组件和本身有关系的,这一类我暂时看到的有:servlet或者jsp的转发 假设在myapp项目下有

java web.xml listener servlet 和filter的加载顺序

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter. 最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servle

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

今天写SpringMvc时,遇到这样一个问题: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config at org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:101) at org.springframework.web.servlet.view.JstlView.exposeHelpe

jQuery框架+DWR框架实现的Java Web中的Ajax效果(异步请求,局部刷新)

一 简介和实现效果 这里用一个小例子来简单举例说明,做一个搜索引擎搜索提示效果,通过不断输入字符,然后在下方给出搜索提示.效果图如下: 通过上图可以看到,当输入一个"a"时,提示了很多内容,然后继续输入一个"e"后,提示的范围明显就变小了. 注:在文末我会给出完整源代码的下载链接,以供大家参考 二 具体实现 1 在eclipse for java ee中创建一个Java Web工程,然后导入相应的jar包,特别说明的是:这里要导入一个额外的dwr.jar.也就是说,

java web中路径问题。

转自:http://blog.csdn.net/liang5630/article/details/38474543 如有侵权,请及时联系本人及时删除 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可以分两种情况,当然啦两者使用相对路径是一致,本文只说绝对路径. 情况一.指向外部的web组件和本身关系不大的,这一类的有:html中使用路径的标签,比如<a>标签中的href;servlet和jsp中的重定向sendR

Java Web中涉及的编解码

用户从浏览器发起一个HTTP请求,存在编码的地方是URL.Cookie.Paramiter.服务器端接收到HTTP请求后要解析HTTP协议,其中URL.Cookie和POST表单参数要解码,服务器端可能还需要读取硬盘数据(数据库.文件),这些数据都可能存在编码问题.当Servlet处理完所有请求的数据后,需要将这些数据再编码通过Socket发送到用户请求的浏览器里,再经过浏览器解码成为文本.这些过程用图表示如下: 1.URL的编解码 为了验证浏览器是怎么编码URL的,我们选择FireFox浏览器

HTTP Status 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag

我在项目中导入了jar,还是不能使用EL表达式,一运行就出现了下面的额错误: org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWra

CKEditor4 在java web中的应用说明(详细可行)

按照官方的说明书就可,这里主要注意一点!! 就是<script src="../ckeditor.js"></script>中js文件的路径问题,我的ckeditor文件夹是在WebContent文件夹下,jsp文件是同一层目录的,所以最后的代码应该是 <script type="text/javascript"src="./ckeditor/ckeditor.js"></script> 注意斜杆号