JSP与Servlet入门到精通(一)

JSP与Servlet入门到精通(一)

//struts通过拦截器拦截用户的请求交给struts处理,通过类实现Action接口之后实现默认的方法,返回接口中定义好的静态变量
//接口里5个有静态构造,SUCCESS="success",NONE="none",ERROR="error", INPUT="input" LOGIN="login"    
//然后再struts.xml中配置类,根据result的name的接收类的返回值确定跳转的页面,url通过请求action中的name来执行Action中的默认方法

struts的jar包

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>HeadFirstStruts2Chap01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
    <filter>
        <filter-name>Struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>Struts2</filter-name>
        <url-pattern>/*</url-pattern>
  </filter-mapping>


</web-app>

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <package name="helloWorld" extends="struts-default">
  	<action name="hello" class="com.java1234.action.HelloWorldAction">
  		<result name="success">helloWorld.jsp</result>
  	</action>
  	
 
  </package>

</struts>

HelloWorldAction.java

package com.java1234.action;

import com.opensymphony.xwork2.Action;

public class HelloWorldAction implements Action{

	@Override
	public String execute() throws Exception {
		System.out.println("执行了Action的默认方法");
		return SUCCESS;
	}

}

HeadFirstStruts2Chap01\WebContent\helloWorld.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
Struts2大爷你好!
</body>
</html>

请求url localhost:8080/HeadFirstStruts2Chap01/hello

Action的自动赋值

    //get方式提交数据拦截器会自动调用拼接在url后面的参数,传到类中对应的属性里面
    //post方式提交表单的数据,name的值必须与后台类中的属性值一样,通过get与set来获取对应的值
    //ActionSupport不光实现了Action还实现了其他的拦截器与国际化

    //模型javaBean驱动设置数据,前台的name要加上Bean点的方式javaBean.userName自动赋值处理
    //模型分离实现ModelDriven<T>接口,返回user

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <package name="helloWorld" extends="struts-default">
  	
  	<action name="user" class="com.java1234.action.UserAction">
  		<result name="success">success.jsp</result>
  		<result name="error">error.jsp</result>
  	</action>
  	
  	<action name="user2" class="com.java1234.action.UserAction2">
  		<result name="success">success.jsp</result>
  		<result name="error">error.jsp</result>
  	</action>
  	
  	<action name="user3" class="com.java1234.action.UserAction3">
  		<result name="success">success.jsp</result>
  		<result name="error">error.jsp</result>
  	</action>

  </package>

</struts>

通过get方式获取值

UserAction.java


import com.java1234.model.User;
import com.java1234.service.UserService;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private UserService userService=new UserService();
	
	private String userName;
	private String password;
	
	

	public String getUserName() {
		return userName;
	}



	public void setUserName(String userName) {
		this.userName = userName;
	}



	public String getPassword() {
		return password;
	}



	public void setPassword(String password) {
		this.password = password;
	}



	@Override
	public String execute() throws Exception {
		System.out.println("执行了UserAction的默认方法");
		User user=new User();
		user.setUserName(userName);
		user.setPassword(password);
		if(userService.login(user)){
			return SUCCESS;
		}else{
			return ERROR;
		}
	}

}

通过post的方式赋值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="user" method="post">
	用户名:<input type="text" name="userName"/>
	密码:<input type="text" name="password"/>
	<input type="submit" value="登录"/>
</form>
</body>
</html>

JavaBean的方式赋值


import com.java1234.model.User;
import com.java1234.service.UserService;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction2 extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private UserService userService=new UserService();
	
	private User user;
	

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}



	@Override
	public String execute() throws Exception {
		System.out.println("执行了UserAction的默认方法");
		if(userService.login(user)){
			return SUCCESS;
		}else{
			return ERROR;
		}
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="user2" method="post">
	用户名:<input type="text" name="user.userName"/>
	密码:<input type="text" name="user.password"/>
	<input type="submit" value="登录"/>
</form>
</body>
</html>

模型分离

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="user3" method="post">
	用户名:<input type="text" name="userName"/>
	密码:<input type="text" name="password"/>
	<input type="submit" value="登录"/>
</form>
</body>
</html>
package com.java1234.action;


import com.java1234.model.User;
import com.java1234.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction3 extends ActionSupport implements ModelDriven<User>{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private UserService userService=new UserService();
	
	private User user=new User();
	
	@Override
	public String execute() throws Exception {
		System.out.println("执行了UserAction3的默认方法");
		if(userService.login(user)){
			return SUCCESS;
		}else{
			return ERROR;
		}
	}

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}

}

多个值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="hobby" method="post">
	爱好:
	<input type="checkbox" name="hobby" value="唱歌"/>唱歌
	<input type="checkbox" name="hobby" value="跳舞"/>跳舞
	<input type="checkbox" name="hobby" value="睡觉"/>睡觉
	<input type="checkbox" name="hobby" value="玩CF"/>玩CF
	<input type="submit" value="提交"/>
</form>
</body>
</html>
import com.opensymphony.xwork2.Action;

public class HobbyAction implements Action{

	private String[] hobby;

	public String[] getHobby() {
		return hobby;
	}

	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}


	@Override
	public String execute() throws Exception {
		System.out.println("执行了Action的默认方法");
		if(hobby!=null){
			for(String h:hobby){
				System.out.println(h);
			}
		}
		return SUCCESS;
	}

}

//下标表示第一个对象的对应属性,如果不是规定的写法则不能获取到值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="student" method="post">
	<table>
		<tr>
			<th>姓名</th>
			<th>性别</th>
			<th>年龄</th>
		</tr>
		<tr>
			<td><input type="text" name="students[0].name"/></td>
			<td><input type="text" name="students[0].sex"/></td>
			<td><input type="text" name="students[0].age"/></td>
		</tr>
		<tr>
			<td><input type="text" name="students[1].name"/></td>
			<td><input type="text" name="students[1].sex"/></td>
			<td><input type="text" name="students[1].age"/></td>
		</tr>
		<tr>
			<td colspan="3">
				<input type="submit" value="提交"/>
			</td>
		</tr>
	</table>
</form>
</body>
</html>
import java.util.List;

import com.java1234.model.Student;
import com.opensymphony.xwork2.Action;

public class StudentAction implements Action{

	private List<Student> students;
	
	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}


	@Override
	public String execute() throws Exception {
		System.out.println("执行了Action的默认方法");
		for(Student s:students){
			System.out.println(s);
		}
		return SUCCESS;
	}

}

    //struts配置文件package的name相当于定义了两个包,在保重定义具体模块层级比较简单明了
    //extends表示继承有拦截器等功能的包,namespace表示命名空间相当于寻找的时候在namespace文件夹下寻找jsp文件,请求url的时候增加前缀
    //abstract相当于一个抽象包,里面不能有具体实现的action,过滤请求里面的数据判断是否有敏感词汇,其他的package可以继承
    
    //action的name为action的名,class为处理的类,method的默认处理为execute、可以指定出列的方法

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <package name="foreground" namespace="/fore" extends="struts-default">
  	<action name="studentList" class="com.java1234.action.ForeStudent">
  		<result name="success">${pageContext.request.contextPath}/success.jsp</result>
  	</action>
  
  </package>
  
  <package name="background" namespace="/back" extends="struts-default">
  	<action name="studentList" class="com.java1234.action.BackStudent" method="show">
  		<result name="success">${pageContext.request.contextPath}/success.jsp</result>
  	</action>
  
  </package>
  
  <package name="infoFilter" abstract="true"></package>

</struts>

BackStudent.java

package com.java1234.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class BackStudent extends ActionSupport{

	@Override
	public String execute() throws Exception {
		System.out.println("执行了BackStudent Action的默认方法");
		return SUCCESS;
	}
	
	public String show()throws Exception{
		System.out.println("执行了 BackStudent show方法");
		return SUCCESS;
	}

}

//分模块更加的清晰方便管理action

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <include file="cheliang.xml"></include>
  <include file="zichan.xml"></include>

</struts>

cheliang.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <package name="cheliang" namespace="/cheliang" extends="struts-default">
  	<action name="cheliang" class="com.java1234.action.CheLiangAction">
  		<result name="success">${pageContext.request.contextPath}/success.jsp</result>
  	</action>
  
  </package>

</struts>

zichan.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <package name="zichan" namespace="/zichan" extends="struts-default">
  	<action name="zichan" class="com.java1234.action.ZiChanAction">
  		<result name="success">${pageContext.request.contextPath}/success.jsp</result>
  	</action>
  
  </package>

</struts>

//通配符*表示任何的方法,method{1}表示获取第一个方法,要与前端href要对应
//*_* 第一个通配符表示请求的类Action前面的前缀必须一样第二个通配符表示请求的具体方法
//动态方法调用不需要配置method了,只需要在action中定义name在前台根据name找到对应的方法     
//struts的生命周期,  每次Action请求都会产生一个新的实例     

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  
  <package name="manage" namespace="/" extends="struts-default">
  	
  	<!-- <action name="student_*" class="com.java1234.action.StudentAction" method="{1}">
  		<result name="success">success.jsp</result>
  	</action>
  	
  	<action name="grade_*" class="com.java1234.action.GradeAction" method="{1}">
  		<result name="success">success.jsp</result>
  	</action> -->
  	
  	<!-- <action name="*_*" class="com.java1234.action.{1}Action" method="{2}">
  		<result name="success">success.jsp</result>
  	</action> -->
  	
  	<action name="student" class="com.java1234.action.StudentAction">
  		<result name="success">success.jsp</result>
  	</action>
  	
  	<action name="grade" class="com.java1234.action.GradeAction">
  		<result name="success">success.jsp</result>
  	</action>
  
  </package>

</struts>

StudentAction.java

package com.java1234.action;

import com.opensymphony.xwork2.ActionSupport;

public class StudentAction extends ActionSupport{

	private String name;
	
	
	
	public String getName() {
		return name;
	}



	public void setName(String name) {
		this.name = name;
	}



	public String list()throws Exception{
		System.out.println("学生查找");
		name="学生查找";
		return SUCCESS;
	}
	
	public String add()throws Exception{
		System.out.println("学生添加");
		name="学生添加";
		return SUCCESS;
	}
	
	public String update()throws Exception{
		System.out.println("学生修改");
		name="学生修改";
		return SUCCESS;
	}
	
	public String delete()throws Exception{
		System.out.println("学生删除");
		name="学生删除";
		return SUCCESS;
	}

	
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>通配符</h1>
<a href="Student_list" target="_blank">学生信息查询</a>&nbsp;
<a href="Student_add" target="_blank">学生信息添加</a>&nbsp;
<a href="Student_update" target="_blank">学生信息修改</a>&nbsp;
<a href="Student_delete" target="_blank">学生信息删除</a>&nbsp;
<br/><br/>
<a href="Grade_list" target="_blank">班级信息查询</a>&nbsp;
<a href="Grade_add" target="_blank">班级信息添加</a>&nbsp;
<a href="Grade_update" target="_blank">班级信息修改</a>&nbsp;
<a href="Grade_delete" target="_blank">班级信息删除</a>&nbsp;<br/>
<h1>动态方法调用</h1>
<a href="student!list" target="_blank">学生信息查询</a>&nbsp;
<a href="student!add" target="_blank">学生信息添加</a>&nbsp;
<a href="student!update" target="_blank">学生信息修改</a>&nbsp;
<a href="student!delete" target="_blank">学生信息删除</a>&nbsp;
<br/><br/>
<a href="grade!list" target="_blank">班级信息查询</a>&nbsp;
<a href="grade!add" target="_blank">班级信息添加</a>&nbsp;
<a href="grade!update" target="_blank">班级信息修改</a>&nbsp;
<a href="grade!delete" target="_blank">班级信息删除</a>&nbsp;<br/>
</body>
</html>

//result的配置type类型默认dispatcher内部转发可以传递request中的参数,redirect重定向无法传递request的参数,chain链条,redirectAction重定向到Action
//chain链条一个请求执行另外一个请求后继续处理,数据可以共享     
//redirectAction重定向到Action,重定向数据不能共享

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
  <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  
  <package name="manage" namespace="/" extends="struts-default">
  	<global-results>
  		<result name="error">error.jsp</result>
  	</global-results>
  	
  	<action name="hello" class="com.java1234.action.HelloAction">
  		<result name="success" type="dispatcher">success.jsp</result>
  		<result name="r" type="redirect">success.jsp</result>
  		<result name="c" type="chain">hello2</result>
  		<result name="ra" type="redirectAction">hello2</result>
  	</action>
  	
  	<action name="hello2" class="com.java1234.action.HelloAction2">
  		<result name="success" type="dispatcher">success.jsp</result>
  	</action>
  </package>

</struts>

HelloAction.java

package com.java1234.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String name;
	private String error;
	
	

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	

	public String getError() {
		return error;
	}

	public void setError(String error) {
		this.error = error;
	}

	@Override
	public String execute() throws Exception {
		if(name==null || "".equals(name)){
			this.error="name是空";
			return ERROR;
		}
		return SUCCESS;
	}
	
	
	public String r()throws Exception{
		return "r";
	}
	
	public String c()throws Exception{
		return "c";
	}

	public String ra()throws Exception{
		return "ra";
	}
	
	
	
}

HelloAction2.java

package com.java1234.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction2 extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String name2;
	

	public String getName2() {
		return name2;
	}


	public void setName2(String name2) {
		this.name2 = name2;
	}


	@Override
	public String execute() throws Exception {
		this.name2="你好啊";
		return SUCCESS;
	}
	
	
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="hello?name=Struts2" target="_blank">默认转发_dispatcher</a><br/>
<a href="hello!r?name=Struts2" target="_blank">重定向_redirect</a><br/>
<a href="hello!c?name=Struts2" target="_blank">链条_chain</a><br/>
<a href="hello!ra?name=Struts2" target="_blank">重定向到Action_redirectAction</a><br/>

<a href="hello" target="_blank">全局result配置</a><br/>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
Name:${name }<br/>
Name2:${name2 }
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/94589624